Repository: LegoFigure11/RaidCrawler
Branch: main
Commit: 2575549f333b
Files: 129
Total size: 1.2 MB
Directory structure:
gitextract_kdttnkap/
├── .editorconfig
├── .gitattributes
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ └── bug_report.md
│ ├── dependabot.yml
│ └── workflows/
│ └── dotnet-desktop.yml
├── .gitignore
├── Directory.Build.props
├── LICENSE
├── README.md
├── RaidCrawler.Core/
│ ├── Connection/
│ │ └── ConnectionWrapper.cs
│ ├── Discord/
│ │ └── NotificationHandler.cs
│ ├── Extensions/
│ │ ├── EncounterExtensions.cs
│ │ └── RaidExtensions.cs
│ ├── Interfaces/
│ │ ├── IDateAdvanceConfig.cs
│ │ └── IWebhookConfig.cs
│ ├── RaidCrawler.Core.csproj
│ ├── Resources/
│ │ ├── Base/
│ │ │ ├── den_locations_base.json
│ │ │ ├── raid_fixed_reward_item_array.json
│ │ │ └── raid_lottery_reward_item_array.json
│ │ ├── Blueberry/
│ │ │ └── den_locations_blueberry.json
│ │ └── Kitakami/
│ │ └── den_locations_kitakami.json
│ ├── Schemas/
│ │ └── raids.fbs
│ └── Structures/
│ ├── Areas.cs
│ ├── FlatBufferStructures/
│ │ ├── DeliveryRaidFixedRewardItem.cs
│ │ ├── DeliveryRaidLotteryRewardItem.cs
│ │ ├── PokeDataBattle.cs
│ │ ├── RaidBossData.cs
│ │ ├── RaidBossSizeData.cs
│ │ ├── RaidEnemyInfo.cs
│ │ └── RaidSerializationFormat.cs
│ ├── FlatbufferDumper.cs
│ ├── ITeraRaid.cs
│ ├── MapMagic.cs
│ ├── Offsets.cs
│ ├── Raid.cs
│ ├── RaidBlock.cs
│ ├── RaidContainer.cs
│ ├── RaidFilter.cs
│ ├── RaidRewards.cs
│ ├── TeraDistribution.cs
│ ├── TeraEncounter.cs
│ └── Utils.cs
├── RaidCrawler.Tests/
│ ├── Blocks/
│ │ ├── anubis_Might_cleared_VL/
│ │ │ ├── base
│ │ │ ├── fixed_reward_item_array
│ │ │ ├── lottery_reward_item_array
│ │ │ ├── raid_enemy_array
│ │ │ └── raid_priority_array
│ │ ├── buddy_12_Distro_noMight_VL/
│ │ │ ├── base
│ │ │ ├── fixed_reward_item_array
│ │ │ ├── lottery_reward_item_array
│ │ │ ├── raid_enemy_array
│ │ │ └── raid_priority_array
│ │ ├── chaos_12_Distro_noMight_VL/
│ │ │ ├── base
│ │ │ ├── fixed_reward_item_array
│ │ │ ├── lottery_reward_item_array
│ │ │ ├── raid_enemy_array
│ │ │ └── raid_priority_array
│ │ ├── lisa_30_449_Gentle_21_31_25_21_8_31_SL/
│ │ │ ├── base
│ │ │ ├── fixed_reward_item_array
│ │ │ ├── lottery_reward_item_array
│ │ │ ├── raid_enemy_array
│ │ │ └── raid_priority_array
│ │ ├── newt_56_761_Calm_4_7_4_3_31_25_VL/
│ │ │ ├── base
│ │ │ ├── fixed_reward_item_array
│ │ │ ├── lottery_reward_item_array
│ │ │ ├── raid_enemy_array
│ │ │ └── raid_priority_array
│ │ ├── senna_9_132_Modest_31_0_31_31_31_31_SL/
│ │ │ ├── base
│ │ │ ├── fixed_reward_item_array
│ │ │ ├── lottery_reward_item_array
│ │ │ ├── raid_enemy_array
│ │ │ └── raid_priority_array
│ │ └── zyro_Inteleon_IL_VL/
│ │ ├── base
│ │ ├── fixed_reward_item_array
│ │ ├── lottery_reward_item_array
│ │ ├── raid_enemy_array
│ │ └── raid_priority_array
│ ├── FilterTests.cs
│ ├── Filters/
│ │ ├── BounsweetShiny.json
│ │ ├── Ditto0Atk.json
│ │ ├── Ditto0Spe.json
│ │ └── IVControl.json
│ ├── RaidCrawler.Tests.csproj
│ ├── RaidReadTests.cs
│ ├── RaidStatTests.cs
│ └── TestUtil.cs
├── RaidCrawler.WinForms/
│ ├── App.config
│ ├── Config.cs
│ ├── ErrorHandler/
│ │ └── ErrorHandler.cs
│ ├── MainWindow.Designer.cs
│ ├── MainWindow.cs
│ ├── MainWindow.resx
│ ├── Program.cs
│ ├── Properties/
│ │ ├── Resources.Designer.cs
│ │ ├── Resources.resx
│ │ ├── Settings.Designer.cs
│ │ └── Settings.settings
│ ├── RaidCrawler.WinForms.csproj
│ └── SubForms/
│ ├── ConfigWindow.Designer.cs
│ ├── ConfigWindow.cs
│ ├── ConfigWindow.resx
│ ├── EmojiConfig.Designer.cs
│ ├── EmojiConfig.cs
│ ├── EmojiConfig.resx
│ ├── FilterSettings.Designer.cs
│ ├── FilterSettings.cs
│ ├── FilterSettings.resx
│ ├── ItemIDs.Designer.cs
│ ├── ItemIDs.cs
│ ├── ItemIDs.resx
│ ├── MapView.Designer.cs
│ ├── MapView.cs
│ ├── MapView.resx
│ ├── RaidBlockViewer.Designer.cs
│ ├── RaidBlockViewer.cs
│ ├── RaidBlockViewer.resx
│ ├── RewardsView.Designer.cs
│ ├── RewardsView.cs
│ ├── RewardsView.resx
│ ├── TeraRaidView.Designer.cs
│ ├── TeraRaidView.cs
│ ├── TeraRaidView.resx
│ ├── TickModifier.Designer.cs
│ ├── TickModifier.cs
│ ├── TickModifier.resx
│ ├── UpdateNotifPopup.Designer.cs
│ ├── UpdateNotifPopup.cs
│ └── UpdateNotifPopup.resx
└── RaidCrawler.sln
================================================
FILE CONTENTS
================================================
================================================
FILE: .editorconfig
================================================
root = true
# All Files
[*]
charset = utf-8
indent_style = space
indent_size = 4
insert_final_newline = true
trim_trailing_whitespace = true
# Solution Files
[*.sln]
indent_style = space
indent_size = 4
insert_final_newline = true
trim_trailing_whitespace = true
# XML Project Files
[*.csproj]
indent_style = space
indent_size = 2
# Code Files
[*.cs]
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = space
indent_size = 4
tab_width = 4
end_of_line = crlf
csharp_prefer_braces = when_multiline:warning
dotnet_diagnostic.IDE0047.severity = none
dotnet_diagnostic.IDE0048.severity = none
dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:suggest
dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:suggest
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:suggest
dotnet_style_parentheses_in_other_operators = always_for_clarity:suggest
[*.{cs,vb}]
#### Naming styles ####
# Naming styles
dotnet_naming_style.begins_with_i.required_prefix = I
dotnet_naming_style.begins_with_i.capitalization = pascal_case
================================================
FILE: .gitattributes
================================================
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
* text=auto
###############################################################################
# Set default behavior for command prompt diff.
#
# This is need for earlier builds of msysgit that does not have it on by
# default for csharp files.
# Note: This is only used by command line
###############################################################################
#*.cs diff=csharp
###############################################################################
# Set the merge driver for project and solution files
#
# Merging from the command prompt will add diff markers to the files if there
# are conflicts (Merging from VS is not affected by the settings below, in VS
# the diff markers are never inserted). Diff markers may cause the following
# file extensions to fail to load in VS. An alternative would be to treat
# these files as binary and thus will always conflict and require user
# intervention with every merge. To do so, just uncomment the entries below
###############################################################################
#*.sln merge=binary
#*.csproj merge=binary
#*.vbproj merge=binary
#*.vcxproj merge=binary
#*.vcproj merge=binary
#*.dbproj merge=binary
#*.fsproj merge=binary
#*.lsproj merge=binary
#*.wixproj merge=binary
#*.modelproj merge=binary
#*.sqlproj merge=binary
#*.wwaproj merge=binary
###############################################################################
# behavior for image files
#
# image files are treated as binary by default.
###############################################################################
#*.jpg binary
#*.png binary
#*.gif binary
###############################################################################
# diff behavior for common document formats
#
# Convert binary document formats to text before diffing them. This feature
# is only available from the command line. Turn it on by uncommenting the
# entries below.
###############################################################################
#*.doc diff=astextplain
#*.DOC diff=astextplain
#*.docx diff=astextplain
#*.DOCX diff=astextplain
#*.dot diff=astextplain
#*.DOT diff=astextplain
#*.pdf diff=astextplain
#*.PDF diff=astextplain
#*.rtf diff=astextplain
#*.RTF diff=astextplain
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us fix incorrect/unexpected behavior or results
title: ''
labels: bug
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
If applicable, please list the steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen, or what you found in-game.
**Raid Data**
If the result you see in the program does not match what you see in-game, please click "Dump Raid" and replace this text with the bytes in the window that pops up.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Additional context**
Add any other context about the problem here.
================================================
FILE: .github/dependabot.yml
================================================
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
- package-ecosystem: "github-actions" # See documentation for possible values
directory: "/" # Location of package manifests
schedule:
interval: "weekly"
================================================
FILE: .github/workflows/dotnet-desktop.yml
================================================
name: .NET Core Desktop
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
env:
Configuration: 'Release'
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Install .NET Core
uses: actions/setup-dotnet@v5
with:
dotnet-version: |
10.0.x
- name: Restore the solution
run: dotnet restore
- name: Publish
run: |
dotnet build --configuration $env:Configuration --no-restore
dotnet publish -c $env:Configuration -r win-x64 --self-contained false
- name: Archive production artifacts
if: ${{ success() }}
uses: actions/upload-artifact@v7
with:
name: RaidCrawler
path: |
./RaidCrawler.WinForms/bin/x64/Release/net10.0-windows/win-x64/publish/
================================================
FILE: .gitignore
================================================
## 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
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Oo]ut/
[Ll]og/
[Ll]ogs/
# 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
nunit-*.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/
# ASP.NET Scaffolding
ScaffoldingReadMe.txt
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.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
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Coverlet is a free, cross platform Code Coverage Tool
coverage*.json
coverage*.xml
coverage*.info
# 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
# NuGet Symbol Packages
*.snupkg
# 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
*.appxbundle
*.appxupload
# 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
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl
# 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/
# CodeRush personal settings
.cr/personal
# 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/
# Local History for Visual Studio
.localhistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
.ionide/
# Fody - auto-generated XML schema
FodyWeavers.xsd
================================================
FILE: Directory.Build.props
================================================
net9.0
win-x64
13
enable
en
false
true
true
$([System.DateTime]::UtcNow.ToString("yyMMddHHmmss"))
none
false
portable
================================================
FILE: LICENSE
================================================
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc.
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
Copyright (C)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
Copyright (C)
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
.
================================================
FILE: README.md
================================================
# RaidCrawler


[](https://nightly.link/LegoFigure11/RaidCrawler/workflows/dotnet-desktop/main/RaidCrawler.zip)
[sys-botbase](https://github.com/LegoFigure11/usb-botbase) client Raid Viewer for Pokémon Scarlet and Violet.
**Basic usage guide:** [Click here](https://billo-guides.github.io/cfw/sv/raidcrawler) (thanks [Billo](https://github.com/Billo-PS)!)

Leverages SysBot.Base.dll from [kwsch/SysBot.NET](https://github.com/kwsch/SysBot.NET)
================================================
FILE: RaidCrawler.Core/Connection/ConnectionWrapper.cs
================================================
using PKHeX.Core;
using RaidCrawler.Core.Interfaces;
using RaidCrawler.Core.Structures;
using SysBot.Base;
using System.Net.Sockets;
using System.Text;
using static SysBot.Base.SwitchButton;
namespace RaidCrawler.Core.Connection;
public class ConnectionWrapperAsync(SwitchConnectionConfig Config, Action StatusUpdate) : Offsets
{
public readonly ISwitchConnectionAsync Connection = Config.Protocol switch
{
SwitchProtocol.USB => new SwitchUSBAsync(Config.Port),
_ => new SwitchSocketAsync(Config),
};
public bool Connected => IsConnected;
private bool IsConnected { get; set; }
private readonly bool CRLF = Config.Protocol is SwitchProtocol.WiFi;
private static ulong BaseBlockKeyPointer;
public async Task<(bool, string)> Connect(CancellationToken token)
{
if (Connected)
return (true, "");
try
{
StatusUpdate("Connecting...");
Connection.Connect();
BaseBlockKeyPointer = await Connection
.PointerAll(BlockKeyPointer.ToArray(), token)
.ConfigureAwait(false);
IsConnected = true;
StatusUpdate("Connected!");
return (true, "");
}
catch (SocketException e)
{
IsConnected = false;
return (false, e.Message);
}
}
public async Task<(bool, string)> DisconnectAsync(CancellationToken token)
{
if (!Connected)
return (true, "");
try
{
StatusUpdate("Disconnecting controller...");
await Connection
.SendAsync(SwitchCommand.DetachController(CRLF), token)
.ConfigureAwait(false);
StatusUpdate("Disconnecting...");
Connection.Disconnect();
IsConnected = false;
StatusUpdate("Disconnected!");
return (true, "");
}
catch (SocketException e)
{
IsConnected = false;
return (false, e.Message);
}
}
public async Task GetStoryProgress(CancellationToken token)
{
for (int i = DifficultyFlags.Length - 1; i >= 0; i--)
{
// See https://github.com/Lincoln-LM/sv-live-map/pull/43
var block = await ReadSaveBlock(DifficultyFlags[i], 1, token).ConfigureAwait(false);
if (block[0] == 2)
return i + 1;
}
return 0;
}
private async Task ReadSaveBlock(uint key, int size, CancellationToken token)
{
var block_ofs = await SearchSaveKey(key, token).ConfigureAwait(false);
var data = await Connection
.ReadBytesAbsoluteAsync(block_ofs + 8, 0x8, token)
.ConfigureAwait(false);
block_ofs = BitConverter.ToUInt64(data, 0);
var block = await Connection
.ReadBytesAbsoluteAsync(block_ofs, size, token)
.ConfigureAwait(false);
return DecryptBlock(key, block);
}
private async Task ReadSaveBlockObject(uint key, CancellationToken token)
{
var header_ofs = await SearchSaveKey(key, token).ConfigureAwait(false);
var data = await Connection
.ReadBytesAbsoluteAsync(header_ofs + 8, 8, token)
.ConfigureAwait(false);
header_ofs = BitConverter.ToUInt64(data);
var header = await Connection
.ReadBytesAbsoluteAsync(header_ofs, 5, token)
.ConfigureAwait(false);
header = DecryptBlock(key, header);
var size = BitConverter.ToUInt32(header.AsSpan()[1..]);
var obj = await Connection
.ReadBytesAbsoluteAsync(header_ofs, (int)size + 5, token)
.ConfigureAwait(false);
return DecryptBlock(key, obj)[5..];
}
public async Task ReadBlockDefault(uint key, string? cache, bool force, CancellationToken token)
{
var folder = Path.Combine(Directory.GetCurrentDirectory(), "cache");
Directory.CreateDirectory(folder);
var path = Path.Combine(folder, cache ?? "");
if (!force && cache is not null && File.Exists(path))
return await File.ReadAllBytesAsync(path, token);
var bin = await ReadSaveBlockObject(key, token).ConfigureAwait(false);
await File.WriteAllBytesAsync(path, bin, token);
return bin;
}
private async Task SearchSaveKey(uint key, CancellationToken token)
{
var data = await Connection
.ReadBytesAbsoluteAsync(BaseBlockKeyPointer + 8, 16, token)
.ConfigureAwait(false);
var start = BitConverter.ToUInt64(data.AsSpan()[..8]);
var end = BitConverter.ToUInt64(data.AsSpan()[8..]);
while (start < end)
{
var block_ct = (end - start) / 48;
var mid = start + ((block_ct >> 1) * 48);
data = await Connection.ReadBytesAbsoluteAsync(mid, 4, token).ConfigureAwait(false);
var found = BitConverter.ToUInt32(data);
if (found == key)
return mid;
if (found >= key)
end = mid;
else
start = mid + 48;
}
return start;
}
private static byte[] DecryptBlock(uint key, byte[] block)
{
var rng = new SCXorShift32(key);
for (int i = 0; i < block.Length; i++)
block[i] = (byte)(block[i] ^ rng.Next());
return block;
}
private async Task Click(SwitchButton button, int delay, CancellationToken token)
{
await Connection
.SendAsync(SwitchCommand.Click(button, CRLF), token)
.ConfigureAwait(false);
await Task.Delay(delay, token).ConfigureAwait(false);
}
private async Task Touch(int x, int y, int hold, int delay, CancellationToken token)
{
var command = Encoding.ASCII.GetBytes(
$"touchHold {x} {y} {hold}{(CRLF ? "\r\n" : "")}"
);
await Connection.SendAsync(command, token).ConfigureAwait(false);
await Task.Delay(delay, token).ConfigureAwait(false);
}
private async Task SetStick(
SwitchStick stick,
short x,
short y,
int hold,
int delay,
CancellationToken token
)
{
await Connection
.SendAsync(SwitchCommand.SetStick(stick, x, y, CRLF), token)
.ConfigureAwait(false);
await Task.Delay(hold, token).ConfigureAwait(false);
await Connection
.SendAsync(SwitchCommand.SetStick(stick, 0, 0, CRLF), token)
.ConfigureAwait(false);
await Task.Delay(delay, token).ConfigureAwait(false);
}
private async Task PressAndHold(
SwitchButton b,
int hold,
int delay,
CancellationToken token
)
{
await Connection.SendAsync(SwitchCommand.Hold(b, CRLF), token).ConfigureAwait(false);
await Task.Delay(hold, token).ConfigureAwait(false);
await Connection.SendAsync(SwitchCommand.Release(b, CRLF), token).ConfigureAwait(false);
await Task.Delay(delay, token).ConfigureAwait(false);
}
private async Task SkipHour(int hours, int delay, CancellationToken token)
{
var command = Encoding.ASCII.GetBytes($"timeSkipForward{(CRLF ? "\r\n" : "")}");
for (int i = 0; i < hours; i++)
{
await Connection.SendAsync(command, token).ConfigureAwait(false);
await Task.Delay(delay, token).ConfigureAwait(false);
}
}
public async Task ResetTime(CancellationToken token)
{
var command = Encoding.ASCII.GetBytes($"resetTime{(CRLF ? "\r\n" : "")}");
await Connection.SendAsync(command, token).ConfigureAwait(false);
}
public async Task ResetTimeNTP(CancellationToken token)
{
var command = Encoding.ASCII.GetBytes($"resetTimeNTP{(CRLF ? "\r\n" : "")}");
await Connection.SendAsync(command, token).ConfigureAwait(false);
}
public async Task GetCurrentTime(CancellationToken token)
{
var command = Encoding.ASCII.GetBytes($"getCurrentTime{(CRLF ? "\r\n" : "")}");
var res = await Connection.ReadRaw(command, 17, token).ConfigureAwait(false);
ulong.TryParse(Encoding.ASCII.GetString(res).Trim('\n'), System.Globalization.NumberStyles.AllowHexSpecifier, null, out var time);
return time;
}
public async Task SetCurrentTime(ulong date, CancellationToken token)
{
var command = Encoding.ASCII.GetBytes($"setCurrentTime {date}{(CRLF ? "\r\n" : "")}");
await Connection.SendAsync(command, token).ConfigureAwait(false);
}
// Thank you to Anubis for sharing a more optimized routine, as well as CloseGame(), StartGame(), and SaveGame()!
public async Task AdvanceDate(
IDateAdvanceConfig config,
int skips,
CancellationToken token,
Action? action = null
)
{
// Not great, but when adding/removing clicks, make sure to account for command count for an accurate StreamerView progress bar.
int steps =
(config.UseTouch ? 19 : 25)
+ (config.UseOvershoot ? 2 : config.SystemDownPresses)
+ (config.DodgeSystemUpdate ? 2 : 0)
+ config.DaysToSkip;
if (config.ZyroMethod)
steps = 3;
StatusUpdate("Changing date...");
var BaseDelay = config.BaseDelay;
if (config.ZyroMethod)
{
if (skips % 2 == 0)
{
await SkipHour(24, 0, token).ConfigureAwait(false);
}
else
{
await ResetTime(token).ConfigureAwait(false);
}
await Task.Delay(3_000, token).ConfigureAwait(false);
}
else
{
if (!config.UseMapTrick)
{
// Sometimes the first command drops, click twice with shorter delays for good measure.
await Click(B, 0_100, token).ConfigureAwait(false);
UpdateProgressBar(action, steps);
await Click(B, 0_100, token).ConfigureAwait(false);
UpdateProgressBar(action, steps);
}
else
{
await Click(ZL, 0_100, token).ConfigureAwait(false);
await Click(ZL, 1_500, token).ConfigureAwait(false);
UpdateProgressBar(action, steps);
await Click(ZR, 2_000, token).ConfigureAwait(false);
UpdateProgressBar(action, steps);
}
// HOME Menu
await Click(HOME, config.OpenHomeDelay + BaseDelay, token).ConfigureAwait(false);
UpdateProgressBar(action, steps);
// Navigate to Settings
if (config.UseTouch)
{
await Touch(0_909, 0_540, 0_050, 0, token).ConfigureAwait(false);
UpdateProgressBar(action, steps);
}
else
{
await Click(DDOWN, config.NavigateToSettingsDelay + BaseDelay, token)
.ConfigureAwait(false);
UpdateProgressBar(action, steps);
for (int i = 0; i < 7; i++)
{
await Click(DRIGHT, config.NavigateToSettingsDelay + BaseDelay, token)
.ConfigureAwait(false);
UpdateProgressBar(action, steps);
}
}
await Click(A, config.OpenSettingsDelay + BaseDelay, token).ConfigureAwait(false);
UpdateProgressBar(action, steps);
// Scroll to bottom
if (config.UseSetStick)
await SetStick(SwitchStick.LEFT, 0, -30_000, config.HoldDuration, 0_100 + BaseDelay, token).ConfigureAwait(false);
else
await PressAndHold(DDOWN, config.HoldDuration, 0_100 + BaseDelay, token).ConfigureAwait(false);
UpdateProgressBar(action, steps);
// Navigate to "Date and Time"
StatusUpdate("Navigating to \"Date and Time\"...");
await Click(A, 0_300 + BaseDelay, token).ConfigureAwait(false);
UpdateProgressBar(action, steps);
// Hold down to overshoot Date/Time by one. DUP to recover.
if (config.UseOvershoot)
{
if (config.UseSetStick)
await SetStick(SwitchStick.LEFT, 0, -30_000, config.SystemOvershoot, 0_100 + BaseDelay, token).ConfigureAwait(false);
else
await PressAndHold(DDOWN, config.SystemOvershoot, 0_100 + BaseDelay, token).ConfigureAwait(false);
UpdateProgressBar(action, steps);
await Click(DUP, 0_500 + BaseDelay, token).ConfigureAwait(false);
UpdateProgressBar(action, steps);
}
else
{
for (int i = 0; i < config.SystemDownPresses; i++)
{
await Click(DDOWN, 0_100 + BaseDelay, token).ConfigureAwait(false);
UpdateProgressBar(action, steps);
}
}
// Enter Date/Time
await Click(A, config.Submenu + BaseDelay, token).ConfigureAwait(false);
UpdateProgressBar(action, steps);
// Open Date/Time settings
if (config.UseTouch)
{
await Touch(0_950, 0_400, 0_050, 0, token).ConfigureAwait(false);
UpdateProgressBar(action, steps);
}
else
{
for (int i = 0; i < 2; i++)
{
await Click(DDOWN, 0_100 + BaseDelay, token).ConfigureAwait(false);
UpdateProgressBar(action, steps);
}
}
await Click(A, config.DateChange + BaseDelay, token).ConfigureAwait(false);
UpdateProgressBar(action, steps);
for (int i = 0; i < config.DaysToSkip; i++)
{
await Click(DUP, 0_100 + BaseDelay, token).ConfigureAwait(false);
UpdateProgressBar(action, steps);
}
for (int i = 0; i < 6; i++)
{
await Click(DRIGHT, (i < 5 ? 0_050 : 0_100) + BaseDelay, token)
.ConfigureAwait(false);
UpdateProgressBar(action, steps);
}
await Click(A, 0_150 + config.DateChange + BaseDelay, token).ConfigureAwait(false);
UpdateProgressBar(action, steps);
// Return to game
await Click(HOME, config.ReturnHomeDelay + BaseDelay, token).ConfigureAwait(false);
UpdateProgressBar(action, steps);
await Click(HOME, (config.DodgeSystemUpdate ? 0_500 : config.ReturnGameDelay) + BaseDelay, token).ConfigureAwait(false);
UpdateProgressBar(action, steps);
if (config.DodgeSystemUpdate)
{
// Attempt to dodge an update prompt.
await Click(DUP, 0_600 + BaseDelay, token).ConfigureAwait(false);
UpdateProgressBar(action, steps);
await Click(A, config.ReturnGameDelay + BaseDelay, token).ConfigureAwait(false);
UpdateProgressBar(action, steps);
}
StatusUpdate("Back in the game...");
}
}
public async Task CloseGame(CancellationToken token)
{
// Close out of the game
StatusUpdate("Closing the game!");
await Click(B, 0_500, token).ConfigureAwait(false);
await Click(HOME, 2_000, token).ConfigureAwait(false);
await Click(X, 1_000, token).ConfigureAwait(false);
await Click(A, 5_500, token).ConfigureAwait(false);
StatusUpdate("Closed out of the game!");
}
public async Task StartGame(IDateAdvanceConfig config, CancellationToken token)
{
// Open game.
StatusUpdate("Starting the game!");
await Click(A, 1_000, token).ConfigureAwait(false);
// Attempt to dodge an update prompt;
await Click(DUP, 0_600, token).ConfigureAwait(false);
await Click(A, 1_000, token).ConfigureAwait(false);
// Allow time for profile check if required
await Task.Delay(config.RelaunchDelay, token).ConfigureAwait(false);
// If they have DLC on the system and can't use it, requires an UP + A to start the game.
// Should be harmless otherwise since they'll be in loading screen.
await Click(DUP, 0_600, token).ConfigureAwait(false);
await Click(A, 0_600, token).ConfigureAwait(false);
// Switch Logo and game load screen
await Task.Delay(17_000, token).ConfigureAwait(false);
for (int i = 0; i < 20; i++)
await Click(A, 1_000, token).ConfigureAwait(false);
// Particularly slow switches need more time to load the overworld
await Task.Delay(config.ExtraOverworldWait, token).ConfigureAwait(false);
StatusUpdate("Back in the overworld! Refreshing the base block key pointer...");
BaseBlockKeyPointer = await Connection
.PointerAll(BlockKeyPointer.ToArray(), token)
.ConfigureAwait(false);
}
public async Task SaveGame(IDateAdvanceConfig config, CancellationToken token)
{
StatusUpdate("Saving the game...");
// B out in case we're in some menu.
for (int i = 0; i < 4; i++)
await Click(B, 0_500, token).ConfigureAwait(false);
// Open the menu and save.
await Click(X, 1_000, token).ConfigureAwait(false);
await Click(R, 1_000, token).ConfigureAwait(false);
await Click(A, 1_000, token).ConfigureAwait(false);
await Click(A, 1_000, token).ConfigureAwait(false);
await Click(A, 3_000 + config.SaveGameDelay, token).ConfigureAwait(false);
// Return to overworld.
for (int i = 0; i < 4; i++)
await Click(B, 0_500, token).ConfigureAwait(false);
StatusUpdate("Game saved!");
}
private static void UpdateProgressBar(Action? action, int steps) => action?.Invoke(steps);
}
================================================
FILE: RaidCrawler.Core/Discord/NotificationHandler.cs
================================================
using PKHeX.Core;
using RaidCrawler.Core.Interfaces;
using RaidCrawler.Core.Structures;
using SysBot.Base;
using System.Globalization;
using System.Text;
using System.Text.Json;
namespace RaidCrawler.Core.Discord;
public class NotificationHandler(IWebhookConfig config)
{
private readonly HttpClient _client = new();
private readonly string[]? DiscordWebhooks = config.EnableNotification ? config.DiscordWebhook.Split(',') : null;
public async Task SendNotification(ITeraRaid encounter, Raid raid, RaidFilter filter, string time, IReadOnlyList<(int, int, int)> RewardsList,
string hexColor, string spriteName, CancellationToken token
)
{
if (DiscordWebhooks is null || !config.EnableNotification)
return;
var webhook = GenerateWebhook(encounter, raid, filter, time, RewardsList, hexColor, spriteName);
var content = new StringContent(JsonSerializer.Serialize(webhook), Encoding.UTF8, "application/json");
foreach (var url in DiscordWebhooks)
await _client.PostAsync(url.Trim(), content, token).ConfigureAwait(false);
}
public async Task SendErrorNotification(string error, string caption, CancellationToken token)
{
if (DiscordWebhooks is null || !config.EnableNotification)
return;
var instance = config.InstanceName != "" ? $"RaidCrawler {config.InstanceName}" : "RaidCrawler";
var webhook = new
{
username = instance,
avatar_url = "https://www.serebii.net/scarletviolet/ribbons/mightiestmark.png",
content = config.DiscordMessageContent,
embeds = new List
{
new
{
title = caption != "" ? caption : "RaidCrawler Error",
description = error,
color = 0xf7262a,
},
},
};
var content = new StringContent(JsonSerializer.Serialize(webhook), Encoding.UTF8, "application/json");
foreach (var url in DiscordWebhooks)
await _client.PostAsync(url.Trim(), content, token).ConfigureAwait(false);
}
public async Task SendScreenshot(ISwitchConnectionAsync nx, CancellationToken token)
{
if (DiscordWebhooks is null || !config.EnableNotification)
return;
var data = await nx.PixelPeek(token).ConfigureAwait(false);
var content = new MultipartFormDataContent();
var info = new
{
username = "RaidCrawler",
avatar_url = "https://www.serebii.net/scarletviolet/ribbons/mightiestmark.png",
content = "Switch Screenshot",
};
var basic_info = new StringContent(JsonSerializer.Serialize(info), Encoding.UTF8, "application/json");
content.Add(basic_info, "payload_json");
content.Add(new ByteArrayContent(data), "screenshot.jpg", "screenshot.jpg");
foreach (var url in DiscordWebhooks)
await _client.PostAsync(url.Trim(), content, token).ConfigureAwait(false);
}
private object GenerateWebhook(ITeraRaid encounter, Raid raid, RaidFilter filter, string time, IReadOnlyList<(int, int, int)> rewardsList, string hexColor, string spriteName)
{
var strings = GameInfo.GetStrings("en");
var param = encounter.GetParam();
var blank = new PK9 { Species = encounter.Species, Form = encounter.Form };
raid.GenerateDataPK9(blank, param, encounter.Shiny, raid.Seed);
var form = Utils.GetFormString(blank.Species, blank.Form, strings);
var species = $"{strings.Species[encounter.Species]}{form}";
var difficulty = Difficulty(encounter.Stars, raid.IsEvent);
var nature = $"{strings.Natures[(int)blank.Nature]}";
var ability = $"{strings.Ability[blank.Ability]}";
var shiny = Shiny(raid.CheckIsShiny(encounter), ShinyExtensions.IsSquareShinyExist(blank));
var gender = GenderEmoji(blank.Gender);
var teratype = raid.GetTeraType(encounter);
var tera = $"{strings.types[teratype]}";
var teraemoji = TeraEmoji(strings.types[teratype]);
Span _ivs = stackalloc int[6];
blank.GetIVs(_ivs);
var ivs = IVsStringEmoji(ToSpeedLast(_ivs));
ushort[] moves =
[
encounter.Move1,
encounter.Move2,
encounter.Move3,
encounter.Move4,
];
var movestr = string.Concat(moves.Where(z => z != 0).Select(z => $"{strings.Move[z]}ㅤ\n")).Trim();
var extramoves = string.Concat(encounter.ExtraMoves.Where(z => z != 0).Select(z => $"{strings.Move[z]}ㅤ\n")).Trim();
var area = $"{Areas.GetArea((int)(raid.Area - 1), raid.MapParent)}" + (config.ToggleDen ? $" [Den {raid.Den}]ㅤ" : "ㅤ");
var rewards = GetRewards(rewardsList);
var SuccessWebHook = new
{
username = "RaidCrawler " + config.InstanceName,
avatar_url = "https://www.serebii.net/scarletviolet/ribbons/mightiestmark.png",
content = config.DiscordMessageContent,
embeds = new List
{
new
{
title = $"{shiny} {species} {gender} {teraemoji}",
description = "",
color = int.Parse(hexColor, NumberStyles.HexNumber),
thumbnail = new
{
url = $"https://github.com/kwsch/PKHeX/blob/master/PKHeX.Drawing.PokeSprite/Resources/img/Artwork%20Pokemon%20Sprites/a{spriteName}.png?raw=true",
},
fields = new List
{
new
{
name = "Difficultyㅤㅤㅤㅤㅤㅤ",
value = difficulty,
inline = true,
},
new
{
name = "Natureㅤㅤㅤ",
value = nature,
inline = true,
},
new
{
name = "Ability",
value = ability,
inline = true,
},
new
{
name = "IVs",
value = ivs,
inline = true,
},
new
{
name = "Moves",
value = movestr,
inline = true,
},
new
{
name = "Extra Moves",
value = extramoves.Length == 0 ? "None" : extramoves,
inline = true,
},
new
{
name = "Location",
value = area,
inline = true,
},
new
{
name = "Search Time",
value = time,
inline = true,
},
new
{
name = "Filter Name",
value = filter.Name,
inline = true,
},
new
{
name = rewards != "" ? "Rewards" : "",
value = rewards,
inline = false,
},
},
},
},
};
return SuccessWebHook;
}
private string Difficulty(byte stars, bool isEvent)
{
string emoji = GetGlyph(stars, isEvent);
return string.Concat(Enumerable.Repeat(emoji, stars));
}
private string GetGlyph(byte stars, bool isEvent)
{
if (!config.EnableEmoji)
return ":star:";
if (stars == 7)
return config.Emoji["7 Star"];
if (isEvent)
return config.Emoji["Event Star"];
return config.Emoji["Star"];
}
private string GenderEmoji(int genderInt) => genderInt switch
{
(int)Gender.Male => config.EnableEmoji ? config.Emoji["Male"] : ":male_sign:",
(int)Gender.Female => config.EnableEmoji ? config.Emoji["Female"] : ":female_sign:",
_ => "",
};
private string GetRewards(IReadOnlyList<(int, int, int)> rewards)
{
string s = string.Empty;
int abilitycapsule = 0;
int bottlecap = 0;
int abilitypatch = 0;
int sweetherba = 0;
int saltyherba = 0;
int sourherba = 0;
int bitterherba = 0;
int spicyherba = 0;
for (int i = 0; i < rewards.Count; i++)
{
switch (rewards[i].Item1)
{
case 0645: abilitycapsule++; break;
case 0795: bottlecap++; break;
case 1606: abilitypatch++; break;
case 1904: sweetherba++; break;
case 1905: saltyherba++; break;
case 1906: sourherba++; break;
case 1907: bitterherba++; break;
case 1908: spicyherba++; break;
}
}
bool emoji = config.EnableEmoji;
s += (abilitycapsule <= 0) ? "" : (emoji ? $"`{abilitycapsule}`{config.Emoji["Ability Capsule"]} " : $"`{abilitycapsule}` Ability Capsule ");
s += (bottlecap <= 0) ? "" : (emoji ? $"`{bottlecap}`{config.Emoji["Bottle Cap"]} " : $"`{bottlecap}` Bottle Cap ");
s += (abilitypatch <= 0) ? "" : (emoji ? $"`{abilitypatch}`{config.Emoji["Ability Patch"]} " : $"`{abilitypatch}` Ability Patch ");
s += (sweetherba <= 0) ? "" : (emoji ? $"`{sweetherba}`{config.Emoji["Sweet Herba"]} " : $"`{sweetherba}` Sweet Herba ");
s += (saltyherba <= 0) ? "" : (emoji ? $"`{saltyherba}`{config.Emoji["Salty Herba"]} " : $"`{saltyherba}` Salty Herba ");
s += (sourherba <= 0) ? "" : (emoji ? $"`{sourherba}`{config.Emoji["Sour Herba"]} " : $"`{sourherba}` Sour Herba ");
s += (bitterherba <= 0) ? "" : (emoji ? $"`{bitterherba}`{config.Emoji["Bitter Herba"]} " : $"`{bitterherba}` Bitter Herba ");
s += (spicyherba <= 0) ? "" : (emoji ? $"`{spicyherba}`{config.Emoji["Spicy Herba"]} " : $"`{spicyherba}` Spicy Herba ");
return s;
}
private string IVsStringEmoji(ReadOnlySpan ivs)
{
string s = string.Empty;
bool emoji = config.EnableEmoji;
bool verbose = config.VerboseIVs;
var stats = new[] { "HP", "Atk", "Def", "SpA", "SpD", "Spe" };
string[] iv0 =
[
config.Emoji["Health 0"],
config.Emoji["Attack 0"],
config.Emoji["Defense 0"],
config.Emoji["SpAttack 0"],
config.Emoji["SpDefense 0"],
config.Emoji["Speed 0"],
];
string[] iv31 =
[
config.Emoji["Health 31"],
config.Emoji["Attack 31"],
config.Emoji["Defense 31"],
config.Emoji["SpAttack 31"],
config.Emoji["SpDefense 31"],
config.Emoji["Speed 31"],
];
for (int i = 0; i < ivs.Length; i++)
{
switch (config.IVsStyle)
{
case 0:
{
s += ivs[i] switch
{
00 => emoji ? $"{iv0 [i]}{(verbose ? " " + stats[i] : string.Empty)}" : $"`✓`{(verbose ? " " + stats[i] : string.Empty)}",
31 => emoji ? $"{iv31[i]}{(verbose ? " " + stats[i] : string.Empty)}" : $"`✓`{(verbose ? " " + stats[i] : string.Empty)}",
_ => $"`{ivs[i]}`{(verbose ? " " + stats[i] : string.Empty)}",
};
if (i < 5)
s += " / ";
break;
}
case 1:
{
s += $"`{ivs[i]:D}`{(verbose ? " " + stats[i] : string.Empty)}";
if (i < 5)
s += " / ";
break;
}
case 2:
{
s += $"{ivs[i]:D}{(verbose ? " " + stats[i] : string.Empty)}";
if (i < 5)
s += " / ";
break;
}
}
}
return s;
}
private string Shiny(bool shiny, bool square)
{
if (!shiny)
return "";
bool emoji = config.EnableEmoji;
if (square)
return $"{(emoji ? config.Emoji["Square Shiny"] : "Square shiny")}";
return $"{(emoji ? config.Emoji["Shiny"] : "Shiny")}";
}
private static int[] ToSpeedLast(ReadOnlySpan ivs)
{
var res = new int[6];
res[0] = ivs[0];
res[1] = ivs[1];
res[2] = ivs[2];
res[3] = ivs[4];
res[4] = ivs[5];
res[5] = ivs[3];
return res;
}
private string TeraEmoji(string tera) => config.EnableEmoji ? config.Emoji[tera] : tera;
}
================================================
FILE: RaidCrawler.Core/Extensions/EncounterExtensions.cs
================================================
using PKHeX.Core;
namespace RaidCrawler.Core.Structures;
public static class EncounterExtensions
{
public static List<(int, int, int)> GetRewards(this ITeraRaid encounter, RaidContainer container, Raid raid, int sandwich_boost) => encounter switch
{
TeraDistribution d => TeraDistribution.GetRewards(d, raid.Seed, raid.GetTeraType(d), container.DeliveryRaidFixedRewards, container.DeliveryRaidLotteryRewards, sandwich_boost),
TeraMight m => TeraMight.GetRewards(m, raid.Seed, raid.GetTeraType(m), container.DeliveryRaidFixedRewards, container.DeliveryRaidLotteryRewards, sandwich_boost),
TeraEncounter e => TeraEncounter.GetRewards(e, raid.Seed, raid.GetTeraType(e), container.BaseFixedRewards, container.BaseLotteryRewards, sandwich_boost),
_ => throw new NotImplementedException($"Unknown encounter for rewards: {encounter.GetType()}"),
};
public static GenerateParam9 GetParam(this ITeraRaid encounter)
{
var gender = GetGender(encounter);
if (encounter is TeraMight { Entity: { } em })
{
return new GenerateParam9(em.Species, gender, em.FlawlessIVCount, 1, 0, 0,
em.ScaleType, em.Scale, em.Ability, em.Shiny, em.Nature, em.IVs);
}
if (encounter is TeraDistribution dist)
{
return new GenerateParam9(dist.Species, gender, dist.FlawlessIVCount, 1, 0, 0,
SizeType9.RANDOM, 0, dist.Ability, dist.Shiny, dist.Nature, dist.IVs);
}
return new GenerateParam9(encounter.Species, gender, encounter.FlawlessIVCount, 1, 0, 0,
SizeType9.RANDOM, 0, encounter.Ability, encounter.Shiny);
}
private static byte GetGender(ISpeciesForm enc) => enc switch
{
TeraMight { Entity.Gender: < 2 } tm => tm.Entity.Gender switch
{
0 => PersonalInfo.RatioMagicMale,
1 => PersonalInfo.RatioMagicFemale,
_ => PersonalInfo.RatioMagicGenderless,
},
_ => PersonalTable.SV.GetFormEntry(enc.Species, enc.Form).Gender,
};
}
================================================
FILE: RaidCrawler.Core/Extensions/RaidExtensions.cs
================================================
using PKHeX.Core;
using pkNX.Structures.FlatBuffers.Gen9;
namespace RaidCrawler.Core.Structures;
public static class RaidExtensions
{
public static ITeraRaid? GetTeraEncounter(this Raid raid, RaidContainer container, int progress, int id)
{
if (raid.IsEvent)
return raid.GetDistributionEncounter(container, progress, raid.Flags == 3, id);
return raid.MapParent switch
{
TeraRaidMapParent.Paldea => raid.GetEncounterBase(container, progress, raid.IsBlack),
TeraRaidMapParent.Kitakami => raid.GetEncounterKitakami(container, progress, raid.IsBlack),
_ => raid.GetEncounterBlueberry(container, progress, raid.IsBlack),
};
}
public static ITeraRaid? GetEncounterBase(this Raid raid, RaidContainer container, int progress, bool isBlack)
{
var clone = new Xoroshiro128Plus(raid.Seed);
var starCount = isBlack
? 6
: raid.GetStarCount((uint)clone.NextInt(100), progress, false);
var total =
container.Game == "Scarlet"
? GetRateTotalBaseSL(starCount)
: GetRateTotalBaseVL(starCount);
var speciesRoll = clone.NextInt((ulong)total);
if (container.GemTeraRaidsBase is not null)
{
foreach (TeraEncounter enc in container.GemTeraRaidsBase)
{
if (enc.Stars != starCount)
continue;
var minimum =
container.Game == "Scarlet"
? enc.Entity.RandRateMinScarlet
: enc.Entity.RandRateMinViolet;
if (minimum >= 0 && (uint)((int)speciesRoll - minimum) < enc.Entity.RandRate)
return enc;
}
}
return null;
}
public static ITeraRaid? GetEncounterKitakami(this Raid raid, RaidContainer container, int progress, bool isBlack)
{
var clone = new Xoroshiro128Plus(raid.Seed);
var starCount = isBlack
? 6
: raid.GetStarCount((uint)clone.NextInt(100), progress, false);
var total =
container.Game == "Scarlet"
? GetRateTotalKitakamiSL(starCount)
: GetRateTotalKitakamiVL(starCount);
var speciesRoll = clone.NextInt((ulong)total);
if (container.GemTeraRaidsKitakami is not null)
{
foreach (TeraEncounter enc in container.GemTeraRaidsKitakami)
{
if (enc.Stars != starCount)
continue;
var minimum =
container.Game == "Scarlet"
? enc.Entity.RandRateMinScarlet
: enc.Entity.RandRateMinViolet;
if (minimum >= 0 && (uint)((int)speciesRoll - minimum) < enc.Entity.RandRate)
return enc;
}
}
return null;
}
public static ITeraRaid? GetEncounterBlueberry(this Raid raid, RaidContainer container, int progress, bool isBlack)
{
var clone = new Xoroshiro128Plus(raid.Seed);
var starCount = isBlack
? 6
: raid.GetStarCount((uint)clone.NextInt(100), progress, false);
var total = GetRateTotalBlueberry(starCount);
var speciesRoll = clone.NextInt((ulong)total);
if (container.GemTeraRaidsBlueberry is not null)
{
foreach (TeraEncounter enc in container.GemTeraRaidsBlueberry)
{
if (enc.Stars != starCount)
continue;
var minimum =
container.Game == "Scarlet"
? enc.Entity.RandRateMinScarlet
: enc.Entity.RandRateMinViolet;
if (minimum >= 0 && (uint)((int)speciesRoll - minimum) < enc.Entity.RandRate)
return enc;
}
}
return null;
}
public static ITeraRaid? GetDistributionEncounter(this Raid raid, RaidContainer container, int progress, bool isFixed, int groupID)
{
if (progress < 0)
return null;
if (!isFixed)
{
if (container.DistTeraRaids == null)
return null;
foreach (TeraDistribution enc in container.DistTeraRaids)
{
if (enc.DeliveryGroupID != groupID)
continue;
var total =
container.Game == "Scarlet"
? enc.Entity.GetRandRateTotalScarlet(progress)
: enc.Entity.GetRandRateTotalViolet(progress);
if (total > 0)
{
var rand = new Xoroshiro128Plus(raid.Seed);
_ = rand.NextInt(100);
var val = rand.NextInt(total);
var min =
container.Game == "Scarlet"
? enc.Entity.GetRandRateMinScarlet(progress)
: enc.Entity.GetRandRateMinViolet(progress);
if ((uint)((int)val - min) < enc.RandRate)
return enc;
}
}
}
else
{
if (container.MightTeraRaids == null)
return null;
foreach (TeraMight enc in container.MightTeraRaids)
{
if (enc.DeliveryGroupID != groupID)
continue;
var total =
container.Game == "Scarlet"
? enc.Entity.GetRandRateTotalScarlet(progress)
: enc.Entity.GetRandRateTotalViolet(progress);
if (total > 0)
return enc;
}
}
return null;
}
public static (int delivery, int encounter) ReadAllRaids(this RaidContainer container, byte[] data, int storyPrg, int eventPrg, int boost, TeraRaidMapParent type)
{
var dbgFile = $"raid_dbg_{type}.txt";
if (File.Exists(dbgFile))
File.Delete(dbgFile);
var count = data.Length / Raid.SIZE;
List possibleGroups = [];
if (container.DistTeraRaids is not null)
{
foreach (TeraDistribution e in container.DistTeraRaids)
{
if (TeraDistribution.AvailableInGame(e.Entity, container.Game) && !possibleGroups.Contains(e.DeliveryGroupID))
possibleGroups.Add(e.DeliveryGroupID);
}
}
if (container.MightTeraRaids is not null)
{
foreach (TeraMight e in container.MightTeraRaids)
{
if (TeraMight.AvailableInGame(e.Entity, container.Game) && !possibleGroups.Contains(e.DeliveryGroupID))
possibleGroups.Add(e.DeliveryGroupID);
}
}
(int delivery, int encounter) failed = (0, 0);
List newRaids = [];
List newTera = [];
List> newRewards = [];
int eventCount = 0;
for (int i = 0; i < count; i++)
{
var slice = data.AsSpan(i * Raid.SIZE, Raid.SIZE);
var raid = new Raid(slice, type);
if (raid.Den == 0)
{
eventCount++;
continue;
}
if (!raid.IsValid)
continue;
var progress = raid.IsEvent ? eventPrg : storyPrg;
var raidDeliveryGroupID = -1;
try
{
raidDeliveryGroupID = raid.GetDeliveryGroupID(container.DeliveryRaidPriority, possibleGroups, eventCount);
}
catch (Exception ex)
{
var extra = $"Group ID: {raidDeliveryGroupID}\nisFixed: {raid.Flags == 3}\nisBlack: {raid.IsBlack}\nisEvent: {raid.IsEvent}\n\n";
var msg = $"{ex.Message}\nDen: {raid.Den}\nProgress: {progress}\nDifficulty: {raid.Difficulty}\n{extra}";
File.AppendAllText(dbgFile, msg);
failed.delivery++;
continue;
}
var encounter = raid.GetTeraEncounter(container, progress, raidDeliveryGroupID);
if (encounter is null)
{
var extra = $"Group ID: {raidDeliveryGroupID}\nisFixed: {raid.Flags == 3}\nisBlack: {raid.IsBlack}\nisEvent: {raid.IsEvent}\n\n";
var msg = $"No encounters found.\nDen: {raid.Den}\nProgress: {progress}\nDifficulty: {raid.Difficulty}\n{extra}";
File.AppendAllText(dbgFile, msg);
failed.encounter++;
continue;
}
if (raid.IsEvent)
eventCount++;
newRaids.Add(raid);
newTera.Add(encounter);
newRewards.Add(encounter.GetRewards(container, raid, boost));
}
container.SetRaids(newRaids);
container.SetEncounters(newTera);
container.SetRewards(newRewards);
return failed;
}
public static bool CheckIsShiny(this Raid raid, ITeraRaid? enc)
{
if (enc is null)
return raid.IsShiny;
if (enc.Shiny == Shiny.Never)
return false;
if (enc.Shiny.IsShiny())
return true;
return raid.IsShiny;
}
public static int GetTeraType(this Raid raid, ITeraRaid? encounter)
{
if (encounter is null)
return raid.TeraType;
if (encounter is TeraDistribution { Entity: ITeraRaid9 d })
return (int)d.TeraType > 1 ? (int)d.TeraType - 2 : raid.TeraType;
if (encounter is TeraMight { Entity: ITeraRaid9 m })
return (int)m.TeraType > 1 ? (int)m.TeraType - 2 : raid.TeraType;
return raid.TeraType;
}
public static int GetStarCount(this Raid _, uint difficulty, int progress, bool isBlack)
{
if (isBlack)
return 6;
return GetStarCount(difficulty, progress);
}
private static int GetStarCount(uint difficulty, int progress) => progress switch
{
0 => difficulty switch
{
> 80 => 2,
_ => 1,
},
1 => difficulty switch
{
> 70 => 3,
> 30 => 2,
_ => 1,
},
2 => difficulty switch
{
> 70 => 4,
> 40 => 3,
> 20 => 2,
_ => 1,
},
3 => difficulty switch
{
> 75 => 5,
> 40 => 4,
_ => 3,
},
4 => difficulty switch
{
> 70 => 5,
> 30 => 4,
_ => 3,
},
_ => 1,
};
public static int GetDeliveryGroupID(this Raid raid, DeliveryGroupID ids, List possibleGroups, int eventCount)
{
if (!raid.IsEvent)
return -1;
// WW/IL re-run has DeliveryGroupID = 3, having a Might7 alongside it conflicts.
var groups = ids.GroupID;
for (int i = 0; i < groups.Table_Length; i++)
{
var count = groups.Table(i);
if (!possibleGroups.Contains(i + 1))
continue;
if (eventCount < count)
return i + 1;
eventCount -= count;
}
throw new Exception("Found event out of priority range.");
}
private static short GetRateTotalBaseSL(int star) => star switch
{
1 => 5800,
2 => 5300,
3 => 7400,
4 => 8800, // Scarlet has one more encounter.
5 => 9100,
6 => 6500,
_ => 0,
};
private static short GetRateTotalBaseVL(int star) => star switch
{
1 => 5800,
2 => 5300,
3 => 7400,
4 => 8700, // Violet has one less encounter.
5 => 9100,
6 => 6500,
_ => 0,
};
private static short GetRateTotalKitakamiSL(int star) => star switch
{
1 => 1500,
2 => 1500,
3 => 2500,
4 => 2100,
5 => 2250,
6 => 2475, // Scarlet has one less encounter
_ => 0,
};
private static short GetRateTotalKitakamiVL(int star) => star switch
{
1 => 1500,
2 => 1500,
3 => 2500,
4 => 2100,
5 => 2250,
6 => 2574, // Violet has one more encounter
_ => 0,
};
private static short GetRateTotalBlueberry(int star) => star switch
{
// Both games have the same number of encounters
1 => 1100,
2 => 1100,
3 => 2000,
4 => 1900,
5 => 2100,
6 => 2600,
_ => 0,
};
}
================================================
FILE: RaidCrawler.Core/Interfaces/IDateAdvanceConfig.cs
================================================
namespace RaidCrawler.Core.Interfaces;
public interface IDateAdvanceConfig
{
bool UseTouch { get; set; }
bool UseOvershoot { get; set; }
bool DodgeSystemUpdate { get; set; }
bool UseSetStick { get; set; }
bool UseMapTrick { get; set; }
bool ZyroMethod { get; set; }
int OpenHomeDelay { get; set; }
int NavigateToSettingsDelay { get; set; }
int OpenSettingsDelay { get; set; }
int HoldDuration { get; set; }
int SystemDownPresses { get; set; }
int SystemOvershoot { get; set; }
int Submenu { get; set; }
int DateChange { get; set; }
int DaysToSkip { get; set; }
int ReturnHomeDelay { get; set; }
int ReturnGameDelay { get; set; }
int BaseDelay { get; set; }
int SaveGameDelay { get; set; }
int RelaunchDelay { get; set; }
int ExtraOverworldWait { get; set; }
}
================================================
FILE: RaidCrawler.Core/Interfaces/IWebhookConfig.cs
================================================
using SysBot.Base;
namespace RaidCrawler.Core.Interfaces;
public interface IWebhookConfig
{
SwitchProtocol Protocol { get; set; }
bool EnableNotification { get; set; }
bool ToggleDen { get; set; }
string InstanceName { get; set; }
string DiscordWebhook { get; set; }
string DiscordMessageContent { get; set; }
bool EnableEmoji { get; set; }
Dictionary Emoji { get; set; }
bool VerboseIVs { get; set; }
int IVsStyle { get; set; }
}
================================================
FILE: RaidCrawler.Core/RaidCrawler.Core.csproj
================================================
enable
x64
all
runtime; build; native; contentfiles; analyzers; buildtransitive
deps\SysBot.Base.dll
================================================
FILE: RaidCrawler.Core/Resources/Base/den_locations_base.json
================================================
{
"1-1-1": [ 2845.467, 36.614, -1038.485 ],
"1-1-2": [ 2843.5623, 50.538624, -1155.899 ],
"1-1-3": [ 2995.64, 50.029, -1044.8 ],
"1-1-4": [ 3026.123, 59.19, -863.263 ],
"1-1-5": [ 3027.5466, 47.98538, -828.203 ],
"1-1-6": [ 2706.321, 38.522, -897.694 ],
"1-1-7": [ 2756.0642, 53.07718, -947.225 ],
"1-1-8": [ 2939.2195, 51.645695, -890.802 ],
"1-1-9": [ 2901.67, 43.51155, -956.14 ],
"1-1-10": [ 2758.1775, 28.147131, -885.512 ],
"1-1-11": [ 2695.9585, 74.89077, -1059.758 ],
"4-1-1": [ 1899.0006, 131.19034, -1733.894 ],
"4-1-2": [ 1769.4475, 170.525, -1850.895 ],
"4-1-3": [ 1790.6346, 170.37459, -1970.455 ],
"4-1-4": [ 1637.4147, 150.9245, -1935.294 ],
"4-1-5": [ 1553.4471, 102.529, -1471.282 ],
"4-1-6": [ 1835.2953, 119.064, -1423.519 ],
"4-1-7": [ 1629.2001, 123.859, -1500.295 ],
"4-1-8": [ 1640.544, 122.431, -1662.441 ],
"4-1-9": [ 1475.2063, 124.439, -1912.936 ],
"4-1-10": [ 1812.5724, 137, -1500.554 ],
"4-1-11": [ 1771.2521, 100.215, -1351.323 ],
"4-1-12": [ 1982.5543, 125.65, -1594.889 ],
"5-1-1": [ 1866.6323, 123.882, -1160.349 ],
"5-1-2": [ 2002.1222, 122.804, -1165.878 ],
"5-1-3": [ 2141.4495, 154.78429, -1306.902 ],
"5-1-4": [ 1913.426, 102.891, -1263.081 ],
"5-1-5": [ 1703.3937, 100.295, -1271.364 ],
"5-1-6": [ 1513.5747, 102.454, -1339.542 ],
"5-1-7": [ 1379.3215, 99.85946, -1414.994 ],
"5-1-8": [ 1158.9136, 104.006, -1401.035 ],
"5-1-9": [ 1356.9264, 125.62, -1445.842 ],
"5-1-10": [ 1118.2214, 124.987, -1513.141 ],
"5-1-11": [ 1385.0574, 182.036, -1206.406 ],
"5-1-12": [ 1493.3928, 137.195, -1212.87 ],
"5-1-13": [ 1571.0824, 119.819, -1123.577 ],
"5-1-14": [ 1657.7124, 123.919716, -1120.022 ],
"5-1-15": [ 1757.7255, 119.836, -1176.093 ],
"5-1-16": [ 1897.7378, 77.31867, -1010.904 ],
"5-1-17": [ 1933.3049, 62.684, -864.692 ],
"5-1-18": [ 1817.5621, 50.726524, -1021.676 ],
"5-1-19": [ 1712.4163, 51.856, -984.328 ],
"5-1-20": [ 1741.8289, 27.366, -908.355 ],
"5-1-21": [ 2310.3599, 102.35688, -867.754 ],
"6-1-1": [ 1216.1168, 439.182, -1256.351 ],
"6-1-2": [ 1135.6335, 408.106, -1138.885 ],
"6-1-3": [ 1011.4375, 324.1062, -1120.552 ],
"6-1-4": [ 793.2703, 304.927, -958.951 ],
"6-1-5": [ 678.807, 303.461, -1164.414 ],
"6-1-6": [ 851.7057, 300.354, -1259.222 ],
"6-1-7": [ 697.38544, 289.631, -1281.583 ],
"6-1-8": [ 1251.8801, 376.138, -1133.998 ],
"6-1-9": [ 757.57587, 277.555, -1449.904 ],
"6-1-10": [ 704.53284, 49.696716, -1508.669 ],
"6-1-11": [ 618.2202, 30.289415, -1322.722 ],
"7-1-1": [ 3260.4072, 139.058, -1666.307 ],
"7-1-2": [ 3164.0479, 117.136, -1504.806 ],
"7-1-3": [ 2902.9255, 126.495, -1408.005 ],
"7-1-4": [ 3300.0713, 100.29469, -1387.432 ],
"7-1-5": [ 3395.081, 301.49, -1423.474 ],
"7-1-6": [ 3611.139, 313.481, -1467.221 ],
"7-1-7": [ 3639.874, 295.442, -1282.592 ],
"7-1-8": [ 2745.1975, 89.859, -1134.795 ],
"7-1-9": [ 2726.992, 126.88671, -1355.929 ],
"7-1-10": [ 3134.3804, 84.294914, -1131.999 ],
"7-1-11": [ 3096.0142, 97.01546, -960.987 ],
"7-1-12": [ 3232.408, 60.313, -958.541 ],
"7-1-13": [ 3220.125, 50.347, -1204.109 ],
"8-1-1": [ 2789.0913, 118.99999, -1643.126 ],
"8-1-2": [ 2705.5635, 100.009, -1768.12 ],
"8-1-3": [ 2827.2507, 110.617, -1629.134 ],
"8-1-4": [ 2844.7065, 116.506, -1647.88 ],
"8-1-5": [ 2897.6675, 135.298, -1628.299 ],
"8-1-6": [ 2938.5251, 119.78288, -1624.612 ],
"8-1-7": [ 2870.8196, 149.477, -1748.421 ],
"8-1-8": [ 2857.5256, 153.582, -1713.734 ],
"8-1-9": [ 2945.535, 144.44276, -1706.932 ],
"8-1-10": [ 2778.236, 108.903, -1815.592 ],
"8-1-11": [ 3044.518, 153.905, -1805.803 ],
"8-1-12": [ 3112.402, 132.59032, -1872.252 ],
"8-1-13": [ 3156.5232, 100.069, -1759.778 ],
"8-1-14": [ 3329.499, 159.417, -1927.745 ],
"8-1-15": [ 3119.92, 110.42, -1934.241 ],
"8-1-16": [ 3227.864, 160.062, -1981.746 ],
"8-1-17": [ 3450.6865, 156.95605, -1868.286 ],
"8-1-18": [ 3603.3108, 159.98636, -1845 ],
"8-1-19": [ 3543.5562, 125.17, -1749.021 ],
"8-1-20": [ 3440.8494, 114.854, -1718.778 ],
"9-1-1": [ 1136.7812, 150.49757, -2016.167 ],
"9-1-2": [ 1198.0536, 160.16187, -1937.424 ],
"9-1-3": [ 1160.7703, 156.032, -1682.58 ],
"9-1-4": [ 1081.689, 191.825, -2092.869 ],
"9-1-5": [ 947.6973, 205.406, -2092.656 ],
"9-1-6": [ 1270.208, 274.854, -2192.344 ],
"9-1-7": [ 1037.17, 158.25974, -1761.818 ],
"9-1-8": [ 1698.0283, 299.58, -2470.444 ],
"9-1-9": [ 1401.9097, 155.203, -1984.84 ],
"9-1-10": [ 1854.1393, 153.98119, -2018.318 ],
"9-1-11": [ 1518.1447, 202.65892, -2222.884 ],
"9-1-12": [ 1049.826, 219.624, -1841.302 ],
"9-1-13": [ 740.9347, 276.129, -1975.816 ],
"9-1-14": [ 977.81, 231.772, -1448.517 ],
"9-1-15": [ 902.24927, 202.204, -1486.805 ],
"9-1-16": [ 552.87463, 310.0584, -2123.151 ],
"9-1-17": [ 526.2075, 257.5541, -1978.386 ],
"9-1-18": [ 516.06586, 258.93277, -1988.088 ],
"9-1-19": [ 406.85233, 345.942, -2296.848 ],
"9-1-20": [ 461.65933, 261.267, -2430.324 ],
"9-1-21": [ 615.57446, 204.40112, -2567.678 ],
"9-2-1": [ 703.6389, 317.623, -2203.918 ],
"9-2-2": [ 904.748, 280.404, -2198.13 ],
"9-2-3": [ 807.161, 261.463, -2294.684 ],
"9-2-4": [ 726.8064, 250.554, -2313.824 ],
"9-2-5": [ 1541.4001, 254.81822, -2677.292 ],
"9-2-6": [ 1289.9803, 236.96513, -2473.336 ],
"9-2-7": [ 1613.5505, 194.594, -3008.886 ],
"9-2-8": [ 1091.2606, 283.35077, -2288.283 ],
"9-2-9": [ 1121.5624, 247.51, -2441.588 ],
"9-2-10": [ 1135.403, 200.28, -2657.236 ],
"9-2-11": [ 1393.0848, 241.63, -2588.953 ],
"10-1-1": [ 1355.4225, 154.228, -3070.513 ],
"10-1-2": [ 932.8021, 154.328, -3069.857 ],
"10-1-3": [ 1088.3599, 150.072, -3039.058 ],
"10-1-4": [ 1168.1425, 165.906, -2810.181 ],
"10-1-5": [ 967.2324, 154.021, -2574.592 ],
"10-1-6": [ 969.512, 205.849, -2746.752 ],
"10-1-7": [ 752.812, 149.851, -2982.663 ],
"10-1-8": [ 708.866, 151.058, -2632.248 ],
"10-1-9": [ 407.1229, 153.71, -2811.957 ],
"10-1-10": [ 796.517, 206.454, -2833.264 ],
"11-1-1": [ 680.07526, 72.338, -3022.125 ],
"11-1-2": [ 758.8083, 97.049, -3209.514 ],
"11-1-3": [ 457.581, 28.332, -3201.192 ],
"11-1-4": [ 577.3071, 27.293, -3590.295 ],
"11-1-5": [ 641.5924, 52.289223, -3604.116 ],
"11-1-6": [ 914.7816, 69.557, -3469.828 ],
"11-1-7": [ 1080.179, 68.4, -3506.444 ],
"11-1-8": [ 980.33856, 100.343, -3298.26 ],
"11-1-9": [ 1281.2114, 72.793, -3441.391 ],
"11-1-10": [ 1404.0607, 106.93168, -3595.316 ],
"11-1-11": [ 1420.5525, 108.026, -3379.739 ],
"12-1-1": [ 1619.1842, 151.259, -3349.24 ],
"12-1-2": [ 1491.2551, 126.809, -3376.43 ],
"12-1-3": [ 1730.0283, 102.642, -3721.919 ],
"12-1-4": [ 1842.9199, 100.34152, -3608.054 ],
"12-1-5": [ 2055.4146, 150.636, -3465.063 ],
"12-1-6": [ 1876.1418, 150.488, -3344.767 ],
"12-1-7": [ 2240.985, 163.175, -3496.316 ],
"12-1-8": [ 2155.9333, 153.8733, -3913.194 ],
"12-1-9": [ 2256.0447, 181.19315, -3807.589 ],
"12-1-10": [ 2204.459, 200.011, -3210.86 ],
"12-1-11": [ 2104.338, 200.007, -3112.235 ],
"12-1-12": [ 2155.035, 184.779, -3240.255 ],
"12-1-13": [ 1967.685, 228.104, -2885.821 ],
"12-1-14": [ 1788.2504, 198.625, -2889.617 ],
"12-1-15": [ 1826.5359, 160.854, -3002.231 ],
"12-1-16": [ 1691.5563, 155.739, -3033.022 ],
"12-1-17": [ 1518.1082, 162.791, -3265.582 ],
"13-1-1": [ 3528.1975, 165.69916, -3543.603 ],
"13-1-2": [ 3416.95, 165.057, -3545.65 ],
"13-1-3": [ 3213.6755, 164.828, -3475.689 ],
"13-1-4": [ 3339.4155, 149.762, -3180.274 ],
"13-1-5": [ 3116.5674, 139, -3315.564 ],
"14-1-1": [ 4159.2573, 75.513, -2840.708 ],
"14-1-2": [ 4236.472, 113.233, -2890.783 ],
"14-1-3": [ 4254.321, 98.49, -3073.784 ],
"14-1-4": [ 4556.84, 131.992, -3100.284 ],
"14-1-5": [ 4473.559, 97.826, -3155.787 ],
"14-1-6": [ 4079.3474, 151.717, -3083.227 ],
"14-1-7": [ 4064.9348, 175.008, -3205.413 ],
"14-1-8": [ 3910.8123, 110.285385, -2703.162 ],
"14-1-9": [ 3733.5237, 152.13, -2828.176 ],
"14-1-10": [ 3670.5334, 150.04924, -3302.292 ],
"14-1-11": [ 3501.2812, 139.998, -3187.655 ],
"14-1-12": [ 3494.993, 171.523, -2944.775 ],
"14-1-13": [ 3425.9077, 154.61, -2858.815 ],
"14-1-14": [ 3197.446, 139.996, -2965.349 ],
"14-1-15": [ 3221.556, 137.094, -2717.948 ],
"15-1-1": [ 3949.057, 128.4627, -1753.7886 ],
"15-1-2": [ 3939.1145, 118.467, -1903.497 ],
"15-1-3": [ 4222.742, 100.08929, -1788.447 ],
"15-1-4": [ 3994.504, 106.69571, -2075.471 ],
"15-1-5": [ 4091.4172, 78.9, -2141.472 ],
"15-1-6": [ 4182.6772, 100.57541, -1999.694 ],
"15-1-7": [ 4199.1963, 101.61066, -2063.68 ],
"15-1-8": [ 4347.587, 101.947, -2055.755 ],
"15-1-9": [ 4450.8774, 39.89622, -1995.672 ],
"15-1-10": [ 4308.0854, 82.694, -2248.658 ],
"15-2-1": [ 3507.103, 114.158, -2304.367 ],
"15-2-2": [ 3371.768, 131.414, -2431.5 ],
"15-2-3": [ 3315.8464, 136.56921, -2553.919 ],
"15-2-4": [ 3286.927, 136.706, -2209.562 ],
"15-2-5": [ 3210.6985, 200.413, -2638.92 ],
"15-2-6": [ 3257.0085, 199.8879, -2352.739 ],
"15-2-7": [ 3042.08, 200.078, -2326.545 ],
"15-2-8": [ 3141.9746, 200.00513, -2207.734 ],
"15-2-9": [ 3482.535, 150.15349, -2140.363 ],
"15-2-10": [ 3382.6587, 175.42473, -2025.202 ],
"15-2-11": [ 3075.128, 171.15794, -2083.704 ],
"16-1-1": [ 3634.7349, 103.697, -2249.59 ],
"16-1-2": [ 3913.9048, 87.313, -2159.184 ],
"16-1-3": [ 3990.8743, 68.22058, -2368.99 ],
"16-1-4": [ 4097.5396, 40.483, -2342.001 ],
"16-1-5": [ 4283.13, 27.846, -2320.806 ],
"16-1-6": [ 4022.277, 28.308, -2546.425 ],
"16-1-7": [ 3662.312, 101.794, -2399.427 ],
"16-1-8": [ 3548.7634, 116.26001, -2507.5374 ],
"16-1-9": [ 3579.2812, 133.791, -2361.305 ],
"16-1-10": [ 3465.717, 122.248, -2659.646 ],
"17-1-1": [ 2902.689, 200.399, -3093.951 ],
"17-1-2": [ 2720.5022, 280.556, -3201.56 ],
"17-1-3": [ 2593.317, 350.688, -3282.014 ],
"17-1-4": [ 2598.9983, 350.08722, -3411.557 ],
"17-1-5": [ 2427.9685, 252.528, -3461.893 ],
"17-1-6": [ 2286.5273, 273.911, -3154.17 ],
"17-1-7": [ 2467.979, 307.236, -3187.504 ],
"17-1-8": [ 3303.539, 457.404, -3817.721 ],
"17-1-9": [ 3153.672, 549.903, -3887.176 ],
"17-1-10": [ 3058.9521, 529.29065, -3661.263 ],
"17-1-11": [ 2941.3628, 199.929, -2807.215 ],
"17-1-12": [ 3018.6382, 200.228, -2661.028 ],
"18-1-1": [ 583.49615, 51.777, -3722.577 ],
"18-1-2": [ 762.9055, 83.263, -4136.542 ],
"18-1-3": [ 538.15045, 59.128, -4297.462 ],
"18-1-4": [ 841.52344, 72.244, -4295.059 ],
"18-1-5": [ 789.033, 30.452, -4485.728 ],
"18-1-6": [ 881.5492, 96.926, -4443.855 ],
"18-1-7": [ 1156.5724, 105.646, -4630.291 ],
"18-1-8": [ 1315.9452, 112.47854, -4411.718 ],
"18-1-9": [ 1507.038, 107.434, -4404.618 ],
"18-1-10": [ 1639.128, 134.847, -4364.72 ],
"18-1-11": [ 2002.7728, 143.998, -4004.138 ],
"18-1-12": [ 2070.937, 140.65634, -3938.287 ],
"18-1-13": [ 1629.3771, 52.345, -3997.327 ],
"18-1-14": [ 1061.734, 54.03, -4230.546 ],
"18-1-15": [ 853.741, 57.159, -3998.338 ],
"19-1-1": [ 1904.9739, 302.13, -4476.627 ],
"19-1-2": [ 2075.4602, 196.94385, -4453.186 ],
"19-1-3": [ 2175.288, 258.987, -3962.343 ],
"19-1-4": [ 2357.263, 292.974, -4154.987 ],
"19-1-5": [ 2517.7583, 312.382, -4327.555 ],
"19-1-6": [ 2388.8801, 193.7364, -4379.883 ],
"19-1-7": [ 2493.558, 380.4853, -4159.183 ],
"19-1-8": [ 2539.19, 314.32626, -3934.373 ],
"19-1-9": [ 2708.6387, 543.1926, -3815.269 ],
"19-1-10": [ 2551.8943, 459.3, -3786.567 ],
"19-1-11": [ 2636.6562, 474.08127, -4080.359 ],
"19-1-12": [ 2079.422, 250.6066, -4261.153 ],
"19-2-1": [ 2980.5945, 468.246, -4081.9 ],
"19-2-2": [ 3065.717, 335.63928, -4264.309 ],
"19-2-3": [ 3215.0225, 249.41417, -4426.817 ],
"19-2-4": [ 3334.752, 290.42, -4284.607 ],
"19-2-5": [ 3287.9968, 409.532, -4120.064 ],
"19-2-6": [ 3185.0469, 124.804085, -4674.016 ],
"19-2-7": [ 2925.784, 37.782, -4819.091 ],
"19-2-8": [ 2934.2034, 294.876, -4491.229 ],
"19-2-9": [ 2776.519, 166.26, -4744.95 ],
"19-2-10": [ 2566.431, 113.238, -4671.11 ],
"20-1-1": [ 2158.8896, 75.773, -4624.578 ],
"20-1-2": [ 2095.613, 30.714, -4826.774 ],
"20-1-3": [ 2266.1736, 27.36, -4888.04 ],
"20-1-4": [ 2404.1516, 38.995, -4739.097 ],
"20-1-5": [ 2636.8281, 31.877356, -4766.172 ],
"20-1-6": [ 1967.109, 107.087, -4706.695 ],
"20-1-7": [ 1888.2545, 27.66, -4804.205 ],
"21-1-1": [ 3547.085, 248.378, -4267.11 ],
"21-1-2": [ 3516.266, 27.53, -4551.839 ],
"21-1-3": [ 3715.373, 30.22447, -4396.859 ],
"21-1-4": [ 3664.97, 250.417, -3851.387 ],
"21-1-5": [ 3782.5044, 215.215, -3940.288 ],
"21-1-6": [ 4238.2163, 200.163, -4023.547 ],
"21-1-7": [ 4037.2893, 308.365, -3874.302 ],
"21-1-8": [ 3804.4255, 249.465, -3744.459 ],
"21-1-9": [ 3681.3413, 250.90479, -3523.232 ],
"21-1-10": [ 3438.491, 200.681, -3586.808 ],
"21-1-11": [ 3528.0413, 252.9267, -3701.859 ],
"21-1-12": [ 3611.6423, 302.471, -4050.048 ],
"21-1-13": [ 3970.3142, 206.68, -4036.144 ],
"22-1-1": [ 3862.4924, 220.02588, -3742.104 ],
"22-1-2": [ 3949.528, 220.012, -3740.621 ],
"22-1-3": [ 3997.943, 220.031, -3641.878 ],
"22-1-4": [ 4003.7307, 248.957, -3800.467 ],
"22-1-5": [ 4149.172, 249.902, -3794.919 ],
"22-1-6": [ 4211.662, 309.788, -3789.485 ],
"22-1-7": [ 4275.8936, 299.654, -3730.387 ],
"22-1-8": [ 4209.848, 230.012, -3633.816 ],
"22-1-9": [ 4233.2744, 230.314, -3483.836 ],
"22-1-10": [ 4041.568, 250.111, -3479.939 ],
"22-1-11": [ 3749.4216, 250.14, -3441.497 ],
"22-1-12": [ 3870.1, 250.021, -3419.277 ],
"22-1-13": [ 3945.9397, 250.30798, -3403.474 ],
"22-1-14": [ 4040.2236, 302.19217, -3358.449 ],
"22-1-15": [ 4109.605, 230.034, -3350.393 ],
"22-1-16": [ 4250.147, 333.989, -3342.715 ],
"22-1-17": [ 4200.3525, 250.453, -3387.742 ],
"22-1-18": [ 4399.146, 294.83286, -3413.392 ],
"22-1-19": [ 4382.4756, 318.88, -3327.004 ],
"22-1-20": [ 4421.354, 250.189, -3664.857 ],
"22-1-21": [ 4658.1436, 202.46548, -3247.712 ],
"22-1-22": [ 4379.2666, 250.25455, -3478.503 ]
}
================================================
FILE: RaidCrawler.Core/Resources/Base/raid_fixed_reward_item_array.json
================================================
[
{
"TableName": 12665484173717205406,
"RewardItem00": {
"Category": 0,
"SubjectType": 0,
"ItemID": 4,
"Num": 1
},
"RewardItem01": {
"Category": 1,
"SubjectType": 1,
"ItemID": 0,
"Num": 1
},
"RewardItem02": {
"Category": 2,
"SubjectType": 1,
"ItemID": 0,
"Num": 1
},
"RewardItem03": {
"Category": 2,
"SubjectType": 0,
"ItemID": 0,
"Num": 1
},
"RewardItem04": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem05": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem06": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem07": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem08": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem09": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem10": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem11": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem12": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem13": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem14": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
}
},
{
"TableName": 971768233462174768,
"RewardItem00": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1124,
"Num": 1
},
"RewardItem01": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1125,
"Num": 1
},
"RewardItem02": {
"Category": 1,
"SubjectType": 0,
"ItemID": 0,
"Num": 1
},
"RewardItem03": {
"Category": 0,
"SubjectType": 0,
"ItemID": 566,
"Num": 1
},
"RewardItem04": {
"Category": 1,
"SubjectType": 2,
"ItemID": 0,
"Num": 1
},
"RewardItem05": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem06": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem07": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem08": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem09": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem10": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem11": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem12": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem13": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem14": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
}
},
{
"TableName": 13967968057318937848,
"RewardItem00": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1124,
"Num": 1
},
"RewardItem01": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1125,
"Num": 1
},
"RewardItem02": {
"Category": 1,
"SubjectType": 0,
"ItemID": 0,
"Num": 1
},
"RewardItem03": {
"Category": 0,
"SubjectType": 0,
"ItemID": 567,
"Num": 1
},
"RewardItem04": {
"Category": 1,
"SubjectType": 2,
"ItemID": 0,
"Num": 1
},
"RewardItem05": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem06": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem07": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem08": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem09": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem10": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem11": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem12": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem13": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem14": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
}
},
{
"TableName": 13964306683597752118,
"RewardItem00": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1124,
"Num": 1
},
"RewardItem01": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1125,
"Num": 1
},
"RewardItem02": {
"Category": 1,
"SubjectType": 0,
"ItemID": 0,
"Num": 1
},
"RewardItem03": {
"Category": 0,
"SubjectType": 0,
"ItemID": 565,
"Num": 1
},
"RewardItem04": {
"Category": 1,
"SubjectType": 2,
"ItemID": 0,
"Num": 1
},
"RewardItem05": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem06": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem07": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem08": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem09": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem10": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem11": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem12": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem13": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem14": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
}
},
{
"TableName": 4079204644669103737,
"RewardItem00": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1124,
"Num": 1
},
"RewardItem01": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1125,
"Num": 1
},
"RewardItem02": {
"Category": 1,
"SubjectType": 0,
"ItemID": 0,
"Num": 1
},
"RewardItem03": {
"Category": 0,
"SubjectType": 0,
"ItemID": 568,
"Num": 1
},
"RewardItem04": {
"Category": 1,
"SubjectType": 2,
"ItemID": 0,
"Num": 1
},
"RewardItem05": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem06": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem07": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem08": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem09": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem10": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem11": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem12": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem13": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem14": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
}
},
{
"TableName": 4461632780080010991,
"RewardItem00": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1124,
"Num": 1
},
"RewardItem01": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1125,
"Num": 1
},
"RewardItem02": {
"Category": 1,
"SubjectType": 0,
"ItemID": 0,
"Num": 1
},
"RewardItem03": {
"Category": 0,
"SubjectType": 0,
"ItemID": 569,
"Num": 1
},
"RewardItem04": {
"Category": 1,
"SubjectType": 2,
"ItemID": 0,
"Num": 1
},
"RewardItem05": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem06": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem07": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem08": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem09": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem10": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem11": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem12": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem13": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem14": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
}
},
{
"TableName": 1453407049952680673,
"RewardItem00": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1124,
"Num": 1
},
"RewardItem01": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1125,
"Num": 1
},
"RewardItem02": {
"Category": 1,
"SubjectType": 0,
"ItemID": 0,
"Num": 1
},
"RewardItem03": {
"Category": 0,
"SubjectType": 0,
"ItemID": 570,
"Num": 1
},
"RewardItem04": {
"Category": 1,
"SubjectType": 2,
"ItemID": 0,
"Num": 1
},
"RewardItem05": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem06": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem07": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem08": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem09": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem10": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem11": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem12": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem13": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem14": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
}
},
{
"TableName": 13962751043364178541,
"RewardItem00": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1125,
"Num": 3
},
"RewardItem01": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem02": {
"Category": 1,
"SubjectType": 0,
"ItemID": 0,
"Num": 2
},
"RewardItem03": {
"Category": 0,
"SubjectType": 0,
"ItemID": 566,
"Num": 1
},
"RewardItem04": {
"Category": 1,
"SubjectType": 2,
"ItemID": 0,
"Num": 1
},
"RewardItem05": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem06": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem07": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem08": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem09": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem10": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem11": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem12": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem13": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem14": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
}
},
{
"TableName": 7425207459411916467,
"RewardItem00": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1125,
"Num": 3
},
"RewardItem01": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem02": {
"Category": 1,
"SubjectType": 0,
"ItemID": 0,
"Num": 2
},
"RewardItem03": {
"Category": 0,
"SubjectType": 0,
"ItemID": 567,
"Num": 1
},
"RewardItem04": {
"Category": 1,
"SubjectType": 2,
"ItemID": 0,
"Num": 1
},
"RewardItem05": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem06": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem07": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem08": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem09": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem10": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem11": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem12": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem13": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem14": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
}
},
{
"TableName": 7413752747271484969,
"RewardItem00": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1125,
"Num": 3
},
"RewardItem01": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem02": {
"Category": 1,
"SubjectType": 0,
"ItemID": 0,
"Num": 2
},
"RewardItem03": {
"Category": 0,
"SubjectType": 0,
"ItemID": 565,
"Num": 1
},
"RewardItem04": {
"Category": 1,
"SubjectType": 2,
"ItemID": 0,
"Num": 1
},
"RewardItem05": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem06": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem07": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem08": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem09": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem10": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem11": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem12": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem13": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem14": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
}
},
{
"TableName": 18330603432922962524,
"RewardItem00": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1125,
"Num": 3
},
"RewardItem01": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem02": {
"Category": 1,
"SubjectType": 0,
"ItemID": 0,
"Num": 2
},
"RewardItem03": {
"Category": 0,
"SubjectType": 0,
"ItemID": 568,
"Num": 1
},
"RewardItem04": {
"Category": 1,
"SubjectType": 2,
"ItemID": 0,
"Num": 1
},
"RewardItem05": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem06": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem07": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem08": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem09": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem10": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem11": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem12": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem13": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem14": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
}
},
{
"TableName": 4252614494071568324,
"RewardItem00": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1125,
"Num": 3
},
"RewardItem01": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem02": {
"Category": 1,
"SubjectType": 0,
"ItemID": 0,
"Num": 2
},
"RewardItem03": {
"Category": 0,
"SubjectType": 0,
"ItemID": 569,
"Num": 1
},
"RewardItem04": {
"Category": 1,
"SubjectType": 2,
"ItemID": 0,
"Num": 1
},
"RewardItem05": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem06": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem07": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem08": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem09": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem10": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem11": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem12": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem13": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem14": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
}
},
{
"TableName": 2509815283604296356,
"RewardItem00": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1125,
"Num": 3
},
"RewardItem01": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem02": {
"Category": 1,
"SubjectType": 0,
"ItemID": 0,
"Num": 2
},
"RewardItem03": {
"Category": 0,
"SubjectType": 0,
"ItemID": 570,
"Num": 1
},
"RewardItem04": {
"Category": 1,
"SubjectType": 2,
"ItemID": 0,
"Num": 1
},
"RewardItem05": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem06": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem07": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem08": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem09": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem10": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem11": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem12": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem13": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem14": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
}
},
{
"TableName": 8835428215795829081,
"RewardItem00": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1125,
"Num": 1
},
"RewardItem01": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1126,
"Num": 2
},
"RewardItem02": {
"Category": 1,
"SubjectType": 0,
"ItemID": 0,
"Num": 3
},
"RewardItem03": {
"Category": 0,
"SubjectType": 0,
"ItemID": 566,
"Num": 2
},
"RewardItem04": {
"Category": 1,
"SubjectType": 2,
"ItemID": 0,
"Num": 2
},
"RewardItem05": {
"Category": 2,
"SubjectType": 0,
"ItemID": 0,
"Num": 1
},
"RewardItem06": {
"Category": 2,
"SubjectType": 1,
"ItemID": 0,
"Num": 1
},
"RewardItem07": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem08": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem09": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem10": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem11": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem12": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem13": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem14": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
}
},
{
"TableName": 8835424917260944448,
"RewardItem00": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1125,
"Num": 1
},
"RewardItem01": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1126,
"Num": 2
},
"RewardItem02": {
"Category": 1,
"SubjectType": 0,
"ItemID": 0,
"Num": 3
},
"RewardItem03": {
"Category": 0,
"SubjectType": 0,
"ItemID": 567,
"Num": 2
},
"RewardItem04": {
"Category": 1,
"SubjectType": 2,
"ItemID": 0,
"Num": 2
},
"RewardItem05": {
"Category": 2,
"SubjectType": 0,
"ItemID": 0,
"Num": 1
},
"RewardItem06": {
"Category": 2,
"SubjectType": 1,
"ItemID": 0,
"Num": 1
},
"RewardItem07": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem08": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem09": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem10": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem11": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem12": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem13": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem14": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
}
},
{
"TableName": 8835426016772572659,
"RewardItem00": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1125,
"Num": 1
},
"RewardItem01": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1126,
"Num": 2
},
"RewardItem02": {
"Category": 1,
"SubjectType": 0,
"ItemID": 0,
"Num": 3
},
"RewardItem03": {
"Category": 0,
"SubjectType": 0,
"ItemID": 565,
"Num": 2
},
"RewardItem04": {
"Category": 1,
"SubjectType": 2,
"ItemID": 0,
"Num": 2
},
"RewardItem05": {
"Category": 2,
"SubjectType": 0,
"ItemID": 0,
"Num": 1
},
"RewardItem06": {
"Category": 2,
"SubjectType": 1,
"ItemID": 0,
"Num": 1
},
"RewardItem07": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem08": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem09": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem10": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem11": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem12": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem13": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem14": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
}
},
{
"TableName": 8835431514330713714,
"RewardItem00": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1125,
"Num": 1
},
"RewardItem01": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1126,
"Num": 2
},
"RewardItem02": {
"Category": 1,
"SubjectType": 0,
"ItemID": 0,
"Num": 3
},
"RewardItem03": {
"Category": 0,
"SubjectType": 0,
"ItemID": 568,
"Num": 2
},
"RewardItem04": {
"Category": 1,
"SubjectType": 2,
"ItemID": 0,
"Num": 2
},
"RewardItem05": {
"Category": 2,
"SubjectType": 0,
"ItemID": 0,
"Num": 1
},
"RewardItem06": {
"Category": 2,
"SubjectType": 1,
"ItemID": 0,
"Num": 1
},
"RewardItem07": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem08": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem09": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem10": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem11": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem12": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem13": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem14": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
}
},
{
"TableName": 8835432613842341925,
"RewardItem00": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1125,
"Num": 1
},
"RewardItem01": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1126,
"Num": 2
},
"RewardItem02": {
"Category": 1,
"SubjectType": 0,
"ItemID": 0,
"Num": 3
},
"RewardItem03": {
"Category": 0,
"SubjectType": 0,
"ItemID": 569,
"Num": 2
},
"RewardItem04": {
"Category": 1,
"SubjectType": 2,
"ItemID": 0,
"Num": 2
},
"RewardItem05": {
"Category": 2,
"SubjectType": 0,
"ItemID": 0,
"Num": 1
},
"RewardItem06": {
"Category": 2,
"SubjectType": 1,
"ItemID": 0,
"Num": 1
},
"RewardItem07": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem08": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem09": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem10": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem11": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem12": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem13": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem14": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
}
},
{
"TableName": 8835429315307457292,
"RewardItem00": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1125,
"Num": 1
},
"RewardItem01": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1126,
"Num": 2
},
"RewardItem02": {
"Category": 1,
"SubjectType": 0,
"ItemID": 0,
"Num": 3
},
"RewardItem03": {
"Category": 0,
"SubjectType": 0,
"ItemID": 570,
"Num": 2
},
"RewardItem04": {
"Category": 1,
"SubjectType": 2,
"ItemID": 0,
"Num": 2
},
"RewardItem05": {
"Category": 2,
"SubjectType": 0,
"ItemID": 0,
"Num": 1
},
"RewardItem06": {
"Category": 2,
"SubjectType": 1,
"ItemID": 0,
"Num": 1
},
"RewardItem07": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem08": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem09": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem10": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem11": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem12": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem13": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem14": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
}
},
{
"TableName": 6567691901553146942,
"RewardItem00": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1126,
"Num": 2
},
"RewardItem01": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1127,
"Num": 1
},
"RewardItem02": {
"Category": 1,
"SubjectType": 0,
"ItemID": 0,
"Num": 4
},
"RewardItem03": {
"Category": 0,
"SubjectType": 0,
"ItemID": 566,
"Num": 2
},
"RewardItem04": {
"Category": 1,
"SubjectType": 2,
"ItemID": 0,
"Num": 2
},
"RewardItem05": {
"Category": 2,
"SubjectType": 0,
"ItemID": 0,
"Num": 1
},
"RewardItem06": {
"Category": 2,
"SubjectType": 1,
"ItemID": 0,
"Num": 2
},
"RewardItem07": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem08": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem09": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem10": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem11": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem12": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem13": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem14": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
}
},
{
"TableName": 6567690802041518731,
"RewardItem00": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1126,
"Num": 2
},
"RewardItem01": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1127,
"Num": 1
},
"RewardItem02": {
"Category": 1,
"SubjectType": 0,
"ItemID": 0,
"Num": 4
},
"RewardItem03": {
"Category": 0,
"SubjectType": 0,
"ItemID": 567,
"Num": 2
},
"RewardItem04": {
"Category": 1,
"SubjectType": 2,
"ItemID": 0,
"Num": 2
},
"RewardItem05": {
"Category": 2,
"SubjectType": 0,
"ItemID": 0,
"Num": 1
},
"RewardItem06": {
"Category": 2,
"SubjectType": 1,
"ItemID": 0,
"Num": 2
},
"RewardItem07": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem08": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem09": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem10": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem11": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem12": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem13": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem14": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
}
},
{
"TableName": 6567689702529890520,
"RewardItem00": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1126,
"Num": 2
},
"RewardItem01": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1127,
"Num": 1
},
"RewardItem02": {
"Category": 1,
"SubjectType": 0,
"ItemID": 0,
"Num": 4
},
"RewardItem03": {
"Category": 0,
"SubjectType": 0,
"ItemID": 565,
"Num": 2
},
"RewardItem04": {
"Category": 1,
"SubjectType": 2,
"ItemID": 0,
"Num": 2
},
"RewardItem05": {
"Category": 2,
"SubjectType": 0,
"ItemID": 0,
"Num": 1
},
"RewardItem06": {
"Category": 2,
"SubjectType": 1,
"ItemID": 0,
"Num": 2
},
"RewardItem07": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem08": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem09": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem10": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem11": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem12": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem13": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem14": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
}
},
{
"TableName": 6567697399111287997,
"RewardItem00": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1126,
"Num": 2
},
"RewardItem01": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1127,
"Num": 1
},
"RewardItem02": {
"Category": 1,
"SubjectType": 0,
"ItemID": 0,
"Num": 4
},
"RewardItem03": {
"Category": 0,
"SubjectType": 0,
"ItemID": 568,
"Num": 2
},
"RewardItem04": {
"Category": 1,
"SubjectType": 2,
"ItemID": 0,
"Num": 2
},
"RewardItem05": {
"Category": 2,
"SubjectType": 0,
"ItemID": 0,
"Num": 1
},
"RewardItem06": {
"Category": 2,
"SubjectType": 1,
"ItemID": 0,
"Num": 2
},
"RewardItem07": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem08": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem09": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem10": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem11": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem12": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem13": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem14": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
}
},
{
"TableName": 6567696299599659786,
"RewardItem00": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1126,
"Num": 2
},
"RewardItem01": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1127,
"Num": 1
},
"RewardItem02": {
"Category": 1,
"SubjectType": 0,
"ItemID": 0,
"Num": 4
},
"RewardItem03": {
"Category": 0,
"SubjectType": 0,
"ItemID": 569,
"Num": 2
},
"RewardItem04": {
"Category": 1,
"SubjectType": 2,
"ItemID": 0,
"Num": 2
},
"RewardItem05": {
"Category": 2,
"SubjectType": 0,
"ItemID": 0,
"Num": 1
},
"RewardItem06": {
"Category": 2,
"SubjectType": 1,
"ItemID": 0,
"Num": 2
},
"RewardItem07": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem08": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem09": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem10": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem11": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem12": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem13": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem14": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
}
},
{
"TableName": 6567695200088031575,
"RewardItem00": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1126,
"Num": 2
},
"RewardItem01": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1127,
"Num": 1
},
"RewardItem02": {
"Category": 1,
"SubjectType": 0,
"ItemID": 0,
"Num": 4
},
"RewardItem03": {
"Category": 0,
"SubjectType": 0,
"ItemID": 570,
"Num": 2
},
"RewardItem04": {
"Category": 1,
"SubjectType": 2,
"ItemID": 0,
"Num": 2
},
"RewardItem05": {
"Category": 2,
"SubjectType": 0,
"ItemID": 0,
"Num": 1
},
"RewardItem06": {
"Category": 2,
"SubjectType": 1,
"ItemID": 0,
"Num": 2
},
"RewardItem07": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem08": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem09": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem10": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem11": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem12": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem13": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem14": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
}
},
{
"TableName": 11960178471819505075,
"RewardItem00": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1127,
"Num": 1
},
"RewardItem01": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1128,
"Num": 1
},
"RewardItem02": {
"Category": 1,
"SubjectType": 0,
"ItemID": 0,
"Num": 5
},
"RewardItem03": {
"Category": 0,
"SubjectType": 0,
"ItemID": 566,
"Num": 3
},
"RewardItem04": {
"Category": 1,
"SubjectType": 2,
"ItemID": 0,
"Num": 3
},
"RewardItem05": {
"Category": 2,
"SubjectType": 0,
"ItemID": 0,
"Num": 2
},
"RewardItem06": {
"Category": 2,
"SubjectType": 1,
"ItemID": 0,
"Num": 2
},
"RewardItem07": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem08": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem09": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem10": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem11": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem12": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem13": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem14": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
}
},
{
"TableName": 11960179571331133286,
"RewardItem00": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1127,
"Num": 1
},
"RewardItem01": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1128,
"Num": 1
},
"RewardItem02": {
"Category": 1,
"SubjectType": 0,
"ItemID": 0,
"Num": 5
},
"RewardItem03": {
"Category": 0,
"SubjectType": 0,
"ItemID": 567,
"Num": 3
},
"RewardItem04": {
"Category": 1,
"SubjectType": 2,
"ItemID": 0,
"Num": 3
},
"RewardItem05": {
"Category": 2,
"SubjectType": 0,
"ItemID": 0,
"Num": 2
},
"RewardItem06": {
"Category": 2,
"SubjectType": 1,
"ItemID": 0,
"Num": 2
},
"RewardItem07": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem08": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem09": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem10": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem11": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem12": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem13": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem14": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
}
},
{
"TableName": 11960180670842761497,
"RewardItem00": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1127,
"Num": 1
},
"RewardItem01": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1128,
"Num": 1
},
"RewardItem02": {
"Category": 1,
"SubjectType": 0,
"ItemID": 0,
"Num": 5
},
"RewardItem03": {
"Category": 0,
"SubjectType": 0,
"ItemID": 565,
"Num": 3
},
"RewardItem04": {
"Category": 1,
"SubjectType": 2,
"ItemID": 0,
"Num": 3
},
"RewardItem05": {
"Category": 2,
"SubjectType": 0,
"ItemID": 0,
"Num": 2
},
"RewardItem06": {
"Category": 2,
"SubjectType": 1,
"ItemID": 0,
"Num": 2
},
"RewardItem07": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem08": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem09": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem10": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem11": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem12": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem13": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem14": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
}
},
{
"TableName": 11960181770354389708,
"RewardItem00": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1127,
"Num": 1
},
"RewardItem01": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1128,
"Num": 1
},
"RewardItem02": {
"Category": 1,
"SubjectType": 0,
"ItemID": 0,
"Num": 5
},
"RewardItem03": {
"Category": 0,
"SubjectType": 0,
"ItemID": 568,
"Num": 3
},
"RewardItem04": {
"Category": 1,
"SubjectType": 2,
"ItemID": 0,
"Num": 3
},
"RewardItem05": {
"Category": 2,
"SubjectType": 0,
"ItemID": 0,
"Num": 2
},
"RewardItem06": {
"Category": 2,
"SubjectType": 1,
"ItemID": 0,
"Num": 2
},
"RewardItem07": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem08": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem09": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem10": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem11": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem12": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem13": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem14": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
}
},
{
"TableName": 11960182869866017919,
"RewardItem00": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1127,
"Num": 1
},
"RewardItem01": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1128,
"Num": 1
},
"RewardItem02": {
"Category": 1,
"SubjectType": 0,
"ItemID": 0,
"Num": 5
},
"RewardItem03": {
"Category": 0,
"SubjectType": 0,
"ItemID": 569,
"Num": 3
},
"RewardItem04": {
"Category": 1,
"SubjectType": 2,
"ItemID": 0,
"Num": 3
},
"RewardItem05": {
"Category": 2,
"SubjectType": 0,
"ItemID": 0,
"Num": 2
},
"RewardItem06": {
"Category": 2,
"SubjectType": 1,
"ItemID": 0,
"Num": 2
},
"RewardItem07": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem08": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem09": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem10": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem11": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem12": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem13": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem14": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
}
},
{
"TableName": 11960183969377646130,
"RewardItem00": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1127,
"Num": 1
},
"RewardItem01": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1128,
"Num": 1
},
"RewardItem02": {
"Category": 1,
"SubjectType": 0,
"ItemID": 0,
"Num": 5
},
"RewardItem03": {
"Category": 0,
"SubjectType": 0,
"ItemID": 570,
"Num": 3
},
"RewardItem04": {
"Category": 1,
"SubjectType": 2,
"ItemID": 0,
"Num": 3
},
"RewardItem05": {
"Category": 2,
"SubjectType": 0,
"ItemID": 0,
"Num": 2
},
"RewardItem06": {
"Category": 2,
"SubjectType": 1,
"ItemID": 0,
"Num": 2
},
"RewardItem07": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem08": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem09": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem10": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem11": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem12": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem13": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem14": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
}
},
{
"TableName": 8092679411244492160,
"RewardItem00": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1127,
"Num": 4
},
"RewardItem01": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1128,
"Num": 1
},
"RewardItem02": {
"Category": 1,
"SubjectType": 0,
"ItemID": 0,
"Num": 5
},
"RewardItem03": {
"Category": 0,
"SubjectType": 0,
"ItemID": 566,
"Num": 3
},
"RewardItem04": {
"Category": 1,
"SubjectType": 2,
"ItemID": 0,
"Num": 3
},
"RewardItem05": {
"Category": 2,
"SubjectType": 0,
"ItemID": 0,
"Num": 3
},
"RewardItem06": {
"Category": 2,
"SubjectType": 1,
"ItemID": 0,
"Num": 3
},
"RewardItem07": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem08": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem09": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem10": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem11": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem12": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem13": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem14": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
}
},
{
"TableName": 8092682709779376793,
"RewardItem00": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1127,
"Num": 4
},
"RewardItem01": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1128,
"Num": 1
},
"RewardItem02": {
"Category": 1,
"SubjectType": 0,
"ItemID": 0,
"Num": 5
},
"RewardItem03": {
"Category": 0,
"SubjectType": 0,
"ItemID": 567,
"Num": 3
},
"RewardItem04": {
"Category": 1,
"SubjectType": 2,
"ItemID": 0,
"Num": 3
},
"RewardItem05": {
"Category": 2,
"SubjectType": 0,
"ItemID": 0,
"Num": 3
},
"RewardItem06": {
"Category": 2,
"SubjectType": 1,
"ItemID": 0,
"Num": 3
},
"RewardItem07": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem08": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem09": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem10": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem11": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem12": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem13": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem14": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
}
},
{
"TableName": 8092681610267748582,
"RewardItem00": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1127,
"Num": 4
},
"RewardItem01": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1128,
"Num": 1
},
"RewardItem02": {
"Category": 1,
"SubjectType": 0,
"ItemID": 0,
"Num": 5
},
"RewardItem03": {
"Category": 0,
"SubjectType": 0,
"ItemID": 565,
"Num": 3
},
"RewardItem04": {
"Category": 1,
"SubjectType": 2,
"ItemID": 0,
"Num": 3
},
"RewardItem05": {
"Category": 2,
"SubjectType": 0,
"ItemID": 0,
"Num": 3
},
"RewardItem06": {
"Category": 2,
"SubjectType": 1,
"ItemID": 0,
"Num": 3
},
"RewardItem07": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem08": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem09": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem10": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem11": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem12": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem13": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem14": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
}
},
{
"TableName": 8092684908802633215,
"RewardItem00": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1127,
"Num": 4
},
"RewardItem01": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1128,
"Num": 1
},
"RewardItem02": {
"Category": 1,
"SubjectType": 0,
"ItemID": 0,
"Num": 5
},
"RewardItem03": {
"Category": 0,
"SubjectType": 0,
"ItemID": 568,
"Num": 3
},
"RewardItem04": {
"Category": 1,
"SubjectType": 2,
"ItemID": 0,
"Num": 3
},
"RewardItem05": {
"Category": 2,
"SubjectType": 0,
"ItemID": 0,
"Num": 3
},
"RewardItem06": {
"Category": 2,
"SubjectType": 1,
"ItemID": 0,
"Num": 3
},
"RewardItem07": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem08": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem09": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem10": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem11": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem12": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem13": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem14": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
}
},
{
"TableName": 8092683809291005004,
"RewardItem00": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1127,
"Num": 4
},
"RewardItem01": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1128,
"Num": 1
},
"RewardItem02": {
"Category": 1,
"SubjectType": 0,
"ItemID": 0,
"Num": 5
},
"RewardItem03": {
"Category": 0,
"SubjectType": 0,
"ItemID": 569,
"Num": 3
},
"RewardItem04": {
"Category": 1,
"SubjectType": 2,
"ItemID": 0,
"Num": 3
},
"RewardItem05": {
"Category": 2,
"SubjectType": 0,
"ItemID": 0,
"Num": 3
},
"RewardItem06": {
"Category": 2,
"SubjectType": 1,
"ItemID": 0,
"Num": 3
},
"RewardItem07": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem08": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem09": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem10": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem11": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem12": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem13": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem14": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
}
},
{
"TableName": 8092687107825889637,
"RewardItem00": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1127,
"Num": 4
},
"RewardItem01": {
"Category": 0,
"SubjectType": 0,
"ItemID": 1128,
"Num": 1
},
"RewardItem02": {
"Category": 1,
"SubjectType": 0,
"ItemID": 0,
"Num": 5
},
"RewardItem03": {
"Category": 0,
"SubjectType": 0,
"ItemID": 570,
"Num": 3
},
"RewardItem04": {
"Category": 1,
"SubjectType": 2,
"ItemID": 0,
"Num": 3
},
"RewardItem05": {
"Category": 2,
"SubjectType": 0,
"ItemID": 0,
"Num": 3
},
"RewardItem06": {
"Category": 2,
"SubjectType": 1,
"ItemID": 0,
"Num": 3
},
"RewardItem07": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem08": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem09": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem10": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem11": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem12": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem13": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
},
"RewardItem14": {
"Category": 0,
"SubjectType": 0,
"ItemID": 0,
"Num": 0
}
}
]
================================================
FILE: RaidCrawler.Core/Resources/Base/raid_lottery_reward_item_array.json
================================================
[
{
"TableName": 12665484173717205406,
"RewardItem00": {
"Category": 0,
"ItemID": 1124,
"Num": 1,
"Rate": 50,
"RareItemFlag": false
},
"RewardItem01": {
"Category": 0,
"ItemID": 1125,
"Num": 1,
"Rate": 50,
"RareItemFlag": false
},
"RewardItem02": {
"Category": 0,
"ItemID": 4,
"Num": 100,
"Rate": 500,
"RareItemFlag": true
},
"RewardItem03": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem04": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem05": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem06": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem07": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem08": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem09": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem10": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem11": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem12": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem13": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem14": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem15": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem16": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem17": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem18": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem19": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem20": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem21": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem22": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem23": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem24": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem25": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem26": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem27": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem28": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem29": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
}
},
{
"TableName": 12768795081099901129,
"RewardItem00": {
"Category": 0,
"ItemID": 1124,
"Num": 1,
"Rate": 2200,
"RareItemFlag": false
},
"RewardItem01": {
"Category": 0,
"ItemID": 1125,
"Num": 1,
"Rate": 850,
"RareItemFlag": false
},
"RewardItem02": {
"Category": 0,
"ItemID": 566,
"Num": 1,
"Rate": 850,
"RareItemFlag": false
},
"RewardItem03": {
"Category": 0,
"ItemID": 155,
"Num": 1,
"Rate": 800,
"RareItemFlag": false
},
"RewardItem04": {
"Category": 0,
"ItemID": 151,
"Num": 2,
"Rate": 800,
"RareItemFlag": false
},
"RewardItem05": {
"Category": 0,
"ItemID": 152,
"Num": 1,
"Rate": 800,
"RareItemFlag": false
},
"RewardItem06": {
"Category": 0,
"ItemID": 88,
"Num": 1,
"Rate": 3000,
"RareItemFlag": false
},
"RewardItem07": {
"Category": 1,
"ItemID": 0,
"Num": 1,
"Rate": 700,
"RareItemFlag": false
},
"RewardItem08": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem09": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem10": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem11": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem12": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem13": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem14": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem15": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem16": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem17": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem18": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem19": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem20": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem21": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem22": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem23": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem24": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem25": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem26": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem27": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem28": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem29": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
}
},
{
"TableName": 668479594417095103,
"RewardItem00": {
"Category": 0,
"ItemID": 1124,
"Num": 1,
"Rate": 2200,
"RareItemFlag": false
},
"RewardItem01": {
"Category": 0,
"ItemID": 1125,
"Num": 1,
"Rate": 850,
"RareItemFlag": false
},
"RewardItem02": {
"Category": 0,
"ItemID": 567,
"Num": 1,
"Rate": 850,
"RareItemFlag": false
},
"RewardItem03": {
"Category": 0,
"ItemID": 149,
"Num": 1,
"Rate": 800,
"RareItemFlag": false
},
"RewardItem04": {
"Category": 0,
"ItemID": 151,
"Num": 2,
"Rate": 800,
"RareItemFlag": false
},
"RewardItem05": {
"Category": 0,
"ItemID": 152,
"Num": 1,
"Rate": 800,
"RareItemFlag": false
},
"RewardItem06": {
"Category": 0,
"ItemID": 90,
"Num": 1,
"Rate": 3000,
"RareItemFlag": false
},
"RewardItem07": {
"Category": 1,
"ItemID": 0,
"Num": 1,
"Rate": 700,
"RareItemFlag": false
},
"RewardItem08": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem09": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem10": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem11": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem12": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem13": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem14": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem15": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem16": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem17": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem18": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem19": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem20": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem21": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem22": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem23": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem24": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem25": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem26": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem27": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem28": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem29": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
}
},
{
"TableName": 679833151487731189,
"RewardItem00": {
"Category": 0,
"ItemID": 1124,
"Num": 1,
"Rate": 2200,
"RareItemFlag": false
},
"RewardItem01": {
"Category": 0,
"ItemID": 1125,
"Num": 1,
"Rate": 850,
"RareItemFlag": false
},
"RewardItem02": {
"Category": 0,
"ItemID": 565,
"Num": 1,
"Rate": 850,
"RareItemFlag": false
},
"RewardItem03": {
"Category": 0,
"ItemID": 151,
"Num": 1,
"Rate": 800,
"RareItemFlag": false
},
"RewardItem04": {
"Category": 0,
"ItemID": 152,
"Num": 2,
"Rate": 800,
"RareItemFlag": false
},
"RewardItem05": {
"Category": 0,
"ItemID": 153,
"Num": 1,
"Rate": 800,
"RareItemFlag": false
},
"RewardItem06": {
"Category": 0,
"ItemID": 86,
"Num": 1,
"Rate": 3000,
"RareItemFlag": false
},
"RewardItem07": {
"Category": 1,
"ItemID": 0,
"Num": 1,
"Rate": 700,
"RareItemFlag": false
},
"RewardItem08": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem09": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem10": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem11": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem12": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem13": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem14": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem15": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem16": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem17": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem18": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem19": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem20": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem21": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem22": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem23": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem24": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem25": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem26": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem27": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem28": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem29": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
}
},
{
"TableName": 17668059097480846072,
"RewardItem00": {
"Category": 0,
"ItemID": 1124,
"Num": 1,
"Rate": 2200,
"RareItemFlag": false
},
"RewardItem01": {
"Category": 0,
"ItemID": 1125,
"Num": 1,
"Rate": 850,
"RareItemFlag": false
},
"RewardItem02": {
"Category": 0,
"ItemID": 568,
"Num": 1,
"Rate": 850,
"RareItemFlag": false
},
"RewardItem03": {
"Category": 0,
"ItemID": 152,
"Num": 1,
"Rate": 800,
"RareItemFlag": false
},
"RewardItem04": {
"Category": 0,
"ItemID": 153,
"Num": 2,
"Rate": 800,
"RareItemFlag": false
},
"RewardItem05": {
"Category": 0,
"ItemID": 150,
"Num": 1,
"Rate": 800,
"RareItemFlag": false
},
"RewardItem06": {
"Category": 0,
"ItemID": 88,
"Num": 1,
"Rate": 3000,
"RareItemFlag": false
},
"RewardItem07": {
"Category": 1,
"ItemID": 0,
"Num": 1,
"Rate": 700,
"RareItemFlag": false
},
"RewardItem08": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem09": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem10": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem11": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem12": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem13": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem14": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem15": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem16": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem17": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem18": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem19": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem20": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem21": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem22": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem23": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem24": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem25": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem26": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem27": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem28": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem29": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
}
},
{
"TableName": 16164448039046184704,
"RewardItem00": {
"Category": 0,
"ItemID": 1124,
"Num": 1,
"Rate": 2200,
"RareItemFlag": false
},
"RewardItem01": {
"Category": 0,
"ItemID": 1125,
"Num": 1,
"Rate": 850,
"RareItemFlag": false
},
"RewardItem02": {
"Category": 0,
"ItemID": 569,
"Num": 1,
"Rate": 850,
"RareItemFlag": false
},
"RewardItem03": {
"Category": 0,
"ItemID": 153,
"Num": 1,
"Rate": 800,
"RareItemFlag": false
},
"RewardItem04": {
"Category": 0,
"ItemID": 150,
"Num": 2,
"Rate": 800,
"RareItemFlag": false
},
"RewardItem05": {
"Category": 0,
"ItemID": 156,
"Num": 1,
"Rate": 800,
"RareItemFlag": false
},
"RewardItem06": {
"Category": 0,
"ItemID": 90,
"Num": 1,
"Rate": 3000,
"RareItemFlag": false
},
"RewardItem07": {
"Category": 1,
"ItemID": 0,
"Num": 1,
"Rate": 700,
"RareItemFlag": false
},
"RewardItem08": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem09": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem10": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem11": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem12": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem13": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem14": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem15": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem16": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem17": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem18": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem19": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem20": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem21": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem22": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem23": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem24": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem25": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem26": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem27": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem28": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem29": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
}
},
{
"TableName": 15162778972308788368,
"RewardItem00": {
"Category": 0,
"ItemID": 1124,
"Num": 1,
"Rate": 2200,
"RareItemFlag": false
},
"RewardItem01": {
"Category": 0,
"ItemID": 1125,
"Num": 1,
"Rate": 850,
"RareItemFlag": false
},
"RewardItem02": {
"Category": 0,
"ItemID": 570,
"Num": 1,
"Rate": 850,
"RareItemFlag": false
},
"RewardItem03": {
"Category": 0,
"ItemID": 156,
"Num": 1,
"Rate": 800,
"RareItemFlag": false
},
"RewardItem04": {
"Category": 0,
"ItemID": 150,
"Num": 2,
"Rate": 800,
"RareItemFlag": false
},
"RewardItem05": {
"Category": 0,
"ItemID": 153,
"Num": 1,
"Rate": 800,
"RareItemFlag": false
},
"RewardItem06": {
"Category": 0,
"ItemID": 86,
"Num": 1,
"Rate": 3000,
"RareItemFlag": false
},
"RewardItem07": {
"Category": 1,
"ItemID": 0,
"Num": 1,
"Rate": 700,
"RareItemFlag": false
},
"RewardItem08": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem09": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem10": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem11": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem12": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem13": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem14": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem15": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem16": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem17": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem18": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem19": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem20": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem21": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem22": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem23": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem24": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem25": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem26": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem27": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem28": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem29": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
}
},
{
"TableName": 6127935918080434284,
"RewardItem00": {
"Category": 0,
"ItemID": 1125,
"Num": 1,
"Rate": 2300,
"RareItemFlag": false
},
"RewardItem01": {
"Category": 0,
"ItemID": 1126,
"Num": 1,
"Rate": 1200,
"RareItemFlag": false
},
"RewardItem02": {
"Category": 0,
"ItemID": 566,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem03": {
"Category": 0,
"ItemID": 155,
"Num": 1,
"Rate": 400,
"RareItemFlag": false
},
"RewardItem04": {
"Category": 0,
"ItemID": 151,
"Num": 2,
"Rate": 400,
"RareItemFlag": false
},
"RewardItem05": {
"Category": 0,
"ItemID": 152,
"Num": 1,
"Rate": 400,
"RareItemFlag": false
},
"RewardItem06": {
"Category": 0,
"ItemID": 88,
"Num": 1,
"Rate": 3000,
"RareItemFlag": false
},
"RewardItem07": {
"Category": 1,
"ItemID": 0,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem08": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem09": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem10": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem11": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem12": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem13": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem14": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem15": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem16": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem17": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem18": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem19": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem20": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem21": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem22": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem23": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem24": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem25": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem26": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem27": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem28": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem29": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
}
},
{
"TableName": 875344009101998740,
"RewardItem00": {
"Category": 0,
"ItemID": 1125,
"Num": 1,
"Rate": 2300,
"RareItemFlag": false
},
"RewardItem01": {
"Category": 0,
"ItemID": 1126,
"Num": 1,
"Rate": 1200,
"RareItemFlag": false
},
"RewardItem02": {
"Category": 0,
"ItemID": 567,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem03": {
"Category": 0,
"ItemID": 149,
"Num": 1,
"Rate": 400,
"RareItemFlag": false
},
"RewardItem04": {
"Category": 0,
"ItemID": 151,
"Num": 2,
"Rate": 400,
"RareItemFlag": false
},
"RewardItem05": {
"Category": 0,
"ItemID": 152,
"Num": 1,
"Rate": 400,
"RareItemFlag": false
},
"RewardItem06": {
"Category": 0,
"ItemID": 90,
"Num": 1,
"Rate": 3000,
"RareItemFlag": false
},
"RewardItem07": {
"Category": 1,
"ItemID": 0,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem08": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem09": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem10": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem11": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem12": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem13": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem14": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem15": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem16": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem17": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem18": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem19": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem20": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem21": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem22": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem23": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem24": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem25": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem26": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem27": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem28": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem29": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
}
},
{
"TableName": 863845316496438802,
"RewardItem00": {
"Category": 0,
"ItemID": 1125,
"Num": 1,
"Rate": 2300,
"RareItemFlag": false
},
"RewardItem01": {
"Category": 0,
"ItemID": 1126,
"Num": 1,
"Rate": 1200,
"RareItemFlag": false
},
"RewardItem02": {
"Category": 0,
"ItemID": 565,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem03": {
"Category": 0,
"ItemID": 151,
"Num": 1,
"Rate": 400,
"RareItemFlag": false
},
"RewardItem04": {
"Category": 0,
"ItemID": 152,
"Num": 2,
"Rate": 400,
"RareItemFlag": false
},
"RewardItem05": {
"Category": 0,
"ItemID": 153,
"Num": 1,
"Rate": 400,
"RareItemFlag": false
},
"RewardItem06": {
"Category": 0,
"ItemID": 86,
"Num": 1,
"Rate": 3000,
"RareItemFlag": false
},
"RewardItem07": {
"Category": 1,
"ItemID": 0,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem08": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem09": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem10": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem11": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem12": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem13": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem14": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem15": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem16": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem17": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem18": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem19": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem20": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem21": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem22": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem23": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem24": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem25": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem26": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem27": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem28": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem29": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
}
},
{
"TableName": 15677658920486028021,
"RewardItem00": {
"Category": 0,
"ItemID": 1125,
"Num": 1,
"Rate": 2300,
"RareItemFlag": false
},
"RewardItem01": {
"Category": 0,
"ItemID": 1126,
"Num": 1,
"Rate": 1200,
"RareItemFlag": false
},
"RewardItem02": {
"Category": 0,
"ItemID": 568,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem03": {
"Category": 0,
"ItemID": 152,
"Num": 1,
"Rate": 400,
"RareItemFlag": false
},
"RewardItem04": {
"Category": 0,
"ItemID": 153,
"Num": 2,
"Rate": 400,
"RareItemFlag": false
},
"RewardItem05": {
"Category": 0,
"ItemID": 150,
"Num": 1,
"Rate": 400,
"RareItemFlag": false
},
"RewardItem06": {
"Category": 0,
"ItemID": 88,
"Num": 1,
"Rate": 3000,
"RareItemFlag": false
},
"RewardItem07": {
"Category": 1,
"ItemID": 0,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem08": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem09": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem10": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem11": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem12": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem13": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem14": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem15": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem16": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem17": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem18": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem19": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem20": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem21": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem22": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem23": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem24": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem25": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem26": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem27": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem28": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem29": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
}
},
{
"TableName": 18349317780833198619,
"RewardItem00": {
"Category": 0,
"ItemID": 1125,
"Num": 1,
"Rate": 2300,
"RareItemFlag": false
},
"RewardItem01": {
"Category": 0,
"ItemID": 1126,
"Num": 1,
"Rate": 1200,
"RareItemFlag": false
},
"RewardItem02": {
"Category": 0,
"ItemID": 569,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem03": {
"Category": 0,
"ItemID": 153,
"Num": 1,
"Rate": 400,
"RareItemFlag": false
},
"RewardItem04": {
"Category": 0,
"ItemID": 150,
"Num": 2,
"Rate": 400,
"RareItemFlag": false
},
"RewardItem05": {
"Category": 0,
"ItemID": 156,
"Num": 1,
"Rate": 400,
"RareItemFlag": false
},
"RewardItem06": {
"Category": 0,
"ItemID": 90,
"Num": 1,
"Rate": 3000,
"RareItemFlag": false
},
"RewardItem07": {
"Category": 1,
"ItemID": 0,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem08": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem09": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem10": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem11": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem12": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem13": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem14": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem15": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem16": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem17": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem18": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem19": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem20": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem21": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem22": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem23": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem24": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem25": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem26": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem27": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem28": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem29": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
}
},
{
"TableName": 18274910994316513853,
"RewardItem00": {
"Category": 0,
"ItemID": 1125,
"Num": 1,
"Rate": 2300,
"RareItemFlag": false
},
"RewardItem01": {
"Category": 0,
"ItemID": 1126,
"Num": 1,
"Rate": 1200,
"RareItemFlag": false
},
"RewardItem02": {
"Category": 0,
"ItemID": 570,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem03": {
"Category": 0,
"ItemID": 156,
"Num": 1,
"Rate": 400,
"RareItemFlag": false
},
"RewardItem04": {
"Category": 0,
"ItemID": 150,
"Num": 2,
"Rate": 400,
"RareItemFlag": false
},
"RewardItem05": {
"Category": 0,
"ItemID": 153,
"Num": 1,
"Rate": 400,
"RareItemFlag": false
},
"RewardItem06": {
"Category": 0,
"ItemID": 86,
"Num": 1,
"Rate": 3000,
"RareItemFlag": false
},
"RewardItem07": {
"Category": 1,
"ItemID": 0,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem08": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem09": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem10": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem11": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem12": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem13": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem14": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem15": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem16": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem17": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem18": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem19": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem20": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem21": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem22": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem23": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem24": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem25": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem26": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem27": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem28": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem29": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
}
},
{
"TableName": 8835428215795829081,
"RewardItem00": {
"Category": 0,
"ItemID": 1125,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem01": {
"Category": 0,
"ItemID": 1126,
"Num": 1,
"Rate": 1400,
"RareItemFlag": false
},
"RewardItem02": {
"Category": 0,
"ItemID": 1126,
"Num": 2,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem03": {
"Category": 0,
"ItemID": 566,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem04": {
"Category": 0,
"ItemID": 159,
"Num": 1,
"Rate": 700,
"RareItemFlag": false
},
"RewardItem05": {
"Category": 0,
"ItemID": 157,
"Num": 1,
"Rate": 700,
"RareItemFlag": false
},
"RewardItem06": {
"Category": 0,
"ItemID": 91,
"Num": 1,
"Rate": 1200,
"RareItemFlag": false
},
"RewardItem07": {
"Category": 0,
"ItemID": 90,
"Num": 1,
"Rate": 2500,
"RareItemFlag": false
},
"RewardItem08": {
"Category": 1,
"ItemID": 0,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem09": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem10": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem11": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem12": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem13": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem14": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem15": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem16": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem17": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem18": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem19": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem20": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem21": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem22": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem23": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem24": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem25": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem26": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem27": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem28": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem29": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
}
},
{
"TableName": 8835424917260944448,
"RewardItem00": {
"Category": 0,
"ItemID": 1125,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem01": {
"Category": 0,
"ItemID": 1126,
"Num": 1,
"Rate": 1400,
"RareItemFlag": false
},
"RewardItem02": {
"Category": 0,
"ItemID": 1126,
"Num": 2,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem03": {
"Category": 0,
"ItemID": 567,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem04": {
"Category": 0,
"ItemID": 163,
"Num": 1,
"Rate": 700,
"RareItemFlag": false
},
"RewardItem05": {
"Category": 0,
"ItemID": 157,
"Num": 1,
"Rate": 800,
"RareItemFlag": false
},
"RewardItem06": {
"Category": 0,
"ItemID": 88,
"Num": 1,
"Rate": 2500,
"RareItemFlag": false
},
"RewardItem07": {
"Category": 0,
"ItemID": 89,
"Num": 1,
"Rate": 1200,
"RareItemFlag": false
},
"RewardItem08": {
"Category": 1,
"ItemID": 0,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem09": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem10": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem11": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem12": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem13": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem14": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem15": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem16": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem17": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem18": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem19": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem20": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem21": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem22": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem23": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem24": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem25": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem26": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem27": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem28": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem29": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
}
},
{
"TableName": 8835426016772572659,
"RewardItem00": {
"Category": 0,
"ItemID": 1125,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem01": {
"Category": 0,
"ItemID": 1126,
"Num": 1,
"Rate": 1400,
"RareItemFlag": false
},
"RewardItem02": {
"Category": 0,
"ItemID": 1126,
"Num": 2,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem03": {
"Category": 0,
"ItemID": 565,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem04": {
"Category": 0,
"ItemID": 158,
"Num": 1,
"Rate": 700,
"RareItemFlag": false
},
"RewardItem05": {
"Category": 0,
"ItemID": 157,
"Num": 1,
"Rate": 800,
"RareItemFlag": false
},
"RewardItem06": {
"Category": 0,
"ItemID": 87,
"Num": 1,
"Rate": 1200,
"RareItemFlag": false
},
"RewardItem07": {
"Category": 0,
"ItemID": 86,
"Num": 1,
"Rate": 2500,
"RareItemFlag": false
},
"RewardItem08": {
"Category": 1,
"ItemID": 0,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem09": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem10": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem11": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem12": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem13": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem14": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem15": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem16": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem17": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem18": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem19": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem20": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem21": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem22": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem23": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem24": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem25": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem26": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem27": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem28": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem29": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
}
},
{
"TableName": 8835431514330713714,
"RewardItem00": {
"Category": 0,
"ItemID": 1125,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem01": {
"Category": 0,
"ItemID": 1126,
"Num": 1,
"Rate": 1400,
"RareItemFlag": false
},
"RewardItem02": {
"Category": 0,
"ItemID": 1126,
"Num": 2,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem03": {
"Category": 0,
"ItemID": 568,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem04": {
"Category": 0,
"ItemID": 162,
"Num": 1,
"Rate": 700,
"RareItemFlag": false
},
"RewardItem05": {
"Category": 0,
"ItemID": 157,
"Num": 1,
"Rate": 800,
"RareItemFlag": false
},
"RewardItem06": {
"Category": 0,
"ItemID": 91,
"Num": 1,
"Rate": 1200,
"RareItemFlag": false
},
"RewardItem07": {
"Category": 0,
"ItemID": 90,
"Num": 1,
"Rate": 2500,
"RareItemFlag": false
},
"RewardItem08": {
"Category": 1,
"ItemID": 0,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem09": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem10": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem11": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem12": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem13": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem14": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem15": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem16": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem17": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem18": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem19": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem20": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem21": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem22": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem23": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem24": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem25": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem26": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem27": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem28": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem29": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
}
},
{
"TableName": 8835432613842341925,
"RewardItem00": {
"Category": 0,
"ItemID": 1125,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem01": {
"Category": 0,
"ItemID": 1126,
"Num": 1,
"Rate": 1400,
"RareItemFlag": false
},
"RewardItem02": {
"Category": 0,
"ItemID": 1126,
"Num": 2,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem03": {
"Category": 0,
"ItemID": 569,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem04": {
"Category": 0,
"ItemID": 160,
"Num": 1,
"Rate": 700,
"RareItemFlag": false
},
"RewardItem05": {
"Category": 0,
"ItemID": 157,
"Num": 1,
"Rate": 800,
"RareItemFlag": false
},
"RewardItem06": {
"Category": 0,
"ItemID": 88,
"Num": 1,
"Rate": 2500,
"RareItemFlag": false
},
"RewardItem07": {
"Category": 0,
"ItemID": 89,
"Num": 1,
"Rate": 1200,
"RareItemFlag": false
},
"RewardItem08": {
"Category": 1,
"ItemID": 0,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem09": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem10": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem11": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem12": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem13": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem14": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem15": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem16": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem17": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem18": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem19": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem20": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem21": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem22": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem23": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem24": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem25": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem26": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem27": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem28": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem29": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
}
},
{
"TableName": 8835429315307457292,
"RewardItem00": {
"Category": 0,
"ItemID": 1125,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem01": {
"Category": 0,
"ItemID": 1126,
"Num": 1,
"Rate": 1400,
"RareItemFlag": false
},
"RewardItem02": {
"Category": 0,
"ItemID": 1126,
"Num": 2,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem03": {
"Category": 0,
"ItemID": 570,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem04": {
"Category": 0,
"ItemID": 161,
"Num": 1,
"Rate": 700,
"RareItemFlag": false
},
"RewardItem05": {
"Category": 0,
"ItemID": 157,
"Num": 1,
"Rate": 800,
"RareItemFlag": false
},
"RewardItem06": {
"Category": 0,
"ItemID": 86,
"Num": 1,
"Rate": 2500,
"RareItemFlag": false
},
"RewardItem07": {
"Category": 0,
"ItemID": 87,
"Num": 1,
"Rate": 1200,
"RareItemFlag": false
},
"RewardItem08": {
"Category": 1,
"ItemID": 0,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem09": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem10": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem11": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem12": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem13": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem14": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem15": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem16": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem17": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem18": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem19": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem20": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem21": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem22": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem23": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem24": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem25": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem26": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem27": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem28": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem29": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
}
},
{
"TableName": 6567691901553146942,
"RewardItem00": {
"Category": 0,
"ItemID": 1126,
"Num": 1,
"Rate": 1500,
"RareItemFlag": false
},
"RewardItem01": {
"Category": 0,
"ItemID": 1126,
"Num": 1,
"Rate": 1500,
"RareItemFlag": false
},
"RewardItem02": {
"Category": 0,
"ItemID": 1127,
"Num": 2,
"Rate": 400,
"RareItemFlag": false
},
"RewardItem03": {
"Category": 0,
"ItemID": 566,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem04": {
"Category": 0,
"ItemID": 159,
"Num": 1,
"Rate": 700,
"RareItemFlag": false
},
"RewardItem05": {
"Category": 0,
"ItemID": 157,
"Num": 1,
"Rate": 700,
"RareItemFlag": false
},
"RewardItem06": {
"Category": 0,
"ItemID": 170,
"Num": 3,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem07": {
"Category": 0,
"ItemID": 91,
"Num": 1,
"Rate": 1500,
"RareItemFlag": false
},
"RewardItem08": {
"Category": 0,
"ItemID": 92,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem09": {
"Category": 2,
"ItemID": 0,
"Num": 1,
"Rate": 300,
"RareItemFlag": false
},
"RewardItem10": {
"Category": 1,
"ItemID": 0,
"Num": 2,
"Rate": 900,
"RareItemFlag": false
},
"RewardItem11": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem12": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem13": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem14": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem15": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem16": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem17": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem18": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem19": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem20": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem21": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem22": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem23": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem24": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem25": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem26": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem27": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem28": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem29": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
}
},
{
"TableName": 6567690802041518731,
"RewardItem00": {
"Category": 0,
"ItemID": 1126,
"Num": 1,
"Rate": 1500,
"RareItemFlag": false
},
"RewardItem01": {
"Category": 0,
"ItemID": 1126,
"Num": 1,
"Rate": 1500,
"RareItemFlag": false
},
"RewardItem02": {
"Category": 0,
"ItemID": 1127,
"Num": 2,
"Rate": 400,
"RareItemFlag": false
},
"RewardItem03": {
"Category": 0,
"ItemID": 567,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem04": {
"Category": 0,
"ItemID": 163,
"Num": 1,
"Rate": 700,
"RareItemFlag": false
},
"RewardItem05": {
"Category": 0,
"ItemID": 157,
"Num": 1,
"Rate": 700,
"RareItemFlag": false
},
"RewardItem06": {
"Category": 0,
"ItemID": 171,
"Num": 3,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem07": {
"Category": 0,
"ItemID": 89,
"Num": 1,
"Rate": 1500,
"RareItemFlag": false
},
"RewardItem08": {
"Category": 0,
"ItemID": 92,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem09": {
"Category": 2,
"ItemID": 0,
"Num": 1,
"Rate": 300,
"RareItemFlag": false
},
"RewardItem10": {
"Category": 1,
"ItemID": 0,
"Num": 2,
"Rate": 900,
"RareItemFlag": false
},
"RewardItem11": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem12": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem13": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem14": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem15": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem16": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem17": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem18": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem19": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem20": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem21": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem22": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem23": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem24": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem25": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem26": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem27": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem28": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem29": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
}
},
{
"TableName": 6567689702529890520,
"RewardItem00": {
"Category": 0,
"ItemID": 1126,
"Num": 1,
"Rate": 1500,
"RareItemFlag": false
},
"RewardItem01": {
"Category": 0,
"ItemID": 1126,
"Num": 1,
"Rate": 1500,
"RareItemFlag": false
},
"RewardItem02": {
"Category": 0,
"ItemID": 1127,
"Num": 2,
"Rate": 400,
"RareItemFlag": false
},
"RewardItem03": {
"Category": 0,
"ItemID": 565,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem04": {
"Category": 0,
"ItemID": 158,
"Num": 1,
"Rate": 700,
"RareItemFlag": false
},
"RewardItem05": {
"Category": 0,
"ItemID": 157,
"Num": 1,
"Rate": 700,
"RareItemFlag": false
},
"RewardItem06": {
"Category": 0,
"ItemID": 169,
"Num": 3,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem07": {
"Category": 0,
"ItemID": 87,
"Num": 1,
"Rate": 1500,
"RareItemFlag": false
},
"RewardItem08": {
"Category": 0,
"ItemID": 92,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem09": {
"Category": 2,
"ItemID": 0,
"Num": 1,
"Rate": 300,
"RareItemFlag": false
},
"RewardItem10": {
"Category": 1,
"ItemID": 0,
"Num": 2,
"Rate": 900,
"RareItemFlag": false
},
"RewardItem11": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem12": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem13": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem14": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem15": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem16": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem17": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem18": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem19": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem20": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem21": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem22": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem23": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem24": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem25": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem26": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem27": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem28": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem29": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
}
},
{
"TableName": 6567697399111287997,
"RewardItem00": {
"Category": 0,
"ItemID": 1126,
"Num": 1,
"Rate": 1500,
"RareItemFlag": false
},
"RewardItem01": {
"Category": 0,
"ItemID": 1126,
"Num": 1,
"Rate": 1500,
"RareItemFlag": false
},
"RewardItem02": {
"Category": 0,
"ItemID": 1127,
"Num": 2,
"Rate": 400,
"RareItemFlag": false
},
"RewardItem03": {
"Category": 0,
"ItemID": 568,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem04": {
"Category": 0,
"ItemID": 160,
"Num": 1,
"Rate": 700,
"RareItemFlag": false
},
"RewardItem05": {
"Category": 0,
"ItemID": 157,
"Num": 1,
"Rate": 700,
"RareItemFlag": false
},
"RewardItem06": {
"Category": 0,
"ItemID": 172,
"Num": 3,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem07": {
"Category": 0,
"ItemID": 91,
"Num": 1,
"Rate": 1500,
"RareItemFlag": false
},
"RewardItem08": {
"Category": 0,
"ItemID": 92,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem09": {
"Category": 2,
"ItemID": 0,
"Num": 1,
"Rate": 300,
"RareItemFlag": false
},
"RewardItem10": {
"Category": 1,
"ItemID": 0,
"Num": 2,
"Rate": 900,
"RareItemFlag": false
},
"RewardItem11": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem12": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem13": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem14": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem15": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem16": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem17": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem18": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem19": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem20": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem21": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem22": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem23": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem24": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem25": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem26": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem27": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem28": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem29": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
}
},
{
"TableName": 6567696299599659786,
"RewardItem00": {
"Category": 0,
"ItemID": 1126,
"Num": 1,
"Rate": 1500,
"RareItemFlag": false
},
"RewardItem01": {
"Category": 0,
"ItemID": 1126,
"Num": 1,
"Rate": 1500,
"RareItemFlag": false
},
"RewardItem02": {
"Category": 0,
"ItemID": 1127,
"Num": 2,
"Rate": 400,
"RareItemFlag": false
},
"RewardItem03": {
"Category": 0,
"ItemID": 569,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem04": {
"Category": 0,
"ItemID": 162,
"Num": 1,
"Rate": 700,
"RareItemFlag": false
},
"RewardItem05": {
"Category": 0,
"ItemID": 157,
"Num": 1,
"Rate": 700,
"RareItemFlag": false
},
"RewardItem06": {
"Category": 0,
"ItemID": 173,
"Num": 3,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem07": {
"Category": 0,
"ItemID": 89,
"Num": 1,
"Rate": 1500,
"RareItemFlag": false
},
"RewardItem08": {
"Category": 0,
"ItemID": 92,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem09": {
"Category": 2,
"ItemID": 0,
"Num": 1,
"Rate": 300,
"RareItemFlag": false
},
"RewardItem10": {
"Category": 1,
"ItemID": 0,
"Num": 2,
"Rate": 900,
"RareItemFlag": false
},
"RewardItem11": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem12": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem13": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem14": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem15": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem16": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem17": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem18": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem19": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem20": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem21": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem22": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem23": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem24": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem25": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem26": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem27": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem28": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem29": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
}
},
{
"TableName": 6567695200088031575,
"RewardItem00": {
"Category": 0,
"ItemID": 1126,
"Num": 1,
"Rate": 1500,
"RareItemFlag": false
},
"RewardItem01": {
"Category": 0,
"ItemID": 1126,
"Num": 1,
"Rate": 1500,
"RareItemFlag": false
},
"RewardItem02": {
"Category": 0,
"ItemID": 1127,
"Num": 2,
"Rate": 400,
"RareItemFlag": false
},
"RewardItem03": {
"Category": 0,
"ItemID": 570,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem04": {
"Category": 0,
"ItemID": 161,
"Num": 1,
"Rate": 700,
"RareItemFlag": false
},
"RewardItem05": {
"Category": 0,
"ItemID": 157,
"Num": 1,
"Rate": 700,
"RareItemFlag": false
},
"RewardItem06": {
"Category": 0,
"ItemID": 174,
"Num": 3,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem07": {
"Category": 0,
"ItemID": 87,
"Num": 1,
"Rate": 1500,
"RareItemFlag": false
},
"RewardItem08": {
"Category": 0,
"ItemID": 92,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem09": {
"Category": 2,
"ItemID": 0,
"Num": 1,
"Rate": 300,
"RareItemFlag": false
},
"RewardItem10": {
"Category": 1,
"ItemID": 0,
"Num": 2,
"Rate": 900,
"RareItemFlag": false
},
"RewardItem11": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem12": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem13": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem14": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem15": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem16": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem17": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem18": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem19": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem20": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem21": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem22": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem23": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem24": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem25": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem26": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem27": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem28": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem29": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
}
},
{
"TableName": 11960178471819505075,
"RewardItem00": {
"Category": 0,
"ItemID": 1127,
"Num": 1,
"Rate": 2300,
"RareItemFlag": false
},
"RewardItem01": {
"Category": 0,
"ItemID": 1127,
"Num": 2,
"Rate": 1100,
"RareItemFlag": false
},
"RewardItem02": {
"Category": 0,
"ItemID": 50,
"Num": 1,
"Rate": 400,
"RareItemFlag": false
},
"RewardItem03": {
"Category": 0,
"ItemID": 566,
"Num": 2,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem04": {
"Category": 0,
"ItemID": 170,
"Num": 3,
"Rate": 800,
"RareItemFlag": false
},
"RewardItem05": {
"Category": 0,
"ItemID": 91,
"Num": 1,
"Rate": 1200,
"RareItemFlag": false
},
"RewardItem06": {
"Category": 0,
"ItemID": 583,
"Num": 1,
"Rate": 200,
"RareItemFlag": false
},
"RewardItem07": {
"Category": 0,
"ItemID": 92,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem08": {
"Category": 0,
"ItemID": 1908,
"Num": 1,
"Rate": 250,
"RareItemFlag": true
},
"RewardItem09": {
"Category": 0,
"ItemID": 1232,
"Num": 1,
"Rate": 250,
"RareItemFlag": false
},
"RewardItem10": {
"Category": 0,
"ItemID": 1231,
"Num": 1,
"Rate": 250,
"RareItemFlag": false
},
"RewardItem11": {
"Category": 0,
"ItemID": 1233,
"Num": 1,
"Rate": 250,
"RareItemFlag": false
},
"RewardItem12": {
"Category": 0,
"ItemID": 1234,
"Num": 1,
"Rate": 250,
"RareItemFlag": false
},
"RewardItem13": {
"Category": 0,
"ItemID": 51,
"Num": 1,
"Rate": 300,
"RareItemFlag": false
},
"RewardItem14": {
"Category": 0,
"ItemID": 795,
"Num": 1,
"Rate": 200,
"RareItemFlag": true
},
"RewardItem15": {
"Category": 2,
"ItemID": 0,
"Num": 1,
"Rate": 400,
"RareItemFlag": false
},
"RewardItem16": {
"Category": 1,
"ItemID": 0,
"Num": 2,
"Rate": 550,
"RareItemFlag": false
},
"RewardItem17": {
"Category": 0,
"ItemID": 645,
"Num": 1,
"Rate": 200,
"RareItemFlag": true
},
"RewardItem18": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem19": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem20": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem21": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem22": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem23": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem24": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem25": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem26": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem27": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem28": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem29": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
}
},
{
"TableName": 11960179571331133286,
"RewardItem00": {
"Category": 0,
"ItemID": 1127,
"Num": 1,
"Rate": 2300,
"RareItemFlag": false
},
"RewardItem01": {
"Category": 0,
"ItemID": 1127,
"Num": 2,
"Rate": 1100,
"RareItemFlag": false
},
"RewardItem02": {
"Category": 0,
"ItemID": 50,
"Num": 1,
"Rate": 400,
"RareItemFlag": false
},
"RewardItem03": {
"Category": 0,
"ItemID": 567,
"Num": 2,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem04": {
"Category": 0,
"ItemID": 171,
"Num": 3,
"Rate": 800,
"RareItemFlag": false
},
"RewardItem05": {
"Category": 0,
"ItemID": 89,
"Num": 1,
"Rate": 1200,
"RareItemFlag": false
},
"RewardItem06": {
"Category": 0,
"ItemID": 582,
"Num": 1,
"Rate": 200,
"RareItemFlag": false
},
"RewardItem07": {
"Category": 0,
"ItemID": 92,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem08": {
"Category": 0,
"ItemID": 1905,
"Num": 1,
"Rate": 250,
"RareItemFlag": true
},
"RewardItem09": {
"Category": 0,
"ItemID": 1235,
"Num": 1,
"Rate": 250,
"RareItemFlag": false
},
"RewardItem10": {
"Category": 0,
"ItemID": 1236,
"Num": 1,
"Rate": 250,
"RareItemFlag": false
},
"RewardItem11": {
"Category": 0,
"ItemID": 1237,
"Num": 1,
"Rate": 250,
"RareItemFlag": false
},
"RewardItem12": {
"Category": 0,
"ItemID": 1238,
"Num": 1,
"Rate": 250,
"RareItemFlag": false
},
"RewardItem13": {
"Category": 0,
"ItemID": 51,
"Num": 1,
"Rate": 300,
"RareItemFlag": false
},
"RewardItem14": {
"Category": 0,
"ItemID": 795,
"Num": 1,
"Rate": 200,
"RareItemFlag": true
},
"RewardItem15": {
"Category": 2,
"ItemID": 0,
"Num": 1,
"Rate": 400,
"RareItemFlag": false
},
"RewardItem16": {
"Category": 1,
"ItemID": 0,
"Num": 2,
"Rate": 550,
"RareItemFlag": false
},
"RewardItem17": {
"Category": 0,
"ItemID": 645,
"Num": 1,
"Rate": 200,
"RareItemFlag": true
},
"RewardItem18": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem19": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem20": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem21": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem22": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem23": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem24": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem25": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem26": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem27": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem28": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem29": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
}
},
{
"TableName": 11960180670842761497,
"RewardItem00": {
"Category": 0,
"ItemID": 1127,
"Num": 1,
"Rate": 2300,
"RareItemFlag": false
},
"RewardItem01": {
"Category": 0,
"ItemID": 1127,
"Num": 2,
"Rate": 1100,
"RareItemFlag": false
},
"RewardItem02": {
"Category": 0,
"ItemID": 50,
"Num": 1,
"Rate": 400,
"RareItemFlag": false
},
"RewardItem03": {
"Category": 0,
"ItemID": 565,
"Num": 2,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem04": {
"Category": 0,
"ItemID": 169,
"Num": 3,
"Rate": 800,
"RareItemFlag": false
},
"RewardItem05": {
"Category": 0,
"ItemID": 87,
"Num": 1,
"Rate": 1200,
"RareItemFlag": false
},
"RewardItem06": {
"Category": 0,
"ItemID": 580,
"Num": 1,
"Rate": 200,
"RareItemFlag": false
},
"RewardItem07": {
"Category": 0,
"ItemID": 92,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem08": {
"Category": 0,
"ItemID": 1908,
"Num": 1,
"Rate": 250,
"RareItemFlag": true
},
"RewardItem09": {
"Category": 0,
"ItemID": 1904,
"Num": 1,
"Rate": 250,
"RareItemFlag": true
},
"RewardItem10": {
"Category": 0,
"ItemID": 1905,
"Num": 1,
"Rate": 250,
"RareItemFlag": true
},
"RewardItem11": {
"Category": 0,
"ItemID": 1907,
"Num": 1,
"Rate": 250,
"RareItemFlag": true
},
"RewardItem12": {
"Category": 0,
"ItemID": 1906,
"Num": 1,
"Rate": 250,
"RareItemFlag": true
},
"RewardItem13": {
"Category": 0,
"ItemID": 51,
"Num": 1,
"Rate": 300,
"RareItemFlag": false
},
"RewardItem14": {
"Category": 0,
"ItemID": 795,
"Num": 1,
"Rate": 200,
"RareItemFlag": true
},
"RewardItem15": {
"Category": 2,
"ItemID": 0,
"Num": 1,
"Rate": 400,
"RareItemFlag": false
},
"RewardItem16": {
"Category": 1,
"ItemID": 0,
"Num": 2,
"Rate": 550,
"RareItemFlag": false
},
"RewardItem17": {
"Category": 0,
"ItemID": 645,
"Num": 1,
"Rate": 200,
"RareItemFlag": true
},
"RewardItem18": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem19": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem20": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem21": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem22": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem23": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem24": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem25": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem26": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem27": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem28": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem29": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
}
},
{
"TableName": 11960181770354389708,
"RewardItem00": {
"Category": 0,
"ItemID": 1127,
"Num": 1,
"Rate": 2300,
"RareItemFlag": false
},
"RewardItem01": {
"Category": 0,
"ItemID": 1127,
"Num": 2,
"Rate": 1100,
"RareItemFlag": false
},
"RewardItem02": {
"Category": 0,
"ItemID": 50,
"Num": 1,
"Rate": 400,
"RareItemFlag": false
},
"RewardItem03": {
"Category": 0,
"ItemID": 568,
"Num": 2,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem04": {
"Category": 0,
"ItemID": 172,
"Num": 3,
"Rate": 800,
"RareItemFlag": false
},
"RewardItem05": {
"Category": 0,
"ItemID": 91,
"Num": 1,
"Rate": 1200,
"RareItemFlag": false
},
"RewardItem06": {
"Category": 0,
"ItemID": 583,
"Num": 1,
"Rate": 200,
"RareItemFlag": false
},
"RewardItem07": {
"Category": 0,
"ItemID": 92,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem08": {
"Category": 0,
"ItemID": 1907,
"Num": 1,
"Rate": 250,
"RareItemFlag": true
},
"RewardItem09": {
"Category": 0,
"ItemID": 1239,
"Num": 1,
"Rate": 250,
"RareItemFlag": false
},
"RewardItem10": {
"Category": 0,
"ItemID": 1240,
"Num": 1,
"Rate": 250,
"RareItemFlag": false
},
"RewardItem11": {
"Category": 0,
"ItemID": 1241,
"Num": 1,
"Rate": 250,
"RareItemFlag": false
},
"RewardItem12": {
"Category": 0,
"ItemID": 1242,
"Num": 1,
"Rate": 250,
"RareItemFlag": false
},
"RewardItem13": {
"Category": 0,
"ItemID": 51,
"Num": 1,
"Rate": 300,
"RareItemFlag": false
},
"RewardItem14": {
"Category": 0,
"ItemID": 795,
"Num": 1,
"Rate": 200,
"RareItemFlag": true
},
"RewardItem15": {
"Category": 2,
"ItemID": 0,
"Num": 1,
"Rate": 400,
"RareItemFlag": false
},
"RewardItem16": {
"Category": 1,
"ItemID": 0,
"Num": 2,
"Rate": 550,
"RareItemFlag": false
},
"RewardItem17": {
"Category": 0,
"ItemID": 645,
"Num": 1,
"Rate": 200,
"RareItemFlag": true
},
"RewardItem18": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem19": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem20": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem21": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem22": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem23": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem24": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem25": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem26": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem27": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem28": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem29": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
}
},
{
"TableName": 11960182869866017919,
"RewardItem00": {
"Category": 0,
"ItemID": 1127,
"Num": 1,
"Rate": 2300,
"RareItemFlag": false
},
"RewardItem01": {
"Category": 0,
"ItemID": 1127,
"Num": 2,
"Rate": 1100,
"RareItemFlag": false
},
"RewardItem02": {
"Category": 0,
"ItemID": 50,
"Num": 1,
"Rate": 400,
"RareItemFlag": false
},
"RewardItem03": {
"Category": 0,
"ItemID": 569,
"Num": 2,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem04": {
"Category": 0,
"ItemID": 173,
"Num": 3,
"Rate": 800,
"RareItemFlag": false
},
"RewardItem05": {
"Category": 0,
"ItemID": 89,
"Num": 1,
"Rate": 1200,
"RareItemFlag": false
},
"RewardItem06": {
"Category": 0,
"ItemID": 582,
"Num": 1,
"Rate": 200,
"RareItemFlag": false
},
"RewardItem07": {
"Category": 0,
"ItemID": 92,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem08": {
"Category": 0,
"ItemID": 1906,
"Num": 1,
"Rate": 250,
"RareItemFlag": true
},
"RewardItem09": {
"Category": 0,
"ItemID": 1243,
"Num": 1,
"Rate": 250,
"RareItemFlag": false
},
"RewardItem10": {
"Category": 0,
"ItemID": 1244,
"Num": 1,
"Rate": 250,
"RareItemFlag": false
},
"RewardItem11": {
"Category": 0,
"ItemID": 1245,
"Num": 1,
"Rate": 250,
"RareItemFlag": false
},
"RewardItem12": {
"Category": 0,
"ItemID": 1246,
"Num": 1,
"Rate": 250,
"RareItemFlag": false
},
"RewardItem13": {
"Category": 0,
"ItemID": 51,
"Num": 1,
"Rate": 300,
"RareItemFlag": false
},
"RewardItem14": {
"Category": 0,
"ItemID": 795,
"Num": 1,
"Rate": 200,
"RareItemFlag": true
},
"RewardItem15": {
"Category": 2,
"ItemID": 0,
"Num": 1,
"Rate": 400,
"RareItemFlag": false
},
"RewardItem16": {
"Category": 1,
"ItemID": 0,
"Num": 2,
"Rate": 550,
"RareItemFlag": false
},
"RewardItem17": {
"Category": 0,
"ItemID": 645,
"Num": 1,
"Rate": 200,
"RareItemFlag": true
},
"RewardItem18": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem19": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem20": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem21": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem22": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem23": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem24": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem25": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem26": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem27": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem28": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem29": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
}
},
{
"TableName": 11960183969377646130,
"RewardItem00": {
"Category": 0,
"ItemID": 1127,
"Num": 1,
"Rate": 2300,
"RareItemFlag": false
},
"RewardItem01": {
"Category": 0,
"ItemID": 1127,
"Num": 2,
"Rate": 1100,
"RareItemFlag": false
},
"RewardItem02": {
"Category": 0,
"ItemID": 50,
"Num": 1,
"Rate": 400,
"RareItemFlag": false
},
"RewardItem03": {
"Category": 0,
"ItemID": 570,
"Num": 2,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem04": {
"Category": 0,
"ItemID": 173,
"Num": 3,
"Rate": 800,
"RareItemFlag": false
},
"RewardItem05": {
"Category": 0,
"ItemID": 87,
"Num": 1,
"Rate": 1200,
"RareItemFlag": false
},
"RewardItem06": {
"Category": 0,
"ItemID": 580,
"Num": 1,
"Rate": 200,
"RareItemFlag": false
},
"RewardItem07": {
"Category": 0,
"ItemID": 92,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem08": {
"Category": 0,
"ItemID": 1904,
"Num": 1,
"Rate": 250,
"RareItemFlag": true
},
"RewardItem09": {
"Category": 0,
"ItemID": 1249,
"Num": 1,
"Rate": 250,
"RareItemFlag": false
},
"RewardItem10": {
"Category": 0,
"ItemID": 1250,
"Num": 1,
"Rate": 250,
"RareItemFlag": false
},
"RewardItem11": {
"Category": 0,
"ItemID": 1248,
"Num": 1,
"Rate": 250,
"RareItemFlag": false
},
"RewardItem12": {
"Category": 0,
"ItemID": 1247,
"Num": 1,
"Rate": 250,
"RareItemFlag": false
},
"RewardItem13": {
"Category": 0,
"ItemID": 51,
"Num": 1,
"Rate": 300,
"RareItemFlag": false
},
"RewardItem14": {
"Category": 0,
"ItemID": 795,
"Num": 1,
"Rate": 400,
"RareItemFlag": true
},
"RewardItem15": {
"Category": 2,
"ItemID": 0,
"Num": 1,
"Rate": 400,
"RareItemFlag": false
},
"RewardItem16": {
"Category": 1,
"ItemID": 0,
"Num": 2,
"Rate": 550,
"RareItemFlag": false
},
"RewardItem17": {
"Category": 0,
"ItemID": 645,
"Num": 1,
"Rate": 200,
"RareItemFlag": true
},
"RewardItem18": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem19": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem20": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem21": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem22": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem23": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem24": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem25": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem26": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem27": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem28": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem29": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
}
},
{
"TableName": 8092679411244492160,
"RewardItem00": {
"Category": 0,
"ItemID": 1127,
"Num": 1,
"Rate": 1200,
"RareItemFlag": false
},
"RewardItem01": {
"Category": 0,
"ItemID": 1127,
"Num": 2,
"Rate": 800,
"RareItemFlag": false
},
"RewardItem02": {
"Category": 0,
"ItemID": 50,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem03": {
"Category": 0,
"ItemID": 566,
"Num": 2,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem04": {
"Category": 0,
"ItemID": 1128,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem05": {
"Category": 0,
"ItemID": 91,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem06": {
"Category": 0,
"ItemID": 583,
"Num": 1,
"Rate": 200,
"RareItemFlag": false
},
"RewardItem07": {
"Category": 0,
"ItemID": 92,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem08": {
"Category": 0,
"ItemID": 1908,
"Num": 1,
"Rate": 300,
"RareItemFlag": true
},
"RewardItem09": {
"Category": 0,
"ItemID": 1232,
"Num": 1,
"Rate": 300,
"RareItemFlag": false
},
"RewardItem10": {
"Category": 0,
"ItemID": 1231,
"Num": 1,
"Rate": 300,
"RareItemFlag": false
},
"RewardItem11": {
"Category": 0,
"ItemID": 1233,
"Num": 1,
"Rate": 300,
"RareItemFlag": false
},
"RewardItem12": {
"Category": 0,
"ItemID": 1234,
"Num": 1,
"Rate": 250,
"RareItemFlag": false
},
"RewardItem13": {
"Category": 0,
"ItemID": 51,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem14": {
"Category": 0,
"ItemID": 795,
"Num": 1,
"Rate": 400,
"RareItemFlag": true
},
"RewardItem15": {
"Category": 2,
"ItemID": 0,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem16": {
"Category": 1,
"ItemID": 0,
"Num": 2,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem17": {
"Category": 0,
"ItemID": 645,
"Num": 1,
"Rate": 200,
"RareItemFlag": true
},
"RewardItem18": {
"Category": 0,
"ItemID": 1606,
"Num": 1,
"Rate": 100,
"RareItemFlag": true
},
"RewardItem19": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem20": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem21": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem22": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem23": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem24": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem25": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem26": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem27": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem28": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem29": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
}
},
{
"TableName": 8092682709779376793,
"RewardItem00": {
"Category": 0,
"ItemID": 1127,
"Num": 1,
"Rate": 1200,
"RareItemFlag": false
},
"RewardItem01": {
"Category": 0,
"ItemID": 1127,
"Num": 2,
"Rate": 800,
"RareItemFlag": false
},
"RewardItem02": {
"Category": 0,
"ItemID": 50,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem03": {
"Category": 0,
"ItemID": 567,
"Num": 2,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem04": {
"Category": 0,
"ItemID": 1128,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem05": {
"Category": 0,
"ItemID": 89,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem06": {
"Category": 0,
"ItemID": 582,
"Num": 1,
"Rate": 200,
"RareItemFlag": false
},
"RewardItem07": {
"Category": 0,
"ItemID": 92,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem08": {
"Category": 0,
"ItemID": 1905,
"Num": 1,
"Rate": 300,
"RareItemFlag": true
},
"RewardItem09": {
"Category": 0,
"ItemID": 1235,
"Num": 1,
"Rate": 300,
"RareItemFlag": false
},
"RewardItem10": {
"Category": 0,
"ItemID": 1236,
"Num": 1,
"Rate": 300,
"RareItemFlag": false
},
"RewardItem11": {
"Category": 0,
"ItemID": 1237,
"Num": 1,
"Rate": 300,
"RareItemFlag": false
},
"RewardItem12": {
"Category": 0,
"ItemID": 1238,
"Num": 1,
"Rate": 300,
"RareItemFlag": false
},
"RewardItem13": {
"Category": 0,
"ItemID": 51,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem14": {
"Category": 0,
"ItemID": 795,
"Num": 1,
"Rate": 400,
"RareItemFlag": true
},
"RewardItem15": {
"Category": 2,
"ItemID": 0,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem16": {
"Category": 1,
"ItemID": 0,
"Num": 2,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem17": {
"Category": 0,
"ItemID": 645,
"Num": 1,
"Rate": 200,
"RareItemFlag": true
},
"RewardItem18": {
"Category": 0,
"ItemID": 1606,
"Num": 1,
"Rate": 100,
"RareItemFlag": true
},
"RewardItem19": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem20": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem21": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem22": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem23": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem24": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem25": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem26": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem27": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem28": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem29": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
}
},
{
"TableName": 8092681610267748582,
"RewardItem00": {
"Category": 0,
"ItemID": 1127,
"Num": 1,
"Rate": 1200,
"RareItemFlag": false
},
"RewardItem01": {
"Category": 0,
"ItemID": 1127,
"Num": 2,
"Rate": 800,
"RareItemFlag": false
},
"RewardItem02": {
"Category": 0,
"ItemID": 50,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem03": {
"Category": 0,
"ItemID": 565,
"Num": 2,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem04": {
"Category": 0,
"ItemID": 1128,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem05": {
"Category": 0,
"ItemID": 87,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem06": {
"Category": 0,
"ItemID": 580,
"Num": 1,
"Rate": 200,
"RareItemFlag": false
},
"RewardItem07": {
"Category": 0,
"ItemID": 92,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem08": {
"Category": 0,
"ItemID": 1908,
"Num": 1,
"Rate": 300,
"RareItemFlag": true
},
"RewardItem09": {
"Category": 0,
"ItemID": 1904,
"Num": 1,
"Rate": 300,
"RareItemFlag": true
},
"RewardItem10": {
"Category": 0,
"ItemID": 1905,
"Num": 1,
"Rate": 300,
"RareItemFlag": true
},
"RewardItem11": {
"Category": 0,
"ItemID": 1907,
"Num": 1,
"Rate": 300,
"RareItemFlag": true
},
"RewardItem12": {
"Category": 0,
"ItemID": 1906,
"Num": 1,
"Rate": 300,
"RareItemFlag": true
},
"RewardItem13": {
"Category": 0,
"ItemID": 51,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem14": {
"Category": 0,
"ItemID": 795,
"Num": 1,
"Rate": 400,
"RareItemFlag": true
},
"RewardItem15": {
"Category": 2,
"ItemID": 0,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem16": {
"Category": 1,
"ItemID": 0,
"Num": 2,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem17": {
"Category": 0,
"ItemID": 645,
"Num": 1,
"Rate": 200,
"RareItemFlag": true
},
"RewardItem18": {
"Category": 0,
"ItemID": 1606,
"Num": 1,
"Rate": 100,
"RareItemFlag": true
},
"RewardItem19": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem20": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem21": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem22": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem23": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem24": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem25": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem26": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem27": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem28": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem29": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
}
},
{
"TableName": 8092684908802633215,
"RewardItem00": {
"Category": 0,
"ItemID": 1127,
"Num": 1,
"Rate": 1200,
"RareItemFlag": false
},
"RewardItem01": {
"Category": 0,
"ItemID": 1127,
"Num": 2,
"Rate": 800,
"RareItemFlag": false
},
"RewardItem02": {
"Category": 0,
"ItemID": 50,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem03": {
"Category": 0,
"ItemID": 568,
"Num": 2,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem04": {
"Category": 0,
"ItemID": 1128,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem05": {
"Category": 0,
"ItemID": 91,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem06": {
"Category": 0,
"ItemID": 583,
"Num": 1,
"Rate": 200,
"RareItemFlag": false
},
"RewardItem07": {
"Category": 0,
"ItemID": 92,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem08": {
"Category": 0,
"ItemID": 1907,
"Num": 1,
"Rate": 300,
"RareItemFlag": true
},
"RewardItem09": {
"Category": 0,
"ItemID": 1239,
"Num": 1,
"Rate": 300,
"RareItemFlag": false
},
"RewardItem10": {
"Category": 0,
"ItemID": 1240,
"Num": 1,
"Rate": 300,
"RareItemFlag": false
},
"RewardItem11": {
"Category": 0,
"ItemID": 1241,
"Num": 1,
"Rate": 300,
"RareItemFlag": false
},
"RewardItem12": {
"Category": 0,
"ItemID": 1242,
"Num": 1,
"Rate": 300,
"RareItemFlag": false
},
"RewardItem13": {
"Category": 0,
"ItemID": 51,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem14": {
"Category": 0,
"ItemID": 795,
"Num": 1,
"Rate": 400,
"RareItemFlag": true
},
"RewardItem15": {
"Category": 2,
"ItemID": 0,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem16": {
"Category": 1,
"ItemID": 0,
"Num": 2,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem17": {
"Category": 0,
"ItemID": 645,
"Num": 1,
"Rate": 200,
"RareItemFlag": true
},
"RewardItem18": {
"Category": 0,
"ItemID": 1606,
"Num": 1,
"Rate": 100,
"RareItemFlag": true
},
"RewardItem19": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem20": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem21": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem22": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem23": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem24": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem25": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem26": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem27": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem28": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem29": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
}
},
{
"TableName": 8092683809291005004,
"RewardItem00": {
"Category": 0,
"ItemID": 1127,
"Num": 1,
"Rate": 1200,
"RareItemFlag": false
},
"RewardItem01": {
"Category": 0,
"ItemID": 1127,
"Num": 2,
"Rate": 800,
"RareItemFlag": false
},
"RewardItem02": {
"Category": 0,
"ItemID": 50,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem03": {
"Category": 0,
"ItemID": 569,
"Num": 2,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem04": {
"Category": 0,
"ItemID": 1128,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem05": {
"Category": 0,
"ItemID": 89,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem06": {
"Category": 0,
"ItemID": 582,
"Num": 1,
"Rate": 200,
"RareItemFlag": false
},
"RewardItem07": {
"Category": 0,
"ItemID": 92,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem08": {
"Category": 0,
"ItemID": 1906,
"Num": 1,
"Rate": 300,
"RareItemFlag": true
},
"RewardItem09": {
"Category": 0,
"ItemID": 1243,
"Num": 1,
"Rate": 300,
"RareItemFlag": false
},
"RewardItem10": {
"Category": 0,
"ItemID": 1244,
"Num": 1,
"Rate": 300,
"RareItemFlag": false
},
"RewardItem11": {
"Category": 0,
"ItemID": 1245,
"Num": 1,
"Rate": 300,
"RareItemFlag": false
},
"RewardItem12": {
"Category": 0,
"ItemID": 1246,
"Num": 1,
"Rate": 300,
"RareItemFlag": false
},
"RewardItem13": {
"Category": 0,
"ItemID": 51,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem14": {
"Category": 0,
"ItemID": 795,
"Num": 1,
"Rate": 400,
"RareItemFlag": true
},
"RewardItem15": {
"Category": 2,
"ItemID": 0,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem16": {
"Category": 1,
"ItemID": 0,
"Num": 2,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem17": {
"Category": 0,
"ItemID": 645,
"Num": 1,
"Rate": 200,
"RareItemFlag": true
},
"RewardItem18": {
"Category": 0,
"ItemID": 1606,
"Num": 1,
"Rate": 100,
"RareItemFlag": true
},
"RewardItem19": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem20": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem21": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem22": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem23": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem24": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem25": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem26": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem27": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem28": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem29": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
}
},
{
"TableName": 8092687107825889637,
"RewardItem00": {
"Category": 0,
"ItemID": 1127,
"Num": 1,
"Rate": 1200,
"RareItemFlag": false
},
"RewardItem01": {
"Category": 0,
"ItemID": 1127,
"Num": 2,
"Rate": 800,
"RareItemFlag": false
},
"RewardItem02": {
"Category": 0,
"ItemID": 50,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem03": {
"Category": 0,
"ItemID": 570,
"Num": 2,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem04": {
"Category": 0,
"ItemID": 1128,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem05": {
"Category": 0,
"ItemID": 87,
"Num": 1,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem06": {
"Category": 0,
"ItemID": 580,
"Num": 1,
"Rate": 200,
"RareItemFlag": false
},
"RewardItem07": {
"Category": 0,
"ItemID": 92,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem08": {
"Category": 0,
"ItemID": 1904,
"Num": 1,
"Rate": 300,
"RareItemFlag": true
},
"RewardItem09": {
"Category": 0,
"ItemID": 1249,
"Num": 1,
"Rate": 300,
"RareItemFlag": false
},
"RewardItem10": {
"Category": 0,
"ItemID": 1250,
"Num": 1,
"Rate": 300,
"RareItemFlag": false
},
"RewardItem11": {
"Category": 0,
"ItemID": 1248,
"Num": 1,
"Rate": 300,
"RareItemFlag": false
},
"RewardItem12": {
"Category": 0,
"ItemID": 1247,
"Num": 1,
"Rate": 300,
"RareItemFlag": false
},
"RewardItem13": {
"Category": 0,
"ItemID": 51,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem14": {
"Category": 0,
"ItemID": 795,
"Num": 1,
"Rate": 400,
"RareItemFlag": true
},
"RewardItem15": {
"Category": 2,
"ItemID": 0,
"Num": 1,
"Rate": 500,
"RareItemFlag": false
},
"RewardItem16": {
"Category": 1,
"ItemID": 0,
"Num": 2,
"Rate": 1000,
"RareItemFlag": false
},
"RewardItem17": {
"Category": 0,
"ItemID": 645,
"Num": 1,
"Rate": 200,
"RareItemFlag": true
},
"RewardItem18": {
"Category": 0,
"ItemID": 1606,
"Num": 1,
"Rate": 100,
"RareItemFlag": true
},
"RewardItem19": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem20": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem21": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem22": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem23": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem24": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem25": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem26": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem27": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem28": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
},
"RewardItem29": {
"Category": 0,
"ItemID": 0,
"Num": 0,
"Rate": 0,
"RareItemFlag": false
}
}
]
================================================
FILE: RaidCrawler.Core/Resources/Blueberry/den_locations_blueberry.json
================================================
{
"1-1-1": [ 1419.0885, 148.04196, -392.419 ],
"1-1-2": [ 1423.5548, 148.04231, -424.686 ],
"1-1-3": [ 1410.7599, 148.04143, -405.8 ],
"1-1-4": [ 1436.2668, 148.04524, -363.392 ],
"1-1-5": [ 1474.9999, 148.89914, -374.137 ],
"1-1-6": [ 1520.5872, 149.44374, -411.826 ],
"1-1-7": [ 1501.5801, 149.63086, -367.817 ],
"1-1-8": [ 1557.1927, 150.11078, -360.717 ],
"1-1-9": [ 1551.4225, 150.02913, -425.722 ],
"1-1-10": [ 1519.4225, 148.06494, -451.194 ],
"1-2-1": [ 1252.0518, 207.55095, -221.877 ],
"1-2-2": [ 1313.0358, 204.323, -241.057 ],
"1-2-3": [ 1290.7479, 203.124, -301.168 ],
"1-2-4": [ 1201.3002, 204.66898, -183.835 ],
"1-2-5": [ 1097.1854, 203.698, -188.816 ],
"1-2-6": [ 1065.7256, 201.902, -191.272 ],
"1-2-7": [ 1040.294, 201.90895, -187.294 ],
"1-2-8": [ 1148.3553, 209.452, -199.242 ],
"1-2-9": [ 1226.7849, 214.984, -265.716 ],
"1-2-10": [ 1170.309, 205.28, -254.834 ],
"1-3-1": [ 1071.7174, 158.448, -537.391 ],
"1-3-2": [ 1068.6727, 157.11052, -559.047 ],
"1-3-3": [ 1045.4989, 157.17328, -587.088 ],
"1-3-4": [ 1042.2764, 148.613, -650.751 ],
"1-3-5": [ 1081.3931, 148.90382, -653.637 ],
"1-3-6": [ 1097.4799, 151.877, -609.471 ],
"1-3-7": [ 1117.448, 155.383, -556.081 ],
"1-3-8": [ 1129.0808, 152.026, -597.758 ],
"1-3-9": [ 1142.7708, 148.772, -648.766 ],
"1-3-10": [ 1170.9624, 151.894, -600.95 ],
"2-1-1": [ 1016.33624, 177.33165, -1203.594 ],
"2-1-2": [ 1017.16254, 176.99893, -1232.061 ],
"2-1-3": [ 1015.6817, 176.396, -1283.585 ],
"2-1-4": [ 1019.1868, 176.9319, -1366.998 ],
"2-1-5": [ 1067.5999, 177.03183, -1307.764 ],
"2-1-6": [ 1080.762, 176.45879, -1299.979 ],
"2-1-7": [ 1084.4038, 175.94942, -1292.7058 ],
"2-1-8": [ 1080.5182, 177.6765, -1212.065 ],
"2-1-9": [ 1071.9427, 177.73576, -1205.551 ],
"2-1-10": [ 1062.274, 177.99489, -1203.383 ],
"2-2-1": [ 1279.485, 164.97044, -1339.863 ],
"2-2-2": [ 1291.714, 164.386, -1329.968 ],
"2-2-3": [ 1310.1156, 159.7946, -1352.672 ],
"2-2-4": [ 1337.0566, 160.20302, -1343.9703 ],
"2-2-5": [ 1423.9888, 163.9035, -1330.431 ],
"2-2-6": [ 1325.1428, 199.81642, -1261.2911 ],
"2-2-7": [ 1372.0631, 202.06894, -1274.734 ],
"2-2-8": [ 1416.4108, 200.187, -1259.088 ],
"2-2-9": [ 1349.3671, 198.255, -1218.78 ],
"2-2-10": [ 1405.794, 199.52132, -1219.589 ],
"2-3-1": [ 1327.8322, 259.53726, -1075.392 ],
"2-3-2": [ 1307.8423, 275.27484, -1067.1046 ],
"2-3-3": [ 1290.0579, 275.1577, -1051.824 ],
"2-3-4": [ 1277.651, 275.18298, -1076.735 ],
"2-3-5": [ 1246.5325, 265.143, -1065.547 ],
"2-3-6": [ 1123.7737, 286.91684, -1069.353 ],
"2-3-7": [ 1096.5541, 286.84732, -1093.816 ],
"2-3-8": [ 1094.2689, 286.9964, -1141.195 ],
"2-3-9": [ 1117.3457, 268.95337, -1171.502 ],
"2-3-10": [ 1156.5371, 269.36856, -1174.2267 ],
"3-1-1": [ 828.9771, 149.972, -784.436 ],
"3-1-2": [ 831.9324, 151.004, -756.284 ],
"3-1-3": [ 884.82874, 149.97223, -750.833 ],
"3-1-4": [ 898.41235, 158.10477, -686.125 ],
"3-1-5": [ 902.8407, 163.03687, -620.0809 ],
"3-1-6": [ 981.9706, 188.56688, -750.6608 ],
"3-1-7": [ 932.3204, 142.118, -898.17 ],
"3-1-8": [ 981.9546, 188.48013, -811.596 ],
"3-1-9": [ 890.2766, 150.784, -985.77 ],
"3-1-10": [ 912.5114, 150.193, -988.018 ],
"3-2-1": [ 878.6087, 155.1415, -576.183 ],
"3-2-2": [ 951.52997, 150.0134, -546.3993 ],
"3-2-3": [ 903.09827, 149.94165, -544.509 ],
"3-2-4": [ 866.2156, 150.29373, -523.223 ],
"3-2-5": [ 942.8039, 169.0707, -513.136 ],
"3-2-6": [ 934.25195, 149.98552, -485.86 ],
"3-2-7": [ 922.212, 151.06136, -429.567 ],
"3-2-8": [ 882.4181, 157.063, -444.072 ],
"3-2-9": [ 850.69867, 165.334, -445.865 ],
"3-2-10": [ 818.0774, 165.782, -474.72 ],
"3-3-1": [ 356.08408, 301.2941, -877.756 ],
"3-3-2": [ 348.9274, 298.0795, -829.235 ],
"3-3-3": [ 517.80237, 266.99832, -918.032 ],
"3-3-4": [ 469.88144, 267.063, -869.483 ],
"3-3-5": [ 522.4888, 238.50424, -805.429 ],
"3-3-6": [ 551.46576, 255.54094, -785.36536 ],
"3-3-7": [ 607.04755, 260.4361, -740.397 ],
"3-3-8": [ 271.7786, 300.326, -833.105 ],
"3-3-9": [ 226.70793, 300.56793, -867.474 ],
"3-3-10": [ 228.09012, 300.0921, -835.308 ],
"4-1-1": [ 752.41907, 230.08, -1106.215 ],
"4-1-2": [ 772.03986, 228.604, -1146.407 ],
"4-1-3": [ 723.7713, 233.19969, -1101.199 ],
"4-1-4": [ 734.70514, 231.57997, -1165.252 ],
"4-1-5": [ 664.11035, 248.67715, -1136.347 ],
"4-1-6": [ 716.94745, 238.61479, -1145.314 ],
"4-1-7": [ 826.9544, 202.50842, -1119.797 ],
"4-1-8": [ 856.4173, 206.696, -1174.174 ],
"4-1-9": [ 856.0273, 206.48924, -1200.9009 ],
"4-1-10": [ 803.82336, 205.7457, -1216.426 ],
"4-2-1": [ 435.86853, 325.98355, -1231.285 ],
"4-2-2": [ 458.79648, 326.27008, -1219.4116 ],
"4-2-3": [ 586.4578, 286.57764, -1056.789 ],
"4-2-4": [ 563.712, 289.362, -1070.082 ],
"4-2-5": [ 579.3643, 289.27164, -1128.282 ],
"4-2-6": [ 536.32513, 278.26904, -1020.43 ],
"4-2-7": [ 513.385, 281.471, -1031.214 ],
"4-2-8": [ 573.46356, 288.49515, -1102.983 ],
"4-2-9": [ 453.9, 337.06, -1202.554 ],
"4-2-10": [ 428.5264, 322.2193, -1267.844 ],
"4-3-1": [ 922.1982, 189.046, -1274.857 ],
"4-3-2": [ 902.9876, 192.69, -1233.6 ],
"4-3-3": [ 951.04846, 175.43738, -1232.478 ],
"4-3-4": [ 952.11365, 179.21931, -1288.004 ],
"4-3-5": [ 943.5256, 183.9302, -1306.7241 ],
"4-3-6": [ 936.4061, 186.04524, -1335.4731 ],
"4-3-7": [ 868.5423, 188.25282, -1316.318 ],
"4-3-8": [ 949.6805, 159.84758, -1211.751 ],
"4-3-9": [ 952.7789, 150.00853, -1122.505 ],
"4-3-10": [ 852.7681, 151.34383, -1026.714 ],
"5-1-1": [ 1488.781, 151.268, -605.567 ],
"5-1-2": [ 1496.3743, 154.41519, -643.133 ],
"5-1-3": [ 1494.8785, 153.89922, -707.701 ],
"5-1-4": [ 1465.9845, 149.88274, -765.671 ],
"5-1-5": [ 1560.1207, 147.83495, -632.298 ],
"5-1-6": [ 1555.1918, 151.00336, -686.377 ],
"5-1-7": [ 1528.208, 145.2794, -755.519 ],
"5-1-8": [ 1581.8339, 142.91824, -738.862 ],
"5-1-9": [ 1626.1547, 144.838, -711.239 ],
"5-1-10": [ 1613.0289, 148.751, -600.219 ],
"5-2-1": [ 1818.1382, 154.51, -921.299 ],
"5-2-2": [ 1806.861, 147.04924, -879.711 ],
"5-2-3": [ 1754.8514, 146.68506, -822.536 ],
"5-2-4": [ 1712.112, 153.27354, -979.225 ],
"5-2-5": [ 1658.7676, 144.423, -955.149 ],
"5-2-6": [ 1599.0187, 141.47139, -949.046 ],
"5-2-7": [ 1522.9104, 142.667, -964.225 ],
"5-2-8": [ 1495.181, 138.68, -827.96 ],
"5-2-9": [ 1583.8597, 138.77013, -853.764 ],
"5-2-10": [ 1668.9205, 140.844, -857.105 ],
"5-3-1": [ 1171.5894, 171.371, -913.42 ],
"5-3-2": [ 1226.1235, 163.196, -949.511 ],
"5-3-3": [ 1266.9213, 160.249, -964.4659 ],
"5-3-4": [ 1355.5631, 157.00957, -976.2744 ],
"5-3-5": [ 1320.5306, 158.74039, -891.13043 ],
"5-3-6": [ 1110.9374, 183.92676, -842.42413 ],
"5-3-7": [ 1124.6, 182.922, -797.35 ],
"5-3-8": [ 1022.9764, 188.03319, -824.599 ],
"5-3-9": [ 1010.551, 189.744, -792.887 ],
"5-3-10": [ 1060.2122, 187.44077, -755.21924 ],
"6-1-1": [ 1640.813, 177.504, -1168.25 ],
"6-1-2": [ 1566.0693, 169.84149, -1232.911 ],
"6-1-3": [ 1553.0303, 167.162, -1189.424 ],
"6-1-4": [ 1700.7095, 175.17484, -1270.924 ],
"6-1-5": [ 1652.9579, 171.59784, -1301.27 ],
"6-1-6": [ 1712.0559, 176.58649, -1373.716 ],
"6-1-7": [ 1676.6033, 178.59967, -1447.577 ],
"6-1-8": [ 1565.9803, 168.40674, -1401.225 ],
"6-1-9": [ 1626.0497, 176.55571, -1412.6875 ],
"6-1-10": [ 1658.0721, 175.1234, -1373.4296 ],
"6-2-1": [ 1515.5121, 152.71, -1136.583 ],
"6-2-2": [ 1497.4498, 150.74547, -1140.476 ],
"6-2-3": [ 1498.6233, 153.0068, -1123.891 ],
"6-2-4": [ 1514.0331, 150.34961, -1013.60394 ],
"6-2-5": [ 1535.1559, 151.73198, -1012.4256 ],
"6-2-6": [ 1571.1969, 150.95287, -1029.7358 ],
"6-2-7": [ 1590.8354, 151.5817, -1014.967 ],
"6-2-8": [ 1649.1296, 152.2982, -1017.839 ],
"6-2-9": [ 1730.375, 149.97003, -1139.147 ],
"6-2-10": [ 1839.7775, 149.97003, -1075.984 ],
"6-3-1": [ 1521.7024, 158.815, -1514.101 ],
"6-3-2": [ 1445.68, 158.98189, -1432.262 ],
"6-3-3": [ 1533.4103, 158.75304, -1573.623 ],
"6-3-4": [ 1501.8605, 162.70634, -1640.544 ],
"6-3-5": [ 1466.3531, 166.29079, -1603.804 ],
"6-3-6": [ 1411.2712, 170.78725, -1617.362 ],
"6-3-7": [ 1290.3329, 150.95445, -1472.374 ],
"6-3-8": [ 1224.2115, 151.07108, -1554.768 ],
"6-3-9": [ 1126.4038, 152.242, -1638.164 ],
"6-3-10": [ 1111.8031, 163.462, -1571.71 ],
"7-1-1": [ 239.6862, 258.06702, -622.386 ],
"7-1-2": [ 245.34721, 257.8467, -574.1572 ],
"7-1-3": [ 322.7471, 238.47914, -593.8611 ],
"7-1-4": [ 312.4859, 238.48666, -617.1511 ],
"7-1-5": [ 333.91785, 238.46484, -664.4716 ],
"7-1-6": [ 303.20178, 241.53632, -701.8762 ],
"7-1-7": [ 195.6599, 261.94934, -725.6698 ],
"7-1-8": [ 220.44046, 261.41174, -667.9975 ],
"7-1-9": [ 206.73293, 261.53763, -678.0357 ],
"7-1-10": [ 350.08594, 238.60786, -761.537 ],
"7-2-1": [ 585.0683, 238.97029, -482.1728 ],
"7-2-2": [ 624.2185, 238.98775, -509.208 ],
"7-2-3": [ 514.82117, 257.4524, -549.074 ],
"7-2-4": [ 463.77765, 256.69345, -487.876 ],
"7-2-5": [ 368.81537, 151.0362, -485.055 ],
"7-2-6": [ 374.50946, 150.368, -448.315 ],
"7-2-7": [ 509.8159, 151.84164, -301.394 ],
"7-2-8": [ 424.72958, 149.96648, -405.124 ],
"7-2-9": [ 684.9533, 223.99881, -509.931 ],
"7-2-10": [ 677.82477, 223.95534, -363.269 ],
"7-3-1": [ 844.1056, 173.52843, -239.12384 ],
"7-3-2": [ 791.419, 176.2921, -183.033 ],
"7-3-3": [ 897.9364, 194.5656, -253.06 ],
"7-3-4": [ 957.76135, 207.36443, -164.149 ],
"7-3-5": [ 913.6737, 161.4973, -399.677 ],
"7-3-6": [ 901.59863, 227.77214, -357.697 ],
"7-3-7": [ 745.5921, 160.97404, -269.934 ],
"7-3-8": [ 745.57275, 150.27386, -344.184 ],
"7-3-9": [ 821.0334, 161.97406, -268.31 ],
"7-3-10": [ 943.302, 193.71007, -282.376 ],
"8-1-1": [ 538.42633, 167.8033, -1378.938 ],
"8-1-2": [ 612.51685, 150.4303, -1382.6678 ],
"8-1-3": [ 652.19775, 153.03133, -1330.6787 ],
"8-1-4": [ 685.297, 149.99834, -1379.689 ],
"8-1-5": [ 688.0585, 151.9933, -1279.951 ],
"8-1-6": [ 657.89044, 150.05792, -1242.422 ],
"8-1-7": [ 731.4747, 149.98692, -1262.316 ],
"8-1-8": [ 776.7358, 150.51617, -1360.141 ],
"8-1-9": [ 792.3379, 150.00835, -1433.337 ],
"8-1-10": [ 842.3579, 149.98993, -1381.0255 ],
"8-2-1": [ 798.84247, 157.74162, -1752.454 ],
"8-2-2": [ 793.8582, 157.3892, -1740.4077 ],
"8-2-3": [ 779.18176, 156.68509, -1760.1102 ],
"8-2-4": [ 732.7907, 162.955, -1732.335 ],
"8-2-5": [ 708.20764, 164.59695, -1729.043 ],
"8-2-6": [ 779.96204, 150.024, -1675.608 ],
"8-2-7": [ 900.15857, 150.14003, -1844.203 ],
"8-2-8": [ 944.8461, 150.1558, -1853.898 ],
"8-2-9": [ 962.88, 152.25775, -1837.121 ],
"8-2-10": [ 929.7773, 153.294, -1799.902 ],
"8-3-1": [ 467.30118, 151.15369, -1578.599 ],
"8-3-2": [ 451.2206, 151.45712, -1546.153 ],
"8-3-3": [ 481.1984, 150.89993, -1534.525 ],
"8-3-4": [ 499.5463, 151.02528, -1549.534 ],
"8-3-5": [ 514.4543, 153.36147, -1473.543 ],
"8-3-6": [ 547.09705, 151.63441, -1480.276 ],
"8-3-7": [ 553.9428, 149.59, -1551.925 ],
"8-3-8": [ 530.1102, 149.60109, -1613.781 ],
"8-3-9": [ 470.6657, 170.76, -1597.273 ],
"8-3-10": [ 563.5199, 157.24396, -1660.241 ]
}
================================================
FILE: RaidCrawler.Core/Resources/Kitakami/den_locations_kitakami.json
================================================
{
"1-1-1": [ 846.22974, 114.42846, -373.968 ],
"1-1-2": [ 798.17694, 102.75056, -313.234 ],
"1-1-3": [ 855.7787, 106.48179, -311.674 ],
"1-1-4": [ 955.532, 111.424126, -366.255 ],
"1-1-5": [ 913.2011, 112.501, -356.487 ],
"1-1-6": [ 960.9623, 101.56054, -285.189 ],
"1-1-7": [ 805.8575, 103.86321, -354.653 ],
"1-1-8": [ 846.04346, 113.85453, -287.311 ],
"1-1-9": [ 1105.3696, 106.750145, -323.601 ],
"1-1-10": [ 1148.1714, 100.16275, -332.825 ],
"1-2-1": [ 1179.6296, 101.030785, -382.894 ],
"1-2-2": [ 1268.2388, 108.53412, -330.397 ],
"1-2-3": [ 1246.5443, 104.10581, -384.231 ],
"1-2-4": [ 1191.881, 102.28596, -402.861 ],
"1-2-5": [ 1240.0948, 101.69444, -410.854 ],
"1-2-6": [ 1290.227, 104.82199, -330.201 ],
"1-2-7": [ 1365.0533, 101.67295, -338.251 ],
"1-2-8": [ 1462.4418, 101.502815, -313.63 ],
"1-2-9": [ 1476.6232, 101.814926, -305.544 ],
"1-2-10": [ 1205.9265, 108.37691, -360.001 ],
"2-1-1": [ 1030.3679, 150.07591, -623.21606 ],
"2-1-2": [ 1018.43555, 140.467, -602.084 ],
"2-1-3": [ 998.1105, 137.87343, -537.874 ],
"2-1-4": [ 968.794, 145.48723, -532.609 ],
"2-1-5": [ 980.14075, 149.76472, -572.076 ],
"2-1-6": [ 927.0305, 154.8074, -525.698 ],
"2-1-7": [ 868.3758, 161.64398, -540.436 ],
"2-1-8": [ 826.0617, 169.97195, -622.549 ],
"2-1-9": [ 791.4233, 169.97707, -605.06 ],
"2-1-10": [ 808.4578, 167.98035, -561.419 ],
"2-1-11": [ 777.91656, 165.38742, -513.138 ],
"2-1-12": [ 755.0171, 152.91103, -477.354 ],
"2-1-13": [ 819.39417, 160.01215, -449.342 ],
"2-1-14": [ 896.1016, 145.6066, -476.972 ],
"2-1-15": [ 935.18195, 133.67989, -402.373 ],
"2-1-16": [ 889.71594, 146.00702, -415.899 ],
"2-1-17": [ 955.3469, 129.68285, -466.468 ],
"2-1-18": [ 1013.7858, 120.823044, -437.832 ],
"2-1-19": [ 1048.2728, 113.41807, -454.329 ],
"2-1-20": [ 1041.8424, 115.785736, -399.116 ],
"3-1-1": [ 1166.2239, 148.64473, -621.404 ],
"3-1-2": [ 1172.457, 162.74866, -660.805 ],
"3-1-3": [ 1223.5143, 136.7581, -586.718 ],
"3-1-4": [ 1368.7694, 109.872635, -455.703 ],
"3-1-5": [ 1239.3713, 109.246826, -521.259 ],
"3-1-6": [ 1317.0145, 121.572, -521.628 ],
"3-1-7": [ 1250.6053, 175.478, -630.383 ],
"3-1-8": [ 1252.2467, 136.92429, -549.994 ],
"3-1-9": [ 1229.5754, 178.855, -665.744 ],
"3-1-10": [ 1304.6097, 148.9432, -622.814 ],
"3-1-11": [ 1280.2036, 158.64078, -672.833 ],
"3-1-12": [ 1349.3269, 162.84607, -664.68 ],
"3-1-13": [ 1377.0212, 137.46648, -587.322 ],
"3-1-14": [ 1422.3616, 138.84416, -532.106 ],
"3-1-15": [ 1335.6522, 118.480675, -740.591 ],
"3-1-16": [ 1355.4738, 118.01001, -742.209 ],
"3-1-17": [ 1398.3975, 127.01507, -769.613 ],
"3-2-1": [ 1268.6038, 107.83134, -457.391 ],
"3-2-2": [ 1284.0038, 107.09443, -414.334 ],
"3-2-3": [ 1317.0428, 106.87741, -425.788 ],
"3-2-4": [ 1312.3889, 106.8793, -453.98 ],
"3-2-5": [ 1338.2208, 106.874664, -397.197 ],
"3-2-6": [ 1387.3527, 106.87425, -423.341 ],
"3-2-7": [ 1446.9364, 107.79708, -401.536 ],
"3-2-8": [ 1438.5587, 122.18235, -467.95 ],
"3-2-9": [ 1423.8807, 124.54978, -481.438 ],
"3-2-10": [ 1483.9543, 115.96129, -446.092 ],
"3-2-11": [ 1547.9482, 113.54719, -485.21 ],
"3-2-12": [ 1533.3644, 135.355, -523.593 ],
"3-2-13": [ 1489.3297, 139.802, -524.129 ],
"3-2-14": [ 1580.447, 110.89938, -495.994 ],
"3-2-15": [ 1403.1288, 163.38531, -672.494 ],
"3-3-1": [ 1637.1284, 111.57947, -586.188 ],
"3-3-2": [ 1599.1449, 111.20168, -604.992 ],
"3-3-3": [ 1579.2415, 109.625404, -626.118 ],
"3-3-4": [ 1608.6857, 112.41428, -624.816 ],
"3-3-5": [ 1636.4196, 111.6, -603.747 ],
"3-3-6": [ 1640.0033, 114.10015, -618.526 ],
"3-3-7": [ 1631.7852, 113.83738, -642.011 ],
"3-3-8": [ 1627.748, 113.97639, -681.149 ],
"3-3-9": [ 1564.9512, 109.265236, -667.666 ],
"3-3-10": [ 1598.6761, 113.272575, -655.203 ],
"3-3-11": [ 1567.2847, 109.39358, -683.849 ],
"3-3-12": [ 1516.51, 110.807556, -754.435 ],
"3-3-13": [ 1543.0148, 107.68, -677.908 ],
"3-3-14": [ 1529.3859, 110.63602, -766.657 ],
"3-3-15": [ 1528.384, 107.65499, -680.014 ],
"3-3-16": [ 1557.0208, 109.42456, -711.285 ],
"3-3-17": [ 1579.5963, 109.45525, -727.466 ],
"3-3-18": [ 1558.6086, 110.810776, -750.397 ],
"3-3-19": [ 1581.0404, 109.75419, -765.358 ],
"3-3-20": [ 1577.7737, 108.51887, -786.112 ],
"3-3-21": [ 1567.3444, 109.25985, -773.443 ],
"3-4-1": [ 1557.9932, 148.49863, -573.779 ],
"3-4-2": [ 1542.5685, 150.396, -602.9 ],
"3-4-3": [ 1510.425, 159.1086, -627.165 ],
"3-4-4": [ 1504.174, 156.82823, -610.742 ],
"3-4-5": [ 1518.4513, 152.58159, -600.178 ],
"4-1-1": [ 1326.0043, 191.05098, -789.476 ],
"4-1-2": [ 1313.2537, 187.21994, -800.739 ],
"4-1-3": [ 1258.6984, 232.99533, -798.872 ],
"4-1-4": [ 1398.1449, 259.9759, -948.958 ],
"4-1-5": [ 1254.5764, 231.94565, -867.306 ],
"4-1-6": [ 1263.686, 231.26201, -887.833 ],
"4-1-7": [ 1225.5981, 239.51578, -835.693 ],
"4-1-8": [ 1430.4899, 221.46411, -893.678 ],
"4-2-1": [ 1186.2485, 255.95497, -714.115 ],
"4-2-2": [ 980.532, 324.29407, -790.475 ],
"4-2-3": [ 891.632, 290.7475, -726.974 ],
"4-2-4": [ 870.5291, 292.76895, -759.284 ],
"4-2-5": [ 847.737, 294.261, -760.171 ],
"4-2-6": [ 798.2488, 295.3543, -775.654 ],
"5-1-1": [ 765.95526, 297.598, -775.314 ],
"5-1-2": [ 738.2669, 304.09116, -824.64 ],
"5-1-3": [ 651.2396, 336.581, -990.302 ],
"5-1-4": [ 722.3125, 301.796, -788.843 ],
"5-1-5": [ 619.52386, 342.035, -1032.077 ],
"5-1-6": [ 730.72144, 304.3952, -826.80194 ],
"5-1-7": [ 728.76013, 313.474, -844.992 ],
"5-1-8": [ 661.1661, 343.0235, -1013.18 ],
"5-1-9": [ 689.47614, 308.95673, -823.834 ],
"5-1-10": [ 722.8817, 314.38535, -862.055 ],
"5-1-11": [ 670.3366, 352.486, -1102.322 ],
"5-1-12": [ 699.7691, 315.1623, -873.444 ],
"5-1-13": [ 592.914, 346.45, -1069.327 ],
"5-1-14": [ 655.0146, 311.145, -837.386 ],
"5-1-15": [ 661.17773, 315.225, -856.022 ],
"5-1-16": [ 678.3368, 316.86, -873.519 ],
"5-1-17": [ 685.0733, 324.221, -897.534 ],
"5-1-18": [ 659.46326, 322.611, -902.889 ],
"5-1-19": [ 654.4056, 326.352, -933.8 ],
"5-1-20": [ 612.98004, 331.624, -946.922 ],
"5-2-1": [ 641.0928, 361.6279, -1119.441 ],
"5-2-2": [ 683.27325, 364.33542, -1152.442 ],
"5-2-3": [ 652.9494, 361.70752, -1186.411 ],
"5-2-4": [ 621.7926, 368.18106, -1207.534 ],
"5-2-5": [ 647.7449, 372.94666, -1244.846 ],
"5-2-6": [ 684.0408, 375.7238, -1233.234 ],
"5-2-7": [ 729.71515, 366.01486, -1211.88 ],
"5-2-8": [ 721.07025, 358.82217, -1128.209 ],
"5-2-9": [ 709.3635, 360.61716, -1157.045 ],
"5-2-10": [ 736.06866, 363.856, -1164.882 ],
"5-2-11": [ 750.29114, 371.1398, -1167.331 ],
"5-2-12": [ 744.8277, 365.95038, -1189.159 ],
"5-2-13": [ 741.97107, 375.57123, -1123.141 ],
"5-2-14": [ 776.38226, 375.52618, -1139.789 ],
"5-2-15": [ 796.93665, 378.48047, -1183.039 ],
"5-2-16": [ 775.4524, 373.86682, -1211.284 ],
"5-2-17": [ 750.82416, 375.2538, -1231.052 ],
"5-2-18": [ 782.8879, 385.35385, -1250.207 ],
"5-2-19": [ 815.03577, 387.32285, -1242.429 ],
"5-2-20": [ 828.946, 387.173, -1217.107 ],
"5-2-21": [ 846.39886, 391.44836, -1216.813 ],
"5-2-22": [ 843.39026, 390.8575, -1241.585 ],
"5-2-23": [ 865.3236, 399.19443, -1275.509 ],
"5-2-24": [ 877.3149, 396.91818, -1240.418 ],
"5-2-25": [ 902.2001, 401.30612, -1253.411 ],
"5-2-26": [ 898.1883, 401.94745, -1285.14 ],
"5-3-1": [ 997.987, 396.41617, -1240.59 ],
"5-3-2": [ 1055.2811, 394.511, -1218.197 ],
"5-3-3": [ 1057.0312, 396.1446, -1267.314 ],
"5-3-4": [ 1082.6277, 394.909, -1298.119 ],
"5-3-5": [ 1126.372, 394.87918, -1257.996 ],
"5-3-6": [ 1110.8551, 393.87692, -1228.992 ],
"5-3-7": [ 1146.7217, 395.55356, -1214.02 ],
"5-3-8": [ 1070.4153, 396.07645, -1181.78 ],
"5-3-9": [ 1106.8676, 399.80942, -1180.257 ],
"5-3-10": [ 1248.1694, 319.829, -1079.226 ],
"5-3-11": [ 957.5488, 401.17807, -1260.109 ],
"5-3-12": [ 985.62994, 399.9053, -1289.229 ],
"5-3-13": [ 1017.34155, 403.57, -1293.179 ],
"5-3-14": [ 926.9026, 404.90158, -1288.843 ],
"6-1-1": [ 864.757, 456.2357, -1008.809 ],
"6-1-2": [ 873.2546, 448.95782, -1042.361 ],
"6-1-3": [ 921.7229, 448.78796, -1064.561 ],
"6-1-4": [ 898.4309, 451.01025, -1043.246 ],
"6-1-5": [ 927.648, 450.26147, -946.941 ],
"6-1-6": [ 911.9989, 450.29236, -973.686 ],
"6-2-1": [ 976.18933, 453.37, -922.029 ],
"6-2-2": [ 991.1592, 451.4779, -954.83 ],
"6-2-3": [ 1036.5323, 449.75388, -957.164 ],
"6-2-4": [ 1029.8392, 449.92612, -1008.871 ],
"6-2-5": [ 1047.2432, 454.553, -1030.271 ],
"7-1-1": [ 707.7987, 139.10295, -390.592 ],
"7-1-2": [ 707.1355, 136.63344, -439.529 ],
"7-1-3": [ 667.399, 134.95134, -365.918 ],
"7-1-4": [ 661.81665, 135.03069, -425.384 ],
"7-1-5": [ 633.237, 132.92201, -408.488 ],
"7-1-6": [ 563.8754, 134.02281, -414.988 ],
"7-1-7": [ 644.5717, 140.54465, -543.403 ],
"7-1-8": [ 677.98395, 136.95573, -402.74 ],
"7-1-9": [ 538.0679, 161.875, -577.022 ],
"7-1-10": [ 596.0277, 153.03377, -656.538 ],
"7-1-11": [ 516.3441, 147.59729, -497.962 ],
"7-1-12": [ 410.9617, 138.84058, -545.376 ],
"7-1-13": [ 466.82968, 145.364, -392.768 ],
"7-1-14": [ 502.85052, 168.20988, -614.72 ],
"7-1-15": [ 453.0873, 153.91959, -669.536 ],
"7-1-16": [ 528.23987, 158.44182, -687.773 ],
"7-1-17": [ 525.1523, 152.47316, -524.9303 ],
"7-1-18": [ 554.7286, 154.89615, -485.269 ],
"7-1-19": [ 621.6161, 151.8455, -499.451 ],
"7-1-20": [ 631.5874, 142.45407, -437.723 ],
"7-2-1": [ 369.8985, 158.82059, -911.846 ],
"7-2-2": [ 399.74078, 163.86128, -999.486 ],
"7-2-3": [ 344.6998, 166.23573, -965.888 ],
"7-2-4": [ 288.0577, 169.31651, -1015.487 ],
"7-2-5": [ 280.67697, 174.83067, -1055.033 ],
"7-2-6": [ 320.61887, 177.6219, -1063.001 ],
"7-2-7": [ 337.09232, 179.85603, -1077.462 ],
"7-2-8": [ 359.27032, 169.58286, -1040.055 ],
"7-2-9": [ 386.61865, 171.6276, -1062.528 ],
"7-2-10": [ 427.97385, 176.25217, -1031.294 ],
"7-2-11": [ 443.15656, 176.65547, -1103.988 ],
"7-2-12": [ 415.3937, 178.8055, -1106.969 ],
"7-2-13": [ 398.0623, 177.64043, -1097.182 ],
"7-2-14": [ 363.10443, 183.07512, -1107.879 ],
"7-2-15": [ 313.65442, 187.49307, -1131.615 ],
"7-2-16": [ 277.72003, 184.11307, -1132.776 ],
"7-2-17": [ 298.78662, 194.51111, -1186.072 ],
"7-2-18": [ 350.87668, 198.44693, -1187.13 ],
"7-2-19": [ 379.2678, 198.948, -1206.917 ],
"7-2-20": [ 422.49075, 196.098, -1199.341 ],
"7-2-21": [ 409.48438, 207.64, -1245.686 ],
"7-2-22": [ 278.84842, 208.42476, -1255.184 ],
"7-2-23": [ 331.18723, 213.1209, -1285.619 ],
"7-2-24": [ 363.42596, 212.64319, -1309.486 ],
"7-2-25": [ 389.21204, 211.91435, -1267.414 ],
"7-3-1": [ 535.1756, 188.06117, -810.239 ],
"7-3-2": [ 480.3213, 198.75916, -848.698 ],
"7-3-3": [ 462.09497, 198.59908, -1016.36 ],
"7-3-4": [ 457.4317, 193.74342, -1043.073 ],
"7-3-5": [ 463.0531, 217.31798, -950.98 ],
"7-3-6": [ 509.00867, 215.44481, -880.257 ],
"7-3-7": [ 559.1606, 164.69261, -733.974 ],
"7-3-8": [ 500.93512, 167.76015, -793.335 ],
"7-3-9": [ 485.68698, 162.62012, -752.379 ],
"7-3-10": [ 406.30353, 153.9614, -748.303 ],
"7-3-11": [ 368.1815, 155.64052, -754.78 ],
"7-3-12": [ 376.59338, 154.67438, -819.663 ],
"7-3-13": [ 415.3626, 158.39568, -868.925 ],
"8-1-1": [ 1555.1887, 106.99688, -294.945 ],
"8-1-2": [ 1548.08, 107.4315, -341.72 ],
"8-1-3": [ 1530.7975, 107.9003, -363.469 ],
"8-1-4": [ 1575.3815, 107.8586, -319.375 ],
"8-1-5": [ 1596.5104, 107.77778, -309.866 ],
"8-1-6": [ 1595.3533, 108.94459, -331.636 ],
"8-1-7": [ 1589.355, 111.04423, -362.351 ],
"8-1-8": [ 1584.065, 112.557365, -426.743 ],
"8-1-9": [ 1639.5199, 110.241264, -451.476 ],
"8-1-10": [ 1615.0238, 111.04204, -453.546 ],
"8-1-11": [ 1649.6805, 109.049614, -330.269 ],
"8-1-12": [ 1666.4412, 109.42118, -344.406 ],
"8-1-13": [ 1712.6609, 109.47252, -355.267 ],
"8-1-14": [ 1716.4537, 109.50023, -397.155 ],
"8-1-15": [ 1699.4832, 110.03478, -434.094 ],
"8-1-16": [ 1715.7345, 110.38658, -453.72 ],
"8-2-1": [ 1657.4487, 111.902214, -493.887 ],
"8-2-2": [ 1704.7128, 111.14012, -496.467 ],
"8-2-3": [ 1706.7322, 111.206375, -524.444 ],
"8-2-4": [ 1703.4409, 112.30228, -563.071 ],
"8-2-5": [ 1667.1761, 114.55351, -575.227 ],
"8-2-6": [ 1681.0483, 114.02905, -601.418 ],
"8-2-7": [ 1723.7335, 113.554276, -627.764 ],
"8-2-8": [ 1712.9492, 113.76922, -639.996 ],
"8-2-9": [ 1684.1245, 114.1375, -654.181 ],
"8-2-10": [ 1663.762, 116.224846, -672.756 ],
"8-2-11": [ 1703.3634, 114.23006, -682.909 ],
"8-2-12": [ 1706.4171, 114.00804, -663.672 ],
"8-3-1": [ 1676.9973, 114.936165, -701.10364 ],
"8-3-2": [ 1744.0432, 112.00452, -747.16 ],
"8-3-3": [ 1762.6487, 110.999, -788.2 ],
"8-3-4": [ 1675.5552, 113.877205, -786.291 ],
"8-3-5": [ 1663.4901, 113.64603, -761.073 ],
"9-1-1": [ 1504.1533, 135.6679, -790.095 ],
"9-1-2": [ 1579.2461, 135.7955, -810.102 ],
"9-1-3": [ 1578.0872, 154.85283, -838.029 ],
"9-1-4": [ 1523.4652, 164.95158, -845.217 ],
"9-1-5": [ 1490.4625, 182.53535, -850.239 ],
"9-1-6": [ 1670.8663, 134.951, -863.564 ],
"9-1-7": [ 1686.7887, 134.9513, -820.049 ],
"9-1-8": [ 1669.9598, 135.86174, -798.882 ],
"9-1-9": [ 1770.5015, 135.855, -817.562 ],
"9-1-10": [ 1718.8726, 165.40875, -868.039 ],
"9-1-11": [ 1758.3578, 139.27536, -897.189 ],
"9-1-12": [ 1679.7844, 163.36784, -918.774 ],
"9-1-13": [ 1617.7446, 179.31053, -944.424 ],
"9-1-14": [ 1597.6184, 162.26648, -1014.642 ],
"9-1-15": [ 1735.7505, 134.46364, -1000.308 ],
"9-1-16": [ 1678.8804, 134.89429, -1087.773 ],
"9-1-17": [ 1586.1365, 175.14705, -1102.41 ],
"9-1-18": [ 1615.7922, 135.92929, -1129.803 ],
"9-1-19": [ 1591.52, 136.0671, -1163.238 ],
"9-1-20": [ 1695.6937, 136.29211, -1163.76 ],
"9-1-21": [ 1574.0894, 159.7138, -1191.205 ],
"9-1-22": [ 1503.1017, 136.05283, -1223.222 ],
"9-1-23": [ 1475.9567, 136.69885, -1183.543 ],
"9-1-24": [ 1435.348, 136.1803, -1147.136 ],
"9-1-25": [ 1445.3005, 135.87, -1106.021 ],
"10-1-1": [ 669.2722, 182.77, -1692.935 ],
"10-1-2": [ 708.2694, 190.38007, -1584.594 ],
"10-1-3": [ 755.2973, 186.80806, -1591.727 ],
"10-1-4": [ 841.6826, 183.48526, -1466.513 ],
"10-1-5": [ 780.34595, 185.27036, -1492.687 ],
"10-1-6": [ 773.492, 188.45854, -1459.688 ],
"10-1-7": [ 705.46655, 185.27, -1423.438 ],
"10-1-8": [ 593.47565, 188.5799, -1663.523 ],
"10-1-9": [ 717.5562, 183.84134, -1508.371 ],
"10-1-10": [ 654.8929, 183.24605, -1578.562 ],
"10-1-11": [ 630.7513, 177.74345, -1539.095 ],
"10-1-12": [ 572.3651, 185.05518, -1628.113 ],
"10-1-13": [ 529.055, 188.8755, -1663.241 ],
"10-1-14": [ 473.07568, 185.06699, -1615.032 ],
"10-1-15": [ 419.01776, 189.51976, -1641.168 ],
"10-1-16": [ 353.521, 184.48824, -1631.146 ],
"10-1-17": [ 378.69937, 203.79393, -1692.141 ],
"10-2-1": [ 382.40912, 192.04659, -1655.473 ],
"10-2-2": [ 436.93774, 190.95218, -1555.921 ],
"10-2-3": [ 357.44885, 183.822, -1559.655 ],
"10-2-4": [ 552.33344, 191.54659, -1535.022 ],
"10-2-5": [ 557.4272, 185.10689, -1479.699 ],
"10-2-6": [ 626.69086, 184.96893, -1419.323 ],
"10-2-7": [ 581.90485, 186.1944, -1381.223 ],
"10-2-8": [ 528.37946, 185.47147, -1423.236 ],
"10-2-9": [ 498.9816, 184.89848, -1358.385 ],
"10-2-10": [ 481.32437, 198.6911, -1288.875 ],
"10-2-11": [ 343.01382, 186.22382, -1464.158 ],
"10-2-12": [ 352.13977, 191.32964, -1364.287 ],
"10-2-13": [ 384.45575, 180.01268, -1406.858 ],
"10-2-14": [ 415.4119, 182.81897, -1512.64 ],
"10-2-15": [ 468.5659, 183.861, -1480.801 ],
"11-1-1": [ 904.8035, 191.84674, -1472.809 ],
"11-1-2": [ 888.94727, 192.06335, -1509.557 ],
"11-1-3": [ 930.9065, 187.54407, -1535.127 ],
"11-1-4": [ 868.38586, 190.35971, -1554.811 ],
"11-1-5": [ 949.6296, 184.22351, -1603.84 ],
"11-1-6": [ 907.0732, 185.12164, -1621.015 ],
"11-1-7": [ 799.0595, 203.90375, -1627.241 ],
"11-1-8": [ 847.8456, 190.65326, -1670.272 ],
"11-1-9": [ 931.8259, 184.6732, -1652.769 ],
"11-1-10": [ 956.12054, 189.44838, -1691.245 ],
"11-1-11": [ 976.6099, 184.81346, -1652.737 ],
"11-1-12": [ 1031.6913, 185.62062, -1624.439 ],
"11-1-13": [ 1125.1874, 184.22322, -1633.238 ],
"11-1-14": [ 1176.729, 184.153, -1508.272 ],
"11-1-15": [ 1172.0875, 184.62653, -1618.838 ],
"11-1-16": [ 1221.5781, 184.22395, -1652.276 ],
"11-1-17": [ 1265.6476, 184.3437, -1679.449 ],
"11-1-18": [ 1298.7477, 184.22313, -1646.433 ],
"11-1-19": [ 1321.9968, 190.632, -1650.338 ],
"11-1-20": [ 1207.2268, 185.084, -1550.199 ],
"11-1-21": [ 1241.2039, 184.64323, -1475.407 ],
"11-1-22": [ 1192.6494, 184.894, -1438.851 ],
"11-1-23": [ 1236.7352, 204.88625, -1417.898 ],
"11-1-24": [ 1263.7279, 204.9939, -1444.988 ],
"11-1-25": [ 1219.0742, 264.54733, -1341.863 ],
"11-1-26": [ 1056.0354, 264.832, -1420.904 ],
"11-1-27": [ 1006.7584, 227.71002, -1485.031 ],
"11-1-28": [ 1040.4497, 184.223, -1555.138 ],
"11-1-29": [ 1127.3389, 184.38539, -1509.865 ],
"11-2-1": [ 1339.0238, 158.88576, -1391.738 ],
"11-2-2": [ 1416.4022, 151.073, -1459.796 ],
"11-2-3": [ 1381.5237, 154.732, -1388.307 ],
"11-2-4": [ 1323.5999, 158.77534, -1419.645 ],
"11-2-5": [ 1285.411, 149.6697, -1508.172 ],
"11-2-6": [ 1348.785, 149.82632, -1566.319 ],
"11-2-7": [ 1340.0052, 151.081, -1459.918 ],
"11-2-8": [ 1344.0778, 149.78392, -1510.286 ],
"11-2-9": [ 1294.3138, 149.78809, -1568.56 ],
"11-2-10": [ 1455.397, 157.13982, -1519.702 ],
"11-2-11": [ 1396.2888, 150.56128, -1567.269 ],
"11-2-12": [ 1375.0669, 159.43933, -1600.436 ],
"11-2-13": [ 1480.5106, 147.07672, -1654.515 ],
"11-2-14": [ 1483.9135, 146.22993, -1587.261 ],
"11-2-15": [ 1528.5228, 154.74026, -1551.909 ],
"11-2-16": [ 1572.5388, 162.41393, -1521.592 ],
"11-2-17": [ 1563.5168, 156.35912, -1711.251 ],
"11-2-18": [ 1614.7557, 160.38036, -1669.059 ],
"11-2-19": [ 1567.6913, 166.59479, -1635.359 ],
"11-2-20": [ 1698.3314, 165.62724, -1656.547 ],
"11-2-21": [ 1711.5253, 164.236, -1616.213 ],
"11-2-22": [ 1647.1498, 159.64148, -1607.39 ],
"11-2-23": [ 1628.6115, 159.0479, -1545.598 ],
"11-2-24": [ 1657.4407, 164.0309, -1521.895 ],
"11-2-25": [ 1338.3695, 149.78305, -1614.628 ],
"11-3-1": [ 1468.5099, 186.826, -1405.306 ],
"11-3-2": [ 1426.0383, 187.40314, -1338.052 ],
"11-3-3": [ 1357.8121, 202.73274, -1304.231 ],
"11-3-4": [ 1327.475, 201.63109, -1335.284 ],
"11-3-5": [ 1353.486, 203.59282, -1213.616 ],
"11-3-6": [ 1409.9791, 183.78714, -1247.936 ],
"11-3-7": [ 1502.0653, 184.242, -1278.927 ],
"11-3-8": [ 1534.4829, 203.0619, -1432.727 ],
"11-3-9": [ 1598.4512, 193.348, -1393.876 ],
"11-3-10": [ 1674.4226, 185.39008, -1481.686 ],
"11-3-11": [ 1637.6041, 186.43036, -1326.174 ],
"11-3-12": [ 1651.385, 187.087, -1232.28 ],
"11-3-13": [ 1551.782, 204.06793, -1351.94 ],
"11-3-14": [ 1602.7625, 201.18614, -1334.228 ],
"11-3-15": [ 1613.6155, 203.35764, -1241.687 ],
"11-3-16": [ 1366.9633, 198.361, -1339.564 ]
}
================================================
FILE: RaidCrawler.Core/Schemas/raids.fbs
================================================
namespace pkNX.Structures.FlatBuffers.Gen9;
attribute "fs_vector";
attribute "fs_serializer";
attribute "fs_valueStruct";
attribute "fs_nonVirtual";
attribute "fs_unsafeStructVector";
enum RaidRomType : short {
BOTH = 0,
TYPE_A = 1,
TYPE_B = 2,
}
table RaidEnemyTableArray (fs_serializer:"Greedy") {
Table:[RaidEnemyTable] (required);
}
table RaidEnemyTable {
Info:RaidEnemyInfo (required);
}
table DeliveryRaidEnemyTableArray (fs_serializer:"Greedy") {
Table:[DeliveryRaidEnemyTable] (required);
}
table DeliveryRaidEnemyTable {
Info:RaidEnemyInfo (required);
}
table RaidTimeData {
IsActive:bool;
GameLimit:int;
ClientLimit:int;
CommandLimit:int;
PokeReviveTime:int;
AiIntervalTime:int;
AiIntervalRand:int;
}
table RaidEnemyInfo {
RomVer:RaidRomType;
No:int;
DeliveryGroupID:byte;
Difficulty:int;
Rate:byte;
DropTableFix:ulong;
DropTableRandom:ulong;
CaptureRate:byte;
CaptureLv:byte;
BossPokePara:PokeDataBattle (required);
BossPokeSize:RaidBossSizeData (required);
BossDesc:RaidBossData (required);
TimeData:RaidTimeData (required);
}
table RaidBossSizeData {
HeightType:int;
HeightValue:short;
WeightType:int;
WeightValue:short;
ScaleType:int;
ScaleValue:short;
}
table RaidBossExtraData {
Timing:short;
Action:short;
Value:short;
Wazano:ushort;
}
table RaidBossData {
HpCoef:short;
PowerChargeTrigerHp:byte;
PowerChargeTrigerTime:byte;
PowerChargeLimitTime:short;
PowerChargeCancelDamage:byte;
PowerChargePenaltyTime:short;
PowerChargePenaltyAction:ushort;
PowerChargeDamageRate:byte;
PowerChargeGemDamageRate:byte;
PowerChargeChangeGemDamageRate:byte;
ExtraAction1:RaidBossExtraData (required);
ExtraAction2:RaidBossExtraData (required);
ExtraAction3:RaidBossExtraData (required);
ExtraAction4:RaidBossExtraData (required);
ExtraAction5:RaidBossExtraData (required);
ExtraAction6:RaidBossExtraData (required);
DoubleActionTriggerHp:byte;
DoubleActionTriggerTime:byte;
DoubleActionRate:byte;
}
table DeliveryRaidPriorityArray (fs_serializer:"Greedy") {
Table:[DeliveryRaidPriority] (required);
}
table DeliveryRaidPriority {
VersionNo:int;
GroupID:DeliveryGroupID (required);
}
table DeliveryGroupID {
GroupID:GroupIDSet (required);
}
struct GroupIDSet (fs_valueStruct)
{
Table:[byte:10] (fs_unsafeStructVector);
}
table WazaSet {
WazaId:ushort = 0;
PointUp:byte = 0;
}
table ParamSet {
HP :int;
ATK:int;
DEF:int;
SPA:int;
SPD:int;
SPE:int;
}
table PokeDataBattle {
DevId:ushort;
FormId:short;
Sex:int;
Item:int;
Level:int;
BallId:int;
WazaType:int;
Waza1:WazaSet (required);
Waza2:WazaSet (required);
Waza3:WazaSet (required);
Waza4:WazaSet (required);
GemType:int;
Seikaku:int;
Tokusei:int;
TalentType:int;
TalentValue:ParamSet (required);
TalentVnum:byte;
EffortValue:ParamSet (required);
RareType:int;
ScaleType:int;
ScaleValue:short;
}
table DeliveryRaidLotteryRewardItemArray (fs_serializer:"Greedy") {
Table:[DeliveryRaidLotteryRewardItem] (required);
}
table DeliveryRaidLotteryRewardItem {
TableName:ulong;
RewardItem00:RaidLotteryRewardItemInfo (required);
RewardItem01:RaidLotteryRewardItemInfo (required);
RewardItem02:RaidLotteryRewardItemInfo (required);
RewardItem03:RaidLotteryRewardItemInfo (required);
RewardItem04:RaidLotteryRewardItemInfo (required);
RewardItem05:RaidLotteryRewardItemInfo (required);
RewardItem06:RaidLotteryRewardItemInfo (required);
RewardItem07:RaidLotteryRewardItemInfo (required);
RewardItem08:RaidLotteryRewardItemInfo (required);
RewardItem09:RaidLotteryRewardItemInfo (required);
RewardItem10:RaidLotteryRewardItemInfo (required);
RewardItem11:RaidLotteryRewardItemInfo (required);
RewardItem12:RaidLotteryRewardItemInfo (required);
RewardItem13:RaidLotteryRewardItemInfo (required);
RewardItem14:RaidLotteryRewardItemInfo (required);
RewardItem15:RaidLotteryRewardItemInfo (required);
RewardItem16:RaidLotteryRewardItemInfo (required);
RewardItem17:RaidLotteryRewardItemInfo (required);
RewardItem18:RaidLotteryRewardItemInfo (required);
RewardItem19:RaidLotteryRewardItemInfo (required);
RewardItem20:RaidLotteryRewardItemInfo (required);
RewardItem21:RaidLotteryRewardItemInfo (required);
RewardItem22:RaidLotteryRewardItemInfo (required);
RewardItem23:RaidLotteryRewardItemInfo (required);
RewardItem24:RaidLotteryRewardItemInfo (required);
RewardItem25:RaidLotteryRewardItemInfo (required);
RewardItem26:RaidLotteryRewardItemInfo (required);
RewardItem27:RaidLotteryRewardItemInfo (required);
RewardItem28:RaidLotteryRewardItemInfo (required);
RewardItem29:RaidLotteryRewardItemInfo (required);
}
table DeliveryRaidFixedRewardItemArray (fs_serializer:"Greedy") {
Table:[DeliveryRaidFixedRewardItem] (required);
}
table DeliveryRaidFixedRewardItem {
TableName:ulong;
RewardItem00:RaidFixedRewardItemInfo (required);
RewardItem01:RaidFixedRewardItemInfo (required);
RewardItem02:RaidFixedRewardItemInfo (required);
RewardItem03:RaidFixedRewardItemInfo (required);
RewardItem04:RaidFixedRewardItemInfo (required);
RewardItem05:RaidFixedRewardItemInfo (required);
RewardItem06:RaidFixedRewardItemInfo (required);
RewardItem07:RaidFixedRewardItemInfo (required);
RewardItem08:RaidFixedRewardItemInfo (required);
RewardItem09:RaidFixedRewardItemInfo (required);
RewardItem10:RaidFixedRewardItemInfo (required);
RewardItem11:RaidFixedRewardItemInfo (required);
RewardItem12:RaidFixedRewardItemInfo (required);
RewardItem13:RaidFixedRewardItemInfo (required);
RewardItem14:RaidFixedRewardItemInfo (required);
}
table RaidLotteryRewardItemInfo {
Category:int;
ItemID:int;
Num:byte;
Rate:int;
RareItemFlag:bool;
}
table RaidFixedRewardItemInfo {
Category:int;
SubjectType:int;
ItemID:int;
Num:byte;
}
================================================
FILE: RaidCrawler.Core/Structures/Areas.cs
================================================
using PKHeX.Core;
namespace RaidCrawler.Core.Structures;
public static class Areas
{
private static readonly string[] AreaList =
[
"South Province (Area 1)",
"", // Unused
"", // Unused
"South Province (Area 2)",
"South Province (Area 4)",
"South Province (Area 6)",
"South Province (Area 5)",
"South Province (Area 3)",
"West Province (Area 1)",
"Asado Desert",
"West Province (Area 2)",
"West Province (Area 3)",
"Tagtree Thicket",
"East Province (Area 3)",
"East Province (Area 1)",
"East Province (Area 2)",
"Dalizapa Passage",
"Casseroya Lake",
"Glaseado Mountain",
"North Province (Area 3)",
"North Province (Area 1)",
"North Province (Area 2)",
];
private static readonly string[] AreaListKitakami =
[
"Kitakami Road",
"Apple Hills",
"Reveler's Road",
"Oni Mountain",
"Infernal Pass",
"Crystal Pool",
"Wistful Fields",
"Mossfell Confluence",
"Fellhorn Gorge",
"Paradise Barrens",
"Timeless Woods",
];
private static readonly string[] AreaListBlueberry =
[
"Savanna Biome",
"Coastal Biome",
"Canyon Biome",
"Polar Biome",
"Savanna Biome",
"Coastal Biome",
"Canyon Biome",
"Polar Biome",
];
public static string GetArea(int index, TeraRaidMapParent type) => type switch
{
TeraRaidMapParent.Kitakami => AreaListKitakami[index],
TeraRaidMapParent.Blueberry => AreaListBlueberry[index],
_ => AreaList[index],
};
}
================================================
FILE: RaidCrawler.Core/Structures/FlatBufferStructures/DeliveryRaidFixedRewardItem.cs
================================================
namespace pkNX.Structures.FlatBuffers.Gen9;
// ReSharper disable once ClassNeverInstantiated.Global
public partial class DeliveryRaidFixedRewardItem
{
public const int Count = 15;
public RaidFixedRewardItemInfo GetReward(int index) => index switch
{
00 => RewardItem00,
01 => RewardItem01,
02 => RewardItem02,
03 => RewardItem03,
04 => RewardItem04,
05 => RewardItem05,
06 => RewardItem06,
07 => RewardItem07,
08 => RewardItem08,
09 => RewardItem09,
10 => RewardItem10,
11 => RewardItem11,
12 => RewardItem12,
13 => RewardItem13,
14 => RewardItem14,
_ => throw new ArgumentOutOfRangeException(nameof(index), index, null),
};
}
================================================
FILE: RaidCrawler.Core/Structures/FlatBufferStructures/DeliveryRaidLotteryRewardItem.cs
================================================
namespace pkNX.Structures.FlatBuffers.Gen9;
// ReSharper disable once ClassNeverInstantiated.Global
public partial class DeliveryRaidLotteryRewardItem
{
public const int RewardItemCount = 30;
// Get reward item from index
public RaidLotteryRewardItemInfo GetRewardItem(int index) => index switch
{
00 => RewardItem00,
01 => RewardItem01,
02 => RewardItem02,
03 => RewardItem03,
04 => RewardItem04,
05 => RewardItem05,
06 => RewardItem06,
07 => RewardItem07,
08 => RewardItem08,
09 => RewardItem09,
10 => RewardItem10,
11 => RewardItem11,
12 => RewardItem12,
13 => RewardItem13,
14 => RewardItem14,
15 => RewardItem15,
16 => RewardItem16,
17 => RewardItem17,
18 => RewardItem18,
19 => RewardItem19,
20 => RewardItem20,
21 => RewardItem21,
22 => RewardItem22,
23 => RewardItem23,
24 => RewardItem24,
25 => RewardItem25,
26 => RewardItem26,
27 => RewardItem27,
28 => RewardItem28,
29 => RewardItem29,
_ => throw new ArgumentOutOfRangeException(nameof(index), index, null),
};
}
================================================
FILE: RaidCrawler.Core/Structures/FlatBufferStructures/PokeDataBattle.cs
================================================
using PKHeX.Core;
namespace pkNX.Structures.FlatBuffers.Gen9;
// ReSharper disable once ClassNeverInstantiated.Global
public partial class PokeDataBattle
{
public void SerializePKHeX(BinaryWriter bw, sbyte captureLv, RaidSerializationFormat format)
{
if (format == RaidSerializationFormat.BaseROM)
AssertRegularFormat();
// If any PointUp for a move is nonzero, throw an exception.
if (Waza1.PointUp != 0 || Waza2.PointUp != 0 || Waza3.PointUp != 0 || Waza4.PointUp != 0)
throw new ArgumentOutOfRangeException(nameof(WazaSet.PointUp), $"No {nameof(WazaSet.PointUp)} allowed!");
// flag BallId if not none
if (BallId != 0)
throw new ArgumentOutOfRangeException(nameof(BallId), BallId, $"No {nameof(BallId)} allowed!");
bw.Write(SpeciesConverter.GetNational9(DevId));
bw.Write((byte)FormId);
bw.Write((byte)Sex);
bw.Write((byte)Tokusei);
bw.Write((byte)(TalentType == 1 ? TalentVnum : 0));
bw.Write((byte)RareType);
bw.Write((byte)captureLv);
// Write moves
bw.Write(Waza1.WazaId);
bw.Write(Waza2.WazaId);
bw.Write(Waza3.WazaId);
bw.Write(Waza4.WazaId);
// ROM raids with 5 stars have a few entries that are defined as DEFAULT
// If the type is not {specified}, the game will assume it is RANDOM.
// Thus, DEFAULT behaves like RANDOM.
// Let's clean up this mistake and make it explicit so we don't have to program this workaround in other tools.
var gem = GemType is 0 ? 1 : GemType;
bw.Write((byte)gem);
}
private void AssertRegularFormat()
{
if (TalentType != 1)
throw new ArgumentOutOfRangeException(nameof(TalentType), TalentType, "Invalid talent type.");
if (TalentVnum == 0 && DevId != (ushort)Species.Pachirisu && Level != 35) // nice mistake gamefreak -- 3star Pachirisu is 0 IVs.
throw new ArgumentOutOfRangeException(nameof(TalentVnum), TalentVnum, "No min flawless IVs?");
if (Seikaku != 0)
throw new ArgumentOutOfRangeException(nameof(Seikaku), Seikaku, $"No {nameof(Seikaku)} allowed!");
}
}
================================================
FILE: RaidCrawler.Core/Structures/FlatBufferStructures/RaidBossData.cs
================================================
namespace pkNX.Structures.FlatBuffers.Gen9;
// ReSharper disable once ClassNeverInstantiated.Global
public partial class RaidBossData
{
public void SerializePKHeX(BinaryWriter bw)
{
bw.Write(ExtraAction1.Wazano);
bw.Write(ExtraAction2.Wazano);
bw.Write(ExtraAction3.Wazano);
bw.Write(ExtraAction4.Wazano);
bw.Write(ExtraAction5.Wazano);
bw.Write(ExtraAction6.Wazano);
}
}
================================================
FILE: RaidCrawler.Core/Structures/FlatBufferStructures/RaidBossSizeData.cs
================================================
namespace pkNX.Structures.FlatBuffers.Gen9;
// ReSharper disable once ClassNeverInstantiated.Global
public partial class RaidBossSizeData
{
public void SerializePKHeX()
{
// If any property is not zero, throw an exception.
// if (HeightType != 0 || HeightValue != 0 || WeightType != 0 || WeightValue != 0 || ScaleType != 0 || ScaleValue != 0)
// throw new ArgumentException("Expected default sizes.");
}
}
================================================
FILE: RaidCrawler.Core/Structures/FlatBufferStructures/RaidEnemyInfo.cs
================================================
namespace pkNX.Structures.FlatBuffers.Gen9;
// ReSharper disable once ClassNeverInstantiated.Global
public partial class RaidEnemyInfo
{
public void SerializePKHeX(
BinaryWriter bw,
byte star,
sbyte rate,
RaidSerializationFormat format
)
{
BossPokePara.SerializePKHeX(bw, CaptureLv, format);
BossPokeSize.SerializePKHeX();
bw.Write(DeliveryGroupID);
// Append RNG details.
bw.Write(star);
bw.Write(rate);
}
public void SerializeDistribution(BinaryWriter bw)
{
var b = BossPokePara;
if (b.TalentType > 2)
throw new InvalidDataException($"Invalid talent type for {nameof(SerializeDistribution)}.");
bw.Write(b.Seikaku == 0 ? (byte)25 : (byte)(b.Seikaku - 1));
bw.Write((byte)b.TalentValue.HP);
bw.Write((byte)b.TalentValue.ATK);
bw.Write((byte)b.TalentValue.DEF);
bw.Write((byte)b.TalentValue.SPE);
bw.Write((byte)b.TalentValue.SPA);
bw.Write((byte)b.TalentValue.SPD);
bw.Write((byte)(b.TalentType == 2 ? 1 : 0));
bw.Write((byte)b.ScaleType);
bw.Write((byte)b.ScaleValue);
}
public void SerializeMight(BinaryWriter bw)
{
// Fixed Nature, fixed IVs, fixed Scale
var b = BossPokePara;
if (b.TalentType > 2)
throw new InvalidDataException($"Invalid talent type for {nameof(SerializeMight)}.");
bw.Write(b.Seikaku == 0 ? (byte)25 : (byte)(b.Seikaku - 1));
bw.Write((byte)b.TalentValue.HP);
bw.Write((byte)b.TalentValue.ATK);
bw.Write((byte)b.TalentValue.DEF);
bw.Write((byte)b.TalentValue.SPE);
bw.Write((byte)b.TalentValue.SPA);
bw.Write((byte)b.TalentValue.SPD);
bw.Write((byte)(b.TalentType == 2 ? 1 : 0));
bw.Write((byte)b.ScaleType);
bw.Write((byte)b.ScaleValue);
}
}
================================================
FILE: RaidCrawler.Core/Structures/FlatBufferStructures/RaidSerializationFormat.cs
================================================
namespace pkNX.Structures.FlatBuffers.Gen9;
public enum RaidSerializationFormat
{
///
/// Base ROM Raids
///
BaseROM,
///
/// Regular Distribution Raids
///
Distribution,
///
/// 7 Star Distribution Raids
///
Might,
}
================================================
FILE: RaidCrawler.Core/Structures/FlatbufferDumper.cs
================================================
using FlatSharp;
using pkNX.Structures.FlatBuffers.Gen9;
using System.Diagnostics;
namespace RaidCrawler.Core.Structures;
public static class FlatbufferDumper
{
public static byte[][] DumpBaseROMRaids(ReadOnlySpan paths)
{
var list = new List();
var rateTotal = new (int Scarlet, int Violet)[8];
for (int i = 0; i < paths.Length; i++)
{
var path = paths[i];
var data = Utils.GetBinaryResource(path);
var fb = RaidEnemyTableArray.Serializer.Parse(data);
var table = fb.Table;
int totalRateScarlet = 0;
int totalRateViolet = 0;
foreach (var enc in table)
{
var wrap = new RaidStorage(enc, i);
if (enc.Info.RomVer != RaidRomType.TYPE_B)
{
wrap.RandRateStartScarlet = totalRateScarlet;
totalRateScarlet += enc.Info.Rate;
}
if (enc.Info.RomVer != RaidRomType.TYPE_A)
{
wrap.RandRateStartViolet = totalRateViolet;
totalRateViolet += enc.Info.Rate;
}
list.Add(wrap);
}
rateTotal[i + 1] = (totalRateScarlet, totalRateViolet);
}
//var all = list.OrderBy(z => z.Species)
// .ThenBy(z => z.Form)
// .ThenByDescending(z => z.Stars)
// .ThenByDescending(z => z.Delivery)
// .ToList();
using var ms = new MemoryStream();
using var bw = new BinaryWriter(ms);
using var ms2 = new MemoryStream();
using var bw2 = new BinaryWriter(ms2);
using var ms3 = new MemoryStream();
using var bw3 = new BinaryWriter(ms3);
foreach (var enc in list)
{
var rmS = enc.GetScarletRandMinScarlet();
var rmV = enc.GetVioletRandMinViolet();
enc.Enemy.Info.SerializePKHeX(
bw,
(byte)enc.Stars,
enc.Rate,
RaidSerializationFormat.BaseROM
);
bw.Write(rmS);
bw.Write(rmV);
enc.Enemy.Info.BossDesc.SerializePKHeX(bw2);
bw3.Write(enc.Enemy.Info.DropTableFix);
bw3.Write(enc.Enemy.Info.DropTableRandom);
}
var pickle = ms.ToArray();
var extra_moves = ms2.ToArray();
var rewards = ms3.ToArray();
return [pickle, extra_moves, rewards];
}
public static byte[][] DumpDistributionRaids(ReadOnlyMemory encounters)
{
var type2 = new List();
var type3 = new List();
if (encounters.Length == 0)
return [];
var tableEncounters = DeliveryRaidEnemyTableArray.Serializer.Parse(encounters);
var byGroupID = tableEncounters.Table
.Where(z => z.Info.Rate != 0)
.GroupBy(z => z.Info.DeliveryGroupID);
foreach (var group in byGroupID)
{
var items = group.ToArray();
if (items.Any(z => z.Info.Difficulty > 7))
continue;
if (items.All(z => z.Info.Difficulty == 7))
{
AddToList(items, type3, RaidSerializationFormat.Might, group.Key);
continue;
}
if (items.Any(z => z.Info.Difficulty == 7))
throw new Exception($"Mixed difficulty {items.First(z => z.Info.Difficulty > 7).Info.Difficulty}");
AddToList(items, type2, RaidSerializationFormat.Distribution, group.Key);
}
return
[
type2.SelectMany(z => z.SkipLast(16 + 12 + 1)).ToArray(),
type3.SelectMany(z => z.SkipLast(16 + 12 + 1)).ToArray(),
type2.SelectMany(z => z.TakeLast(16 + 12 + 1).Take(16)).ToArray(),
type3.SelectMany(z => z.TakeLast(16 + 12 + 1).Take(16)).ToArray(),
type2.SelectMany(z => z.TakeLast(12 + 1).Take(12)).ToArray(),
type3.SelectMany(z => z.TakeLast(12 + 1).Take(12)).ToArray(),
type2.SelectMany(z => z.TakeLast(1)).ToArray(),
type3.SelectMany(z => z.TakeLast(1)).ToArray(),
];
}
public static List DumpLotteryRewards(ReadOnlyMemory rewards)
{
var tableRewards = DeliveryRaidLotteryRewardItemArray.Serializer.Parse(rewards);
return [.. tableRewards.Table];
}
public static List DumpFixedRewards(ReadOnlyMemory rewards)
{
var tableRewards = DeliveryRaidFixedRewardItemArray.Serializer.Parse(rewards);
return [.. tableRewards.Table];
}
public static (DeliveryGroupID, int) DumpDeliveryPriorities(ReadOnlyMemory flatbuffer)
{
try
{
var prios = DeliveryRaidPriorityArray.Serializer.Parse(flatbuffer);
return (prios.Table[0].GroupID, prios.Table[0].VersionNo);
}
catch (Exception ex)
{
Debug.WriteLine(ex.ToString());
return (new DeliveryGroupID { GroupID = new GroupIDSet() }, 0);
}
}
private static readonly int[][] StageStars =
[
[1, 2],
[1, 2, 3],
[1, 2, 3, 4],
[3, 4, 5, 6, 7],
];
private static void AddToList(IReadOnlyCollection table, List list, RaidSerializationFormat format, sbyte group)
{
// Get the total weight for each stage of star count
Span weightTotalS = stackalloc ushort[StageStars.Length];
Span weightTotalV = stackalloc ushort[StageStars.Length];
foreach (var enc in table)
{
var info = enc.Info;
if (info.Rate == 0)
continue;
var difficulty = info.Difficulty;
for (int stage = 0; stage < StageStars.Length; stage++)
{
if (!StageStars[stage].Contains(difficulty))
continue;
if (info.RomVer != RaidRomType.TYPE_B)
weightTotalS[stage] += (ushort)info.Rate;
if (info.RomVer != RaidRomType.TYPE_A)
weightTotalV[stage] += (ushort)info.Rate;
}
}
Span weightMinS = stackalloc ushort[StageStars.Length];
Span weightMinV = stackalloc ushort[StageStars.Length];
foreach (var enc in table)
{
var info = enc.Info;
if (info.Rate == 0)
continue;
var difficulty = info.Difficulty;
TryAddToPickle(info, list, format, weightTotalS, weightTotalV, weightMinS, weightMinV, group);
for (int stage = 0; stage < StageStars.Length; stage++)
{
if (!StageStars[stage].Contains(difficulty))
continue;
if (info.RomVer != RaidRomType.TYPE_B)
weightMinS[stage] += (ushort)info.Rate;
if (info.RomVer != RaidRomType.TYPE_A)
weightMinV[stage] += (ushort)info.Rate;
}
}
}
private static void TryAddToPickle(RaidEnemyInfo enc, ICollection list, RaidSerializationFormat format,
ReadOnlySpan totalS, ReadOnlySpan totalV, ReadOnlySpan minS, ReadOnlySpan minV, sbyte group)
{
using var ms = new MemoryStream();
using var bw = new BinaryWriter(ms);
enc.SerializePKHeX(bw, (byte)enc.Difficulty, enc.Rate, format);
for (int stage = 0; stage < StageStars.Length; stage++)
{
bool noTotal = !StageStars[stage].Contains(enc.Difficulty);
ushort mS = minS[stage];
ushort mV = minV[stage];
bw.Write(noTotal ? (ushort)0 : mS);
bw.Write(noTotal ? (ushort)0 : mV);
bw.Write(noTotal || enc.RomVer == RaidRomType.TYPE_B ? (ushort)0 : totalS[stage]);
bw.Write(noTotal || enc.RomVer == RaidRomType.TYPE_A ? (ushort)0 : totalV[stage]);
}
if (format == RaidSerializationFormat.Distribution)
enc.SerializeDistribution(bw);
if (format == RaidSerializationFormat.Might)
enc.SerializeMight(bw);
// drop table reference
bw.Write(enc.DropTableFix);
bw.Write(enc.DropTableRandom);
// extra moves reference
enc.BossDesc.SerializePKHeX(bw);
// group id reference
bw.Write(group);
var bin = ms.ToArray();
if (!list.Any(z => z.SequenceEqual(bin)))
list.Add(bin);
}
private record RaidStorage(RaidEnemyTable Enemy, int File)
{
private PokeDataBattle Poke => Enemy.Info.BossPokePara;
public int Stars => Enemy.Info.Difficulty == 0 ? File + 1 : Enemy.Info.Difficulty;
public ushort Species => Poke.DevId;
public short Form => Poke.FormId;
public int Delivery => Enemy.Info.DeliveryGroupID;
public sbyte Rate => Enemy.Info.Rate;
public int RandRateStartScarlet { get; set; }
public int RandRateStartViolet { get; set; }
public short GetScarletRandMinScarlet()
{
if (Enemy.Info.RomVer == RaidRomType.TYPE_B)
return -1;
return (short)RandRateStartScarlet;
}
public short GetVioletRandMinViolet()
{
if (Enemy.Info.RomVer == RaidRomType.TYPE_A)
return -1;
return (short)RandRateStartViolet;
}
}
}
================================================
FILE: RaidCrawler.Core/Structures/ITeraRaid.cs
================================================
using PKHeX.Core;
namespace RaidCrawler.Core.Structures;
public interface ITeraRaid : ISpeciesForm
{
ushort[] ExtraMoves { get; }
byte Gender { get; }
AbilityPermission Ability { get; }
byte FlawlessIVCount { get; }
Shiny Shiny { get; }
byte Level { get; }
ushort Move1 { get; }
ushort Move2 { get; }
ushort Move3 { get; }
ushort Move4 { get; }
byte Stars { get; }
byte RandRate { get; }
}
================================================
FILE: RaidCrawler.Core/Structures/MapMagic.cs
================================================
using PKHeX.Core;
namespace RaidCrawler.Core.Structures
{
public class MapMagic
{
private double ScaleX { get; init; }
private double ScaleZ { get; init; }
private double OffsetZ { get; init; }
public double ConvertWidth(double s) => (512 / ScaleX) * s;
public double ConvertHeight(double s) => (512 / ScaleZ) * s;
public double ConvertX(double x) => (512 / ScaleX) * x;
public double ConvertZ(double z) => (512 / ScaleZ) * (z + OffsetZ);
public static MapMagic GetMapMagic(TeraRaidMapParent parent) => parent switch
{
TeraRaidMapParent.Blueberry => Blueberry,
TeraRaidMapParent.Kitakami => Kitakami,
_ => Base,
};
private static readonly MapMagic Base = new()
{
ScaleX = 5000,
ScaleZ = 5000,
OffsetZ = 5500,
};
private static readonly MapMagic Kitakami = new()
{
ScaleX = 2000,
ScaleZ = 2000,
OffsetZ = 2000,
};
private static readonly MapMagic Blueberry = new()
{
ScaleX = 2000,
ScaleZ = 2000,
OffsetZ = 2000,
};
}
}
================================================
FILE: RaidCrawler.Core/Structures/Offsets.cs
================================================
namespace RaidCrawler.Core.Structures;
public abstract class Offsets
{
public const string ScarletID = "0100A3D008C5C000";
public const string VioletID = "01008F6008C5E000";
public static ReadOnlySpan RaidBlockPointerBase => [0x4741FA0, 0x198, 0x88, 0x40];
public static ReadOnlySpan RaidBlockPointerKitakami => [0x4741FA0, 0x198, 0x88, 0xCD8];
public static ReadOnlySpan RaidBlockPointerBlueberry => [0x4741FA0, 0x198, 0x88, 0x1958];
public static ReadOnlySpan BlockKeyPointer => [0x47350D8, 0xD8, 0x0, 0x0, 0x30, 0x0];
public static ReadOnlySpan DifficultyFlags => [0xEC95D8EF, 0xA9428DFE, 0x9535F471, 0x6E7F8220];
public const uint BCATRaidBinaryLocation = 0x520A1B0; // Thanks Lincoln-LM!
public const uint BCATRaidPriorityLocation = 0x95451E4; // Thanks Lincoln-LM!
public const uint BCATRaidFixedRewardLocation = 0x7D6C2B82;
public const uint BCATRaidLotteryRewardLocation = 0xA52B4811;
}
================================================
FILE: RaidCrawler.Core/Structures/Raid.cs
================================================
using PKHeX.Core;
using static System.Buffers.Binary.BinaryPrimitives;
namespace RaidCrawler.Core.Structures;
///
/// See also https://github.com/kwsch/PKHeX/blob/master/PKHeX.Core/Saves/Substructures/Gen9/RaidSpawnList9.cs
///
public class Raid(Span Data, TeraRaidMapParent MapParent = TeraRaidMapParent.Paldea)
{
public const byte SIZE = 0x20;
private readonly byte[] Data = Data.ToArray(); // Raw data
public readonly TeraRaidMapParent MapParent = MapParent;
public bool IsValid => Validate();
public bool IsActive => ReadUInt32LittleEndian(Data.AsSpan(0x00)) == 1;
public uint Area => ReadUInt32LittleEndian(Data.AsSpan(0x04));
public uint LotteryGroup => ReadUInt32LittleEndian(Data.AsSpan(0x08));
public uint Den => ReadUInt32LittleEndian(Data.AsSpan(0x0C));
public uint Seed => ReadUInt32LittleEndian(Data.AsSpan(0x10));
public uint Flags => ReadUInt32LittleEndian(Data.AsSpan(0x18));
public bool IsBlack => Flags == 1;
public bool IsEvent => Flags >= 2;
public int TeraType => GetTeraType(Seed);
public uint Difficulty => GetDifficulty(Seed);
public uint EC => GenericRaidData[0];
public uint PID => GenericRaidData[2];
public bool IsShiny => GenericRaidData[3] == 1;
private uint[] GenericRaidData => GenerateGenericRaidData(Seed);
public byte[] GetData() => Data;
private bool Validate()
{
if (Seed == 0 || !IsActive)
return false;
if (!IsValidMap())
return false;
GenerateGenericRaidData(Seed);
return true;
}
private bool IsValidMap()
{
return MapParent switch
{
TeraRaidMapParent.Paldea => Area <= 22,
TeraRaidMapParent.Kitakami => Area <= 11,
TeraRaidMapParent.Blueberry => Area <= 8,
_ => false
};
}
private static int GetTeraType(uint Seed)
{
var rng = new Xoroshiro128Plus(Seed);
return (int)rng.NextInt(18);
}
private static uint[] GenerateGenericRaidData(uint Seed)
{
var rng = new Xoroshiro128Plus(Seed);
uint EC = (uint)rng.NextInt();
uint TIDSID = (uint)rng.NextInt();
uint PID = (uint)rng.NextInt();
bool IsShiny = ((PID >> 16) ^ (PID & 0xFFFF)) >> 4 == ((TIDSID >> 16) ^ (TIDSID & 0xFFFF)) >> 4;
var Shiny = IsShiny ? 1u : 0;
return [EC, TIDSID, PID, Shiny];
}
private static uint GetDifficulty(uint Seed)
{
var rng = new Xoroshiro128Plus(Seed);
return (uint)rng.NextInt(100);
}
public void GenerateDataPK9(PK9 pk, GenerateParam9 param, Shiny isShiny, uint seed)
{
var criteria = new EncounterCriteria { Shiny = isShiny };
bool check = Encounter9RNG.GenerateData(pk, param, criteria, seed);
if (!check)
{
criteria = new EncounterCriteria { Shiny = pk.IsShiny ? Shiny.Always : Shiny.Random };
Encounter9RNG.GenerateData(pk, param, criteria, seed);
}
}
}
================================================
FILE: RaidCrawler.Core/Structures/RaidBlock.cs
================================================
namespace RaidCrawler.Core.Structures;
public static class RaidBlock
{
public const uint HEADER_SIZE = 0x10;
public const uint MAX_COUNT_BASE = 72;
public const uint SIZE_BASE = Raid.SIZE * MAX_COUNT_BASE;
public const uint MAX_COUNT_KITAKAMI = 100;
public const uint SIZE_KITAKAMI = Raid.SIZE * MAX_COUNT_KITAKAMI;
public const uint MAX_COUNT_BLUEBERRY = 80;
public const uint SIZE_BLUEBERRY = Raid.SIZE * MAX_COUNT_BLUEBERRY;
}
================================================
FILE: RaidCrawler.Core/Structures/RaidContainer.cs
================================================
using PKHeX.Core;
using pkNX.Structures.FlatBuffers.Gen9;
using System.Text.Json;
namespace RaidCrawler.Core.Structures;
public record RaidContainer
{
public readonly TeraEncounter[]? GemTeraRaidsBase;
public readonly TeraEncounter[]? GemTeraRaidsKitakami;
public readonly TeraEncounter[]? GemTeraRaidsBlueberry;
public TeraDistribution[]? DistTeraRaids;
public TeraMight[]? MightTeraRaids;
public readonly IReadOnlyList? BaseFixedRewards;
public readonly IReadOnlyList? BaseLotteryRewards;
public IReadOnlyList? DeliveryRaidFixedRewards;
public IReadOnlyList? DeliveryRaidLotteryRewards;
public DeliveryGroupID DeliveryRaidPriority = new() { GroupID = new() };
public IReadOnlyList Raids { get; private set; } = new List();
public IReadOnlyList Encounters { get; private set; } = new List();
public IReadOnlyList> Rewards { get; private set; } =
new List>();
public string Game { get; private set; } = "Scarlet";
public GameStrings Strings { get; private set; }
// Files containing serialized data for all possible 1 through 6 star raids
private readonly string[] RaidDataBase =
[
"raid_enemy_01_array.bin",
"raid_enemy_02_array.bin",
"raid_enemy_03_array.bin",
"raid_enemy_04_array.bin",
"raid_enemy_05_array.bin",
"raid_enemy_06_array.bin",
];
private readonly string[] RaidDataKitakami =
[
"su1_raid_enemy_01_array.bin",
"su1_raid_enemy_02_array.bin",
"su1_raid_enemy_03_array.bin",
"su1_raid_enemy_04_array.bin",
"su1_raid_enemy_05_array.bin",
"su1_raid_enemy_06_array.bin",
];
private readonly string[] RaidDataBlueberry =
[
"su2_raid_enemy_01_array.bin",
"su2_raid_enemy_02_array.bin",
"su2_raid_enemy_03_array.bin",
"su2_raid_enemy_04_array.bin",
"su2_raid_enemy_05_array.bin",
"su2_raid_enemy_06_array.bin",
];
public RaidContainer(string game)
{
Game = game;
Strings = GameInfo.GetStrings("en");
GemTeraRaidsBase = TeraEncounter.GetAllEncounters(RaidDataBase, TeraRaidMapParent.Paldea);
GemTeraRaidsKitakami = TeraEncounter.GetAllEncounters(RaidDataKitakami, TeraRaidMapParent.Kitakami);
GemTeraRaidsBlueberry = TeraEncounter.GetAllEncounters(RaidDataBlueberry, TeraRaidMapParent.Blueberry);
BaseFixedRewards = JsonSerializer.Deserialize>(Utils.GetStringResource("raid_fixed_reward_item_array.json") ?? "[]");
BaseLotteryRewards = JsonSerializer.Deserialize>(Utils.GetStringResource("raid_lottery_reward_item_array.json") ?? "[]");
}
public int GetRaidCount() => Raids.Count;
public void ClearRaids() => Raids = new List();
public void SetRaids(IReadOnlyList raids) => Raids = raids;
public int GetEncounterCount() => Encounters.Count;
public void ClearEncounters() => Encounters = new List();
public void SetEncounters(IReadOnlyList encs) => Encounters = encs;
public int GetRewardsCount() => Rewards.Count;
public void ClearRewards() => Rewards = new List>();
public void SetRewards(IReadOnlyList> rewards) => Rewards = rewards;
public void SetGame(string game) => Game = game;
}
================================================
FILE: RaidCrawler.Core/Structures/RaidFilter.cs
================================================
using PKHeX.Core;
using System.Diagnostics.Metrics;
namespace RaidCrawler.Core.Structures;
public class RaidFilter
{
public string? Name { get; set; }
public int? Species { get; set; }
public int? Form { get; set; }
public int? Stars { get; set; }
public int StarsComp { get; set; }
public bool Shiny { get; set; }
public bool Square { get; set; }
public bool RareEC { get; set; }
public int? Nature { get; set; }
public int? TeraType { get; set; }
public int? Gender { get; set; }
public int IVBin { get; set; }
public int IVComps { get; set; }
public int IVVals { get; set; }
public bool Enabled { get; set; }
public int[]? RewardItems { get; set; }
public int RewardsComp { get; set; }
public int RewardsCount { get; set; }
public string[]? BatchFilters { get; set; }
public bool IsFilterSet() => Species != null
|| Form != null
|| Stars != null
|| Shiny
|| Square
|| RareEC
|| Nature != null
|| TeraType != null
|| Gender != null
|| IVBin != 0
|| (RewardItems != null && RewardsCount != 0)
|| BatchFilters != null;
public bool IsSpeciesSatisfied(ushort species)
{
if (Species is null)
return true;
return species == (ushort)Species;
}
public bool IsFormSatisfied(byte form)
{
if (Form is null)
return true;
return form == Form;
}
public bool IsStarsSatisfied(ITeraRaid enc)
{
if (Stars is null)
return true;
return StarsComp switch
{
0 => enc.Stars == Stars,
1 => enc.Stars > Stars,
2 => enc.Stars >= Stars,
3 => enc.Stars <= Stars,
4 => enc.Stars < Stars,
_ => false,
};
}
public bool IsRewardsSatisfied(RaidContainer container, ITeraRaid enc, Raid raid, int sandwichBoost)
{
if (RewardItems is null || RewardsCount == 0)
return true;
var rewards = enc.GetRewards(container, raid, sandwichBoost);
var count = rewards.Where(z => RewardItems.Contains(z.Item1)).Sum(o => o.Item2);
return RewardsComp switch
{
0 => count == RewardsCount,
1 => count > RewardsCount,
2 => count >= RewardsCount,
3 => count <= RewardsCount,
4 => count < RewardsCount,
_ => false,
};
}
public bool IsShinySatisfied(PK9 blank)
{
if (!Shiny)
return true;
return blank.IsShiny;
}
public bool IsSquareSatisfied(PK9 blank)
{
if (!Square)
return true;
return blank.IsShiny && ShinyExtensions.IsSquareShinyExist(blank);
}
public bool IsRareECSatisfied(PK9 blank)
{
if (!RareEC)
return true;
return blank.EncryptionConstant % 100 == 0;
}
public bool IsTeraTypeSatisfied(Raid raid, ITeraRaid enc)
{
if (TeraType is null)
return true;
return raid.GetTeraType(enc) == TeraType;
}
public bool IsNatureSatisfied(int nature)
{
if (Nature is null)
return true;
return nature == Nature;
}
public bool IsIVsSatisfied(PK9 blank)
{
if (IVBin == 0)
return true;
Span _ivs = stackalloc int[6];
blank.GetIVs(_ivs);
var ivs = Utils.ToSpeedLast(_ivs);
for (int i = 0; i < 6; i++)
{
var iv = IVVals >> i * 5 & 31;
var ivbin = IVBin >> i & 1;
var ivcomp = IVComps >> i * 3 & 7;
if (ivbin != 1)
continue;
if (!IsValidIV(ivcomp, ivs, i, iv))
return false;
}
return true;
}
private static bool IsValidIV(int ivcomp, ReadOnlySpan ivs, int index, int iv) => ivcomp switch
{
0 => ivs[index] == iv,
1 => ivs[index] > iv,
2 => ivs[index] >= iv,
3 => ivs[index] <= iv,
4 => ivs[index] < iv,
_ => true,
};
public bool IsGenderSatisfied(ITeraRaid encounter, int gender)
{
if (Gender is null || (encounter.Gender <= 2 && encounter.Gender == Gender))
return true;
return gender == Gender;
}
public bool IsBatchFilterSatisfied(PK9 blank)
{
if (BatchFilters is null)
return true;
var filters = StringInstruction.GetFilters(BatchFilters.AsSpan());
if (filters.Count == 0)
return true;
BatchEditing.ScreenStrings(filters);
return BatchEditing.IsFilterMatch(filters, blank);
}
public bool FilterSatisfied(
RaidContainer container,
ITeraRaid enc,
Raid raid,
int SandwichBoost
)
{
var param = enc.GetParam();
var blank = new PK9 { Species = enc.Species, Form = enc.Form };
raid.GenerateDataPK9(blank, param, enc.Shiny, raid.Seed);
return Enabled
&& IsIVsSatisfied(blank)
&& IsShinySatisfied(blank)
&& IsSquareSatisfied(blank)
&& IsRareECSatisfied(blank)
&& IsSpeciesSatisfied(blank.Species)
&& IsFormSatisfied(blank.Form)
&& IsNatureSatisfied((int)blank.Nature)
&& IsStarsSatisfied(enc)
&& IsTeraTypeSatisfied(raid, enc)
&& IsRewardsSatisfied(container, enc, raid, SandwichBoost)
&& IsGenderSatisfied(enc, blank.Gender)
&& IsBatchFilterSatisfied(blank);
}
public bool FilterSatisfied(
RaidContainer container,
IReadOnlyList encounters,
IReadOnlyList raids,
int sandwichBoost
)
{
if (raids.Count != encounters.Count)
throw new Exception("Raid count does not match Encounter count");
for (int i = 0; i < raids.Count; i++)
{
if (FilterSatisfied(container, encounters[i], raids[i], sandwichBoost))
return true;
}
return false;
}
}
================================================
FILE: RaidCrawler.Core/Structures/RaidRewards.cs
================================================
using FlatSharp.Attributes;
using PKHeX.Core;
using System.ComponentModel;
using System.Text.Json.Serialization;
namespace RaidCrawler.Core.Structures;
public static class Rewards
{
private static readonly int[][] RewardSlots =
[
[4, 5, 6, 7, 8],
[4, 5, 6, 7, 8],
[5, 6, 7, 8, 9],
[5, 6, 7, 8, 9],
[6, 7, 8, 9, 10],
[7, 8, 9, 10, 11],
[7, 8, 9, 10, 11],
];
public static ReadOnlySpan RareRewards =>
[
4,
645,
1606,
1904,
1905,
1906,
1907,
1908,
795,
];
public static ReadOnlySpan TMIndexes =>
[
005, 036, 204, 313, 097, 189, 184, 182, 424, 422,
423, 352, 067, 491, 512, 522, 060, 109, 168, 574,
885, 884, 886, 451, 083, 263, 342, 332, 523, 506,
555, 232, 129, 345, 196, 341, 317, 577, 488, 490,
314, 500, 101, 374, 525, 474, 419, 203, 521, 241,
240, 201, 883, 684, 473, 091, 331, 206, 280, 428,
369, 421, 492, 706, 339, 403, 034, 007, 009, 008,
214, 402, 486, 409, 115, 113, 350, 127, 337, 605,
118, 447, 086, 398, 707, 156, 157, 269, 014, 776,
191, 390, 286, 430, 399, 141, 598, 019, 285, 442,
349, 408, 441, 164, 334, 404, 529, 261, 242, 271,
710, 202, 396, 366, 247, 406, 446, 304, 257, 412,
094, 484, 227, 057, 861, 053, 085, 583, 133, 347,
270, 676, 226, 414, 179, 058, 604, 580, 678, 581,
417, 126, 056, 059, 519, 518, 520, 528, 188, 089,
444, 566, 416, 307, 308, 338, 200, 315, 411, 437,
542, 433, 405, 063, 413, 394, 087, 370, 076, 434,
796, 851,
];
public static int GetRewardCount(int random, int stars) => random switch
{
< 10 => RewardSlots[stars - 1][0],
< 40 => RewardSlots[stars - 1][1],
< 70 => RewardSlots[stars - 1][2],
< 90 => RewardSlots[stars - 1][3],
_ => RewardSlots[stars - 1][4],
};
public static List<(int, int, int)> ReorderRewards(List<(int, int, int)> rewards)
{
var rares = new List<(int, int, int)>();
var commons = new List<(int, int, int)>();
for (int i = 0; i < rewards.Count; i++)
{
if (RareRewards.Contains(rewards[i].Item1))
rares.Add(rewards[i]);
else
commons.Add(rewards[i]);
}
rares.AddRange(commons);
return rares;
}
public static bool IsTM(int item) => item switch
{
>= 328 and <= 419 => true, // TM001 to TM092, skip TM000 Mega Punch
618 or 619 or 620 => true, // TM093 to TM095
690 or 691 or 692 or 693 => true, // TM096 to TM099
>= 2160 and <= 2289 => true, // TM100 to TM229
_ => false,
};
public static string GetNameTM(int item, IReadOnlyList items, IReadOnlyList moves, ReadOnlySpan tm) => item switch
{
>= 328 and <= 419 => $"{items[item]} {moves[tm[001 + item - 328]]}", // TM001 to TM092, skip TM000 Mega Punch
618 or 619 or 620 => $"{items[item]} {moves[tm[093 + item - 618]]}", // TM093 to TM095
690 or 691 or 692 or 693 => $"{items[item]} {moves[tm[096 + item - 690]]}", // TM096 to TM099
_ => $"{items[item]} {moves[tm[100 + item - 2160]]}", // TM100 to TM229
};
public static int GetTeraShard(int type) => (MoveType)type switch
{
MoveType.Normal => 1862,
MoveType.Fighting => 1868,
MoveType.Flying => 1871,
MoveType.Poison => 1869,
MoveType.Ground => 1870,
MoveType.Rock => 1874,
MoveType.Bug => 1873,
MoveType.Ghost => 1875,
MoveType.Steel => 1878,
MoveType.Fire => 1863,
MoveType.Water => 1864,
MoveType.Grass => 1866,
MoveType.Electric => 1865,
MoveType.Psychic => 1872,
MoveType.Ice => 1867,
MoveType.Dragon => 1876,
MoveType.Dark => 1877,
MoveType.Fairy => 1879,
_ => 20000,
};
public static int GetMaterial(int species) => (Species)species switch
{
Species.Venonat or Species.Venomoth => 1956,
Species.Diglett or Species.Dugtrio => 1957,
Species.Meowth or Species.Persian => 1958,
Species.Psyduck or Species.Golduck => 1959,
Species.Mankey or Species.Primeape or Species.Annihilape => 1960,
Species.Growlithe or Species.Arcanine => 1961,
Species.Slowpoke or Species.Slowbro or Species.Slowking => 1962,
Species.Magnemite or Species.Magneton or Species.Magnezone => 1963,
Species.Grimer or Species.Muk => 1964,
Species.Shellder or Species.Cloyster => 1965,
Species.Gastly or Species.Haunter or Species.Gengar => 1966,
Species.Drowzee or Species.Hypno => 1967,
Species.Voltorb or Species.Electrode => 1968,
Species.Scyther or Species.Scizor or Species.Kleavor => 1969,
Species.Tauros => 1970,
Species.Magikarp or Species.Gyarados => 1971,
Species.Ditto => 1972,
Species.Eevee
or Species.Vaporeon
or Species.Jolteon
or Species.Flareon
or Species.Espeon
or Species.Umbreon
or Species.Leafeon
or Species.Glaceon
or Species.Sylveon
=> 1973,
Species.Dratini or Species.Dragonair or Species.Dragonite => 1974,
Species.Pichu or Species.Pikachu or Species.Raichu => 1975,
Species.Igglybuff or Species.Jigglypuff or Species.Wigglytuff => 1976,
Species.Mareep or Species.Flaaffy or Species.Ampharos => 1977,
Species.Hoppip or Species.Skiploom or Species.Jumpluff => 1978,
Species.Sunkern or Species.Sunflora => 1979,
Species.Murkrow or Species.Honchkrow => 1980,
Species.Misdreavus or Species.Mismagius => 1981,
Species.Girafarig or Species.Farigiraf => 1982,
Species.Pineco or Species.Forretress => 1983,
Species.Dunsparce or Species.Dudunsparce => 1984,
Species.Qwilfish or Species.Overqwil => 1985,
Species.Heracross => 1986,
Species.Sneasel or Species.Weavile or Species.Sneasler => 1987,
Species.Teddiursa or Species.Ursaring or Species.Ursaluna => 1988,
Species.Delibird => 1989,
Species.Houndour or Species.Houndoom => 1990,
Species.Phanpy or Species.Donphan => 1991,
Species.Stantler or Species.Wyrdeer => 1992,
Species.Larvitar or Species.Pupitar or Species.Tyranitar => 1993,
Species.Wingull or Species.Pelipper => 1994,
Species.Ralts or Species.Kirlia or Species.Gardevoir or Species.Gallade => 1995,
Species.Surskit or Species.Masquerain => 1996,
Species.Shroomish or Species.Breloom => 1997,
Species.Slakoth or Species.Vigoroth or Species.Slaking => 1998,
Species.Makuhita or Species.Hariyama => 1999,
Species.Azurill or Species.Marill or Species.Azumarill => 2000,
Species.Sableye => 2001,
Species.Meditite or Species.Medicham => 2002,
Species.Gulpin or Species.Swalot => 2003,
Species.Numel or Species.Camerupt => 2004,
Species.Torkoal => 2005,
Species.Spoink or Species.Grumpig => 2006,
Species.Cacnea or Species.Cacturne => 2007,
Species.Swablu or Species.Altaria => 2008,
Species.Zangoose => 2009,
Species.Seviper => 2010,
Species.Barboach or Species.Whiscash => 2011,
Species.Shuppet or Species.Banette => 2012,
Species.Tropius => 2013,
Species.Snorunt or Species.Glalie or Species.Froslass => 2014,
Species.Luvdisc => 2015,
Species.Bagon or Species.Shelgon or Species.Salamence => 2016,
Species.Starly or Species.Staravia or Species.Staraptor => 2017,
Species.Kricketot or Species.Kricketune => 2018,
Species.Shinx or Species.Luxio or Species.Luxray => 2019,
Species.Combee or Species.Vespiquen => 2020,
Species.Pachirisu => 2021,
Species.Buizel or Species.Floatzel => 2022,
Species.Shellos or Species.Gastrodon => 2023,
Species.Drifloon or Species.Drifblim => 2024,
Species.Stunky or Species.Skuntank => 2025,
Species.Bronzor or Species.Bronzong => 2026,
Species.Bonsly or Species.Sudowoodo => 2027,
Species.Happiny or Species.Chansey or Species.Blissey => 2028,
Species.Spiritomb => 2029,
Species.Gible or Species.Gabite or Species.Garchomp => 2030,
Species.Riolu or Species.Lucario => 2031,
Species.Hippopotas or Species.Hippowdon => 2032,
Species.Croagunk or Species.Toxicroak => 2033,
Species.Finneon or Species.Lumineon => 2034,
Species.Snover or Species.Abomasnow => 2035,
Species.Rotom => 2036,
Species.Petilil or Species.Lilligant => 2037,
Species.Basculin or Species.Basculegion => 2038,
Species.Sandile or Species.Krokorok or Species.Krookodile => 2039,
Species.Zorua or Species.Zoroark => 2040,
Species.Gothita or Species.Gothorita or Species.Gothitelle => 2041,
Species.Deerling or Species.Sawsbuck => 2042,
Species.Foongus or Species.Amoonguss => 2043,
Species.Alomomola => 2044,
Species.Tynamo or Species.Eelektrik or Species.Eelektross => 2045,
Species.Axew or Species.Fraxure or Species.Haxorus => 2046,
Species.Cubchoo or Species.Beartic => 2047,
Species.Cryogonal => 2048,
Species.Pawniard or Species.Bisharp or Species.Kingambit => 2049,
Species.Rufflet or Species.Braviary => 2050,
Species.Deino or Species.Zweilous or Species.Hydreigon => 2051,
Species.Larvesta or Species.Volcarona => 2052,
Species.Fletchling or Species.Fletchinder or Species.Talonflame => 2053,
Species.Scatterbug or Species.Spewpa or Species.Vivillon => 2054,
Species.Litleo or Species.Pyroar => 2055,
Species.Flabébé or Species.Floette or Species.Florges => 2056,
Species.Skiddo or Species.Gogoat => 2057,
Species.Skrelp or Species.Dragalge => 2058,
Species.Clauncher or Species.Clawitzer => 2059,
Species.Hawlucha => 2060,
Species.Dedenne => 2061,
Species.Goomy or Species.Sliggoo or Species.Goodra => 2062,
Species.Klefki => 2063,
Species.Bergmite or Species.Avalugg => 2064,
Species.Noibat or Species.Noivern => 2065,
Species.Yungoos or Species.Gumshoos => 2066,
Species.Crabrawler or Species.Crabominable => 2067,
Species.Oricorio => 2068,
Species.Rockruff or Species.Lycanroc => 2069,
Species.Mareanie or Species.Toxapex => 2070,
Species.Mudbray or Species.Mudsdale => 2071,
Species.Fomantis or Species.Lurantis => 2072,
Species.Salandit or Species.Salazzle => 2073,
Species.Bounsweet or Species.Steenee or Species.Tsareena => 2074,
Species.Oranguru => 2075,
Species.Passimian => 2076,
Species.Sandygast or Species.Palossand => 2077,
Species.Komala => 2078,
Species.Mimikyu => 2079,
Species.Bruxish => 2080,
Species.Chewtle or Species.Drednaw => 2081,
Species.Skwovet or Species.Greedent => 2082,
Species.Arrokuda or Species.Barraskewda => 2083,
Species.Rookidee or Species.Corvisquire or Species.Corviknight => 2084,
Species.Toxel or Species.Toxtricity => 2085,
Species.Falinks => 2086,
Species.Cufant or Species.Copperajah => 2087,
Species.Rolycoly or Species.Carkol or Species.Coalossal => 2088,
Species.Silicobra or Species.Sandaconda => 2089,
Species.Indeedee => 2090,
Species.Pincurchin => 2091,
Species.Snom or Species.Frosmoth => 2092,
Species.Impidimp or Species.Morgrem or Species.Grimmsnarl => 2093,
Species.Applin or Species.Flapple or Species.Appletun => 2094,
Species.Sinistea or Species.Polteageist => 2095,
Species.Hatenna or Species.Hattrem or Species.Hatterene => 2096,
Species.Stonjourner => 2097,
Species.Eiscue => 2098,
Species.Dreepy or Species.Drakloak or Species.Dragapult => 2099,
Species.Lechonk or Species.Oinkologne => 2103,
Species.Tarountula or Species.Spidops => 2104,
Species.Nymble or Species.Lokix => 2105,
Species.Rellor or Species.Rabsca => 2106,
Species.Greavard or Species.Houndstone => 2107,
Species.Flittle or Species.Espathra => 2108,
Species.Wiglett or Species.Wugtrio => 2109,
Species.Dondozo => 2110,
Species.Veluza => 2111,
Species.Finizen or Species.Palafin => 2112,
Species.Smoliv or Species.Dolliv or Species.Arboliva => 2113,
Species.Capsakid or Species.Scovillain => 2114,
Species.Tadbulb or Species.Bellibolt => 2115,
Species.Varoom or Species.Revavroom => 2116,
Species.Orthworm => 2117,
Species.Tandemaus or Species.Maushold => 2118,
Species.Cetoddle or Species.Cetitan => 2119,
Species.Frigibax or Species.Arctibax or Species.Baxcalibur => 2120,
Species.Tatsugiri => 2121,
Species.Cyclizar => 2122,
Species.Pawmi or Species.Pawmo or Species.Pawmot => 2123,
Species.Wattrel or Species.Kilowattrel => 2126,
Species.Bombirdier => 2127,
Species.Squawkabilly => 2128,
Species.Flamigo => 2129,
Species.Klawf => 2130,
Species.Nacli or Species.Naclstack or Species.Garganacl => 2131,
Species.Glimmet or Species.Glimmora => 2132,
Species.Shroodle or Species.Grafaiai => 2133,
Species.Fidough or Species.Dachsbun => 2134,
Species.Maschiff or Species.Mabosstiff => 2135,
Species.Bramblin or Species.Brambleghast => 2136,
Species.Gimmighoul or Species.Gholdengo => 2137,
Species.Tinkatink or Species.Tinkatuff or Species.Tinkaton => 2156,
Species.Charcadet or Species.Armarouge or Species.Ceruledge => 2157,
Species.Toedscool or Species.Toedscruel => 2158,
Species.Wooper or Species.Quagsire or Species.Clodsire => 2159,
Species.Ekans or Species.Arbok => 2438,
Species.Sandshrew or Species.Sandslash => 2439,
Species.Cleffa or Species.Clefairy or Species.Clefable => 2440,
Species.Vulpix or Species.Ninetales => 2441,
Species.Poliwag
or Species.Poliwhirl
or Species.Poliwrath
or Species.Politoed
=> 2442,
Species.Bellsprout or Species.Weepinbell or Species.Victreebel => 2443,
Species.Geodude or Species.Graveler or Species.Golem => 2444,
Species.Koffing or Species.Weezing => 2445,
Species.Munchlax or Species.Snorlax => 2446,
Species.Sentret or Species.Furret => 2447,
Species.Hoothoot or Species.Noctowl => 2448,
Species.Spinarak or Species.Ariados => 2449,
Species.Aipom or Species.Ambipom => 2450,
Species.Yanma or Species.Yanmega => 2451,
Species.Gligar or Species.Gliscor => 2452,
Species.Slugma or Species.Magcargo => 2453,
Species.Swinub or Species.Piloswine or Species.Mamoswine => 2454,
Species.Poochyena or Species.Mightyena => 2455,
Species.Lotad or Species.Lombre or Species.Ludicolo => 2456,
Species.Seedot or Species.Nuzleaf or Species.Shiftry => 2457,
Species.Nosepass or Species.Probopass => 2458,
Species.Volbeat => 2459,
Species.Illumise => 2460,
Species.Corphish or Species.Crawdaunt => 2461,
Species.Feebas or Species.Milotic => 2462,
Species.Duskull or Species.Dusclops or Species.Dusknoir => 2463,
Species.Chingling or Species.Chimecho => 2464,
Species.Timburr or Species.Gurdurr or Species.Conkeldurr => 2465,
Species.Sewaddle or Species.Swadloon or Species.Leavanny => 2466,
Species.Ducklett or Species.Swanna => 2467,
Species.Litwick or Species.Lampent or Species.Chandelure => 2468,
Species.Mienfoo or Species.Mienshao => 2469,
Species.Vullaby or Species.Mandibuzz => 2470,
Species.Carbink => 2471,
Species.Phantump or Species.Trevenant => 2472,
Species.Grubbin or Species.Charjabug or Species.Vikavolt => 2473,
Species.Cutiefly or Species.Ribombee => 2474,
Species.Jangmoo or Species.Hakamoo or Species.Kommoo => 2475,
Species.Cramorant => 2476,
Species.Morpeko => 2477,
Species.Poltchageist or Species.Sinistcha => 2478,
_ => 10000,
};
}
public class RaidFixedRewards
{
public ulong TableName { get; set; }
public RaidFixedRewardItemInfo? RewardItem00 { get; set; }
public RaidFixedRewardItemInfo? RewardItem01 { get; set; }
public RaidFixedRewardItemInfo? RewardItem02 { get; set; }
public RaidFixedRewardItemInfo? RewardItem03 { get; set; }
public RaidFixedRewardItemInfo? RewardItem04 { get; set; }
public RaidFixedRewardItemInfo? RewardItem05 { get; set; }
public RaidFixedRewardItemInfo? RewardItem06 { get; set; }
public RaidFixedRewardItemInfo? RewardItem07 { get; set; }
public RaidFixedRewardItemInfo? RewardItem08 { get; set; }
public RaidFixedRewardItemInfo? RewardItem09 { get; set; }
public RaidFixedRewardItemInfo? RewardItem10 { get; set; }
public RaidFixedRewardItemInfo? RewardItem11 { get; set; }
public RaidFixedRewardItemInfo? RewardItem12 { get; set; }
public RaidFixedRewardItemInfo? RewardItem13 { get; set; }
public RaidFixedRewardItemInfo? RewardItem14 { get; set; }
public const int Count = 15;
public RaidFixedRewardItemInfo? GetReward(int index) => index switch
{
00 => RewardItem00,
01 => RewardItem01,
02 => RewardItem02,
03 => RewardItem03,
04 => RewardItem04,
05 => RewardItem05,
06 => RewardItem06,
07 => RewardItem07,
08 => RewardItem08,
09 => RewardItem09,
10 => RewardItem10,
11 => RewardItem11,
12 => RewardItem12,
13 => RewardItem13,
14 => RewardItem14,
_ => throw new ArgumentOutOfRangeException(nameof(index)),
};
}
public class RaidLotteryRewards
{
public ulong TableName { get; set; }
public RaidLotteryRewardItemInfo? RewardItem00 { get; set; }
public RaidLotteryRewardItemInfo? RewardItem01 { get; set; }
public RaidLotteryRewardItemInfo? RewardItem02 { get; set; }
public RaidLotteryRewardItemInfo? RewardItem03 { get; set; }
public RaidLotteryRewardItemInfo? RewardItem04 { get; set; }
public RaidLotteryRewardItemInfo? RewardItem05 { get; set; }
public RaidLotteryRewardItemInfo? RewardItem06 { get; set; }
public RaidLotteryRewardItemInfo? RewardItem07 { get; set; }
public RaidLotteryRewardItemInfo? RewardItem08 { get; set; }
public RaidLotteryRewardItemInfo? RewardItem09 { get; set; }
public RaidLotteryRewardItemInfo? RewardItem10 { get; set; }
public RaidLotteryRewardItemInfo? RewardItem11 { get; set; }
public RaidLotteryRewardItemInfo? RewardItem12 { get; set; }
public RaidLotteryRewardItemInfo? RewardItem13 { get; set; }
public RaidLotteryRewardItemInfo? RewardItem14 { get; set; }
public RaidLotteryRewardItemInfo? RewardItem15 { get; set; }
public RaidLotteryRewardItemInfo? RewardItem16 { get; set; }
public RaidLotteryRewardItemInfo? RewardItem17 { get; set; }
public RaidLotteryRewardItemInfo? RewardItem18 { get; set; }
public RaidLotteryRewardItemInfo? RewardItem19 { get; set; }
public RaidLotteryRewardItemInfo? RewardItem20 { get; set; }
public RaidLotteryRewardItemInfo? RewardItem21 { get; set; }
public RaidLotteryRewardItemInfo? RewardItem22 { get; set; }
public RaidLotteryRewardItemInfo? RewardItem23 { get; set; }
public RaidLotteryRewardItemInfo? RewardItem24 { get; set; }
public RaidLotteryRewardItemInfo? RewardItem25 { get; set; }
public RaidLotteryRewardItemInfo? RewardItem26 { get; set; }
public RaidLotteryRewardItemInfo? RewardItem27 { get; set; }
public RaidLotteryRewardItemInfo? RewardItem28 { get; set; }
public RaidLotteryRewardItemInfo? RewardItem29 { get; set; }
public const int RewardItemCount = 30;
// Get reward item from index
public RaidLotteryRewardItemInfo? GetRewardItem(int index) => index switch
{
00 => RewardItem00,
01 => RewardItem01,
02 => RewardItem02,
03 => RewardItem03,
04 => RewardItem04,
05 => RewardItem05,
06 => RewardItem06,
07 => RewardItem07,
08 => RewardItem08,
09 => RewardItem09,
10 => RewardItem10,
11 => RewardItem11,
12 => RewardItem12,
13 => RewardItem13,
14 => RewardItem14,
15 => RewardItem15,
16 => RewardItem16,
17 => RewardItem17,
18 => RewardItem18,
19 => RewardItem19,
20 => RewardItem20,
21 => RewardItem21,
22 => RewardItem22,
23 => RewardItem23,
24 => RewardItem24,
25 => RewardItem25,
26 => RewardItem26,
27 => RewardItem27,
28 => RewardItem28,
29 => RewardItem29,
_ => throw new ArgumentOutOfRangeException(nameof(index), index, null),
};
}
[JsonSerializable(typeof(RaidLotteryRewardItemInfo))]
[FlatBufferTable, TypeConverter(typeof(ExpandableObjectConverter))]
public class RaidLotteryRewardItemInfo
{
[FlatBufferItem(0)]
public int Category { get; set; }
[FlatBufferItem(1)]
public int ItemID { get; set; }
[FlatBufferItem(2)]
public sbyte Num { get; set; }
[FlatBufferItem(3)]
public int Rate { get; set; }
[FlatBufferItem(4)]
public bool RareItemFlag { get; set; }
}
[JsonSerializable(typeof(RaidFixedRewardItemInfo))]
[FlatBufferTable, TypeConverter(typeof(ExpandableObjectConverter))]
public class RaidFixedRewardItemInfo
{
[FlatBufferItem(0)]
public int Category { get; set; }
[FlatBufferItem(1)]
public int SubjectType { get; set; }
[FlatBufferItem(2)]
public int ItemID { get; set; }
[FlatBufferItem(3)]
public sbyte Num { get; set; }
}
================================================
FILE: RaidCrawler.Core/Structures/TeraDistribution.cs
================================================
using PKHeX.Core;
using pkNX.Structures.FlatBuffers.Gen9;
using System.Diagnostics;
using static System.Buffers.Binary.BinaryPrimitives;
namespace RaidCrawler.Core.Structures;
public class TeraDistribution : ITeraRaid
{
public readonly EncounterDist9 Entity; // Raw data
public readonly ulong DropTableFix;
public readonly ulong DropTableRandom;
public readonly ushort[] ExtraMoves;
public readonly sbyte DeliveryGroupID;
public ushort Species => Entity.Species;
public byte Form => Entity.Form;
public byte Gender => Entity.Gender;
public AbilityPermission Ability => Entity.Ability;
public byte FlawlessIVCount => Entity.FlawlessIVCount;
public Shiny Shiny => Entity.Shiny;
public Nature Nature => Entity.Nature;
public byte Level => Entity.Level;
public IndividualValueSet IVs => Entity.IVs;
public ushort Move1 => Entity.Moves.Move1;
public ushort Move2 => Entity.Moves.Move2;
public ushort Move3 => Entity.Moves.Move3;
public ushort Move4 => Entity.Moves.Move4;
public byte Stars => Entity.Stars;
public byte RandRate => Entity.RandRate;
ushort[] ITeraRaid.ExtraMoves => ExtraMoves;
public static bool AvailableInGame(ITeraRaid9 enc, string game) => enc switch
{
EncounterDist9 encd => game switch
{
"Scarlet" => encd.RandRate0TotalScarlet + encd.RandRate1TotalScarlet + encd.RandRate2TotalScarlet + encd.RandRate3TotalScarlet != 0,
"Violet" => encd.RandRate0TotalViolet + encd.RandRate1TotalViolet + encd.RandRate2TotalViolet + encd.RandRate3TotalViolet != 0,
_ => false,
},
EncounterMight9 encm => game switch
{
"Scarlet" => encm.RandRate0TotalScarlet + encm.RandRate1TotalScarlet + encm.RandRate2TotalScarlet + encm.RandRate3TotalScarlet != 0,
"Violet" => encm.RandRate0TotalViolet + encm.RandRate1TotalViolet + encm.RandRate2TotalViolet + encm.RandRate3TotalViolet != 0,
_ => false,
},
_ => false,
};
public TeraDistribution(EncounterDist9 enc, ulong fixedRewards, ulong lotteryRewards, ushort[] extras, sbyte group)
{
Entity = enc;
DropTableFix = fixedRewards;
DropTableRandom = lotteryRewards;
ExtraMoves = extras
.Where(z => z != 0 && !Entity.Moves.Contains(z))
.Distinct()
.ToArray();
DeliveryGroupID = group;
if (ExtraMoves.Length > 4)
Debug.WriteLine(ExtraMoves);
}
public static TeraDistribution[] GetAllEncounters(ReadOnlyMemory encounters)
{
var all = FlatbufferDumper.DumpDistributionRaids(encounters);
var type2 = EncounterDist9.GetArray(all[0]);
var rewards2 = GetRewardTables(all[2]);
var extra2 = all[4];
var group2 = all[6];
var result = new TeraDistribution[type2.Length];
for (int i = 0; i < result.Length; i++)
{
var i1 = rewards2[i].Item1;
var i2 = rewards2[i].Item2;
var extras = extra2[(12 * i)..];
result[i] = new TeraDistribution(type2[i], i1, i2, GetExtraMoves(extras), (sbyte)group2[i]);
}
return result;
}
public static (ulong, ulong)[] GetRewardTables(ReadOnlySpan rewards)
{
var count = rewards.Length / 0x10;
var result = new (ulong, ulong)[count];
for (int i = 0; i < result.Length; i++)
{
var reward1 = ReadUInt64LittleEndian(rewards[(0x10 * i)..]);
var reward2 = ReadUInt64LittleEndian(rewards[((0x10 * i) + 0x8)..]);
result[i] = (reward1, reward2);
}
return result;
}
public static ushort[] GetExtraMoves(ReadOnlySpan extra)
{
var result = new ushort[6];
for (int i = 0; i < result.Length; i++)
result[i] = ReadUInt16LittleEndian(extra[(0x2 * i)..]);
return result;
}
public static List<(int, int, int)> GetRewards(
TeraDistribution enc,
uint seed,
int teraType,
IReadOnlyList? fixedRewards,
IReadOnlyList? lotteryRewards,
int boost
)
{
List<(int, int, int)> result = [];
if (lotteryRewards is null)
return result;
if (fixedRewards is null)
return result;
var fixedTable = fixedRewards.FirstOrDefault(z => z.TableName == enc.DropTableFix);
if (fixedTable is null)
return result;
var lotteryTable = lotteryRewards.FirstOrDefault(z => z.TableName == enc.DropTableRandom);
if (lotteryTable is null)
return result;
// fixed reward
for (int i = 0; i < DeliveryRaidFixedRewardItem.Count; i++)
{
var item = fixedTable.GetReward(i);
if (item is { Category: 0, ItemID: 0 })
continue;
var itemID = GetActualItemID(enc, teraType, item);
result.Add((itemID, item.Num, item.SubjectType));
}
// lottery reward
var total = 0;
for (int i = 0; i < DeliveryRaidLotteryRewardItem.RewardItemCount; i++)
total += lotteryTable.GetRewardItem(i).Rate;
var rand = new Xoroshiro128Plus(seed);
var count = (int)rand.NextInt(100);
count = Rewards.GetRewardCount(count, enc.Stars) + boost;
for (int i = 0; i < count; i++)
{
var roll = (int)rand.NextInt((ulong)total);
for (int j = 0; j < DeliveryRaidLotteryRewardItem.RewardItemCount; j++)
{
var item = lotteryTable.GetRewardItem(j);
if (roll < item.Rate)
{
if (item.Category == 0)
result.Add((item.ItemID, item.Num, 0));
else if (item.Category == 1)
result.Add(item.ItemID == 0 ? (Rewards.GetMaterial(enc.Species), item.Num, 0) : (item.ItemID, item.Num, 0));
else
result.Add(item.ItemID == 0 ? (Rewards.GetTeraShard(teraType), item.Num, 0) : (item.ItemID, item.Num, 0));
break;
}
roll -= item.Rate;
}
}
return Rewards.ReorderRewards(result);
}
private static int GetActualItemID(ISpeciesForm enc, int teraType, pkNX.Structures.FlatBuffers.Gen9.RaidFixedRewardItemInfo item)
{
if (item.ItemID != 0)
return item.ItemID;
if (item.Category == 2)
return Rewards.GetTeraShard(teraType);
return Rewards.GetMaterial(enc.Species);
}
}
public class TeraMight : ITeraRaid
{
public readonly EncounterMight9 Entity; // Raw data
public readonly ulong DropTableFix;
public readonly ulong DropTableRandom;
public readonly ushort[] ExtraMoves;
public readonly sbyte DeliveryGroupID;
public ushort Species => Entity.Species;
public byte Form => Entity.Form;
public byte Gender => Entity.Gender;
public AbilityPermission Ability => Entity.Ability;
public byte FlawlessIVCount => Entity.FlawlessIVCount;
public Shiny Shiny => Entity.Shiny;
public Nature Nature => Entity.Nature;
public byte Level => Entity.Level;
public IndividualValueSet IVs => Entity.IVs;
public ushort Move1 => Entity.Moves.Move1;
public ushort Move2 => Entity.Moves.Move2;
public ushort Move3 => Entity.Moves.Move3;
public ushort Move4 => Entity.Moves.Move4;
public byte Stars => Entity.Stars;
public byte RandRate => Entity.RandRate;
ushort[] ITeraRaid.ExtraMoves => ExtraMoves;
public static bool AvailableInGame(ITeraRaid9 enc, string game) => enc switch
{
EncounterDist9 encd => game switch
{
"Scarlet" => encd.RandRate0TotalScarlet + encd.RandRate1TotalScarlet + encd.RandRate2TotalScarlet + encd.RandRate3TotalScarlet != 0,
"Violet" => encd.RandRate0TotalViolet + encd.RandRate1TotalViolet + encd.RandRate2TotalViolet + encd.RandRate3TotalViolet != 0,
_ => false,
},
EncounterMight9 encm => game switch
{
"Scarlet" => encm.RandRate0TotalScarlet + encm.RandRate1TotalScarlet + encm.RandRate2TotalScarlet + encm.RandRate3TotalScarlet != 0,
"Violet" => encm.RandRate0TotalViolet + encm.RandRate1TotalViolet + encm.RandRate2TotalViolet + encm.RandRate3TotalViolet != 0,
_ => false,
},
_ => false,
};
public TeraMight(EncounterMight9 enc, ulong fixedRewards, ulong lotteryRewards, ushort[] extras, sbyte group)
{
Entity = enc;
DropTableFix = fixedRewards;
DropTableRandom = lotteryRewards;
ExtraMoves = extras
.Where(z => z != 0 && !Entity.Moves.Contains(z))
.Distinct()
.ToArray();
DeliveryGroupID = group;
if (ExtraMoves.Length > 4)
Debug.WriteLine(ExtraMoves);
}
public static TeraMight[] GetAllEncounters(ReadOnlyMemory encounters)
{
var all = FlatbufferDumper.DumpDistributionRaids(encounters);
var type3 = EncounterMight9.GetArray(all[1]);
var rewards3 = GetRewardTables(all[3]);
var extra3 = all[5];
var group3 = all[7];
var result = new TeraMight[type3.Length];
for (int i = 0; i < result.Length; i++)
{
var item1 = rewards3[i].Item1;
var item2 = rewards3[i].Item2;
var extra = GetExtraMoves(extra3[(12 * i)..]);
result[i] = new TeraMight(type3[i], item1, item2, extra, (sbyte)group3[i]);
}
return result;
}
public static (ulong, ulong)[] GetRewardTables(ReadOnlySpan rewards)
{
var count = rewards.Length / 0x10;
var result = new (ulong, ulong)[count];
for (int i = 0; i < result.Length; i++)
{
var item1 = ReadUInt64LittleEndian(rewards[(0x10 * i)..]);
var item2 = ReadUInt64LittleEndian(rewards[((0x10 * i) + 0x8)..]);
result[i] = (item1, item2);
}
return result;
}
public static ushort[] GetExtraMoves(ReadOnlySpan extra)
{
var result = new ushort[6];
for (int i = 0; i < result.Length; i++)
result[i] = ReadUInt16LittleEndian(extra[(0x2 * i)..]);
return result;
}
public static List<(int, int, int)> GetRewards(TeraMight enc, uint seed, int teraType, IReadOnlyList? fixedRewards, IReadOnlyList? lotteryRewards, int boost)
{
List<(int, int, int)> result = [];
if (lotteryRewards is null)
return result;
if (fixedRewards is null)
return result;
var fixedTable = fixedRewards.FirstOrDefault(z => z.TableName == enc.DropTableFix);
if (fixedTable is null)
return result;
var lotteryTable = lotteryRewards.FirstOrDefault(z => z.TableName == enc.DropTableRandom);
if (lotteryTable is null)
return result;
// fixed reward
for (int i = 0; i < DeliveryRaidFixedRewardItem.Count; i++)
{
var item = fixedTable.GetReward(i);
if (item is { Category: 0, ItemID: 0 })
continue;
var itemID = GetActualItemID(enc, teraType, item);
result.Add((itemID, item.Num, item.SubjectType));
}
// lottery reward
var total = 0;
for (int i = 0; i < DeliveryRaidLotteryRewardItem.RewardItemCount; i++)
total += lotteryTable.GetRewardItem(i).Rate;
var rand = new Xoroshiro128Plus(seed);
var count = (int)rand.NextInt(100);
count = Rewards.GetRewardCount(count, enc.Stars) + boost;
for (int i = 0; i < count; i++)
{
var roll = (int)rand.NextInt((ulong)total);
for (int j = 0; j < DeliveryRaidLotteryRewardItem.RewardItemCount; j++)
{
var item = lotteryTable.GetRewardItem(j);
if (roll < item.Rate)
{
if (item.Category == 0)
result.Add((item.ItemID, item.Num, 0));
else if (item.Category == 1)
result.Add(item.ItemID == 0 ? (Rewards.GetMaterial(enc.Species), item.Num, 0) : (item.ItemID, item.Num, 0));
else
result.Add(item.ItemID == 0 ? (Rewards.GetTeraShard(teraType), item.Num, 0) : (item.ItemID, item.Num, 0));
break;
}
roll -= item.Rate;
}
}
return Rewards.ReorderRewards(result);
}
private static int GetActualItemID(ISpeciesForm enc, int teraType, pkNX.Structures.FlatBuffers.Gen9.RaidFixedRewardItemInfo item)
{
if (item.ItemID != 0)
return item.ItemID;
if (item.Category == 2)
return Rewards.GetTeraShard(teraType);
return Rewards.GetMaterial(enc.Species);
}
}
================================================
FILE: RaidCrawler.Core/Structures/TeraEncounter.cs
================================================
using PKHeX.Core;
using pkNX.Structures.FlatBuffers.Gen9;
using System.Diagnostics;
namespace RaidCrawler.Core.Structures;
public class TeraEncounter : ITeraRaid
{
public readonly EncounterTera9 Entity; // Raw data
public readonly ulong DropTableFix;
public readonly ulong DropTableRandom;
public readonly ushort[] ExtraMoves;
public ushort Species => Entity.Species;
public byte Form => Entity.Form;
public byte Gender => Entity.Gender;
public AbilityPermission Ability => Entity.Ability;
public byte FlawlessIVCount => Entity.FlawlessIVCount;
public Shiny Shiny => Entity.Shiny;
public byte Level => Entity.Level;
public ushort Move1 => Entity.Moves.Move1;
public ushort Move2 => Entity.Moves.Move2;
public ushort Move3 => Entity.Moves.Move3;
public ushort Move4 => Entity.Moves.Move4;
public byte Stars => Entity.Stars;
public byte RandRate => Entity.RandRate;
ushort[] ITeraRaid.ExtraMoves => ExtraMoves;
public TeraEncounter(
EncounterTera9 enc,
ulong fixedRewards,
ulong lotteryRewards,
ushort[] extras
)
{
Entity = enc;
DropTableFix = fixedRewards;
DropTableRandom = lotteryRewards;
ExtraMoves = extras
.Where(z => z != 0 && !Entity.Moves.Contains(z))
.Distinct()
.ToArray();
if (ExtraMoves.Length > 4)
Debug.WriteLine(ExtraMoves);
}
public static TeraEncounter[] GetAllEncounters(string[] resources, TeraRaidMapParent map)
{
var data = FlatbufferDumper.DumpBaseROMRaids(resources);
var encs = EncounterTera9.GetArray(data[0], map);
var extras = data[1].AsSpan();
var rewards = TeraDistribution.GetRewardTables(data[2]);
var result = new TeraEncounter[encs.Length];
for (int i = 0; i < encs.Length; i++)
{
var item1 = rewards[i].Item1;
var item2 = rewards[i].Item2;
var extra = TeraDistribution.GetExtraMoves(extras[(12 * i)..]);
result[i] = new TeraEncounter(encs[i], item1, item2, extra);
}
return result;
}
public static List<(int, int, int)> GetRewards(TeraEncounter enc, uint seed, int teraType, IReadOnlyList? fixedRewards, IReadOnlyList? lotteryRewards, int boost)
{
List<(int, int, int)> result = [];
if (lotteryRewards is null || fixedRewards is null)
return result;
var fixedTable = fixedRewards.FirstOrDefault(z => z.TableName == enc.DropTableFix);
if (fixedTable is null)
return result;
var lotteryTable = lotteryRewards.FirstOrDefault(z => z.TableName == enc.DropTableRandom);
if (lotteryTable is null)
return result;
// fixed reward
for (int i = 0; i < RaidFixedRewards.Count; i++)
{
var item = fixedTable.GetReward(i);
if (item is null or { Category: 0, ItemID: 0 })
continue;
result.Add(
(
item.ItemID == 0
? item.Category == 2
? Rewards.GetTeraShard(teraType)
: Rewards.GetMaterial(enc.Species)
: item.ItemID,
item.Num,
item.SubjectType
)
);
}
// lottery reward
var total = 0;
for (int i = 0; i < RaidLotteryRewards.RewardItemCount; i++)
total += lotteryTable.GetRewardItem(i)!.Rate;
var rand = new Xoroshiro128Plus(seed);
var count = (int)rand.NextInt(100); // sandwich = extra rolls? how does this work? is this even 100?
count = Rewards.GetRewardCount(count, enc.Stars) + boost;
for (int i = 0; i < count; i++)
{
var roll = (int)rand.NextInt((ulong)total);
for (int j = 0; j < DeliveryRaidLotteryRewardItem.RewardItemCount; j++)
{
var item = lotteryTable.GetRewardItem(j)!;
if (roll < item.Rate)
{
if (item.Category == 0)
result.Add((item.ItemID, item.Num, 0));
else if (item.Category == 1)
result.Add(item.ItemID == 0 ? (Rewards.GetMaterial(enc.Species), item.Num, 0) : (item.ItemID, item.Num, 0));
else
result.Add(item.ItemID == 0 ? (Rewards.GetTeraShard(teraType), item.Num, 0) : (item.ItemID, item.Num, 0));
break;
}
roll -= item.Rate;
}
}
return Rewards.ReorderRewards(result);
}
}
================================================
FILE: RaidCrawler.Core/Structures/Utils.cs
================================================
using PKHeX.Core;
using System.Numerics;
using System.Reflection;
namespace RaidCrawler.Core.Structures;
public static class Utils
{
private static readonly Assembly thisAssembly;
private static readonly Dictionary resourceNameMap;
static Utils()
{
thisAssembly = Assembly.GetExecutingAssembly();
resourceNameMap = BuildLookup(thisAssembly.GetManifestResourceNames());
}
private static Dictionary BuildLookup(IReadOnlyCollection manifestNames)
{
var result = new Dictionary(manifestNames.Count);
foreach (var resName in manifestNames)
{
var fileName = GetFileName(resName);
result.TryAdd(fileName, resName);
}
return result;
}
private static string GetFileName(string resName)
{
var period = resName.LastIndexOf('.', resName.Length - 6);
var start = period + 1;
System.Diagnostics.Debug.Assert(start != 0);
// text file fetch excludes ".txt" (mixed case...); other extensions are used (all lowercase).
return resName.EndsWith(".txt", StringComparison.Ordinal)
? resName[start..^4].ToLowerInvariant()
: resName[start..];
}
public static byte[] GetBinaryResource(string name)
{
if (!resourceNameMap.TryGetValue(name, out var resName))
return [];
using var resource = thisAssembly.GetManifestResourceStream(resName);
if (resource is null)
return [];
var buffer = new byte[resource.Length];
_ = resource.Read(buffer, 0, (int)resource.Length);
return buffer;
}
public static string? GetStringResource(string name)
{
if (!resourceNameMap.TryGetValue(name.ToLowerInvariant(), out var resourceName))
return null;
using var resource = thisAssembly.GetManifestResourceStream(resourceName);
if (resource is null)
return null;
using var reader = new StreamReader(resource);
return reader.ReadToEnd();
}
public static Version? GetLatestVersion()
{
const string endpoint = "https://api.github.com/repos/LegoFigure11/RaidCrawler/releases/latest";
var response = NetUtil.GetStringFromURL(new Uri(endpoint));
if (response is null) return null;
const string tag = "tag_name";
var index = response.IndexOf(tag, StringComparison.Ordinal);
if (index == -1) return null;
var first = response.IndexOf('"', index + tag.Length + 1) + 1;
if (first == 0) return null;
var second = response.IndexOf('"', first);
if (second == -1) return null;
var tagString = response.AsSpan()[first..second].TrimStart('v');
var patchIndex = tagString.IndexOf('-');
if (patchIndex != -1) tagString = tagString.ToString().Remove(patchIndex).AsSpan();
return !Version.TryParse(tagString, out var latestVersion) ? null : latestVersion;
}
public static string GetFormString(ushort species, byte form, GameStrings formStrings, EntityContext context = EntityContext.Gen9)
{
var result = ShowdownParsing.GetStringFromForm(form, formStrings, species, context);
if (result.Length > 0 && result[0] != '-')
return result.Insert(0, "-");
return result;
}
public static int[] ToSpeedLast(ReadOnlySpan ivs) => [ivs[0], ivs[1], ivs[2], ivs[4], ivs[5], ivs[3]];
}
================================================
FILE: RaidCrawler.Tests/FilterTests.cs
================================================
using FluentAssertions;
using System.ComponentModel;
using Xunit;
namespace RaidCrawler.Tests;
public class FilterTests : TestUtil
{
private const string SennaDitto =
"RaidCrawler.Tests.Blocks.senna_9_132_Modest_31_0_31_31_31_31_SL"; // Progress: 4 story
private const string SennaDittoFilterAtk = "RaidCrawler.Tests.Filters.Ditto0Atk.json";
private const string SennaDittoFilterSpe = "RaidCrawler.Tests.Filters.Ditto0Spe.json";
private const string NewtShinyBounsweet =
"RaidCrawler.Tests.Blocks.newt_56_761_Calm_4_7_4_3_31_25_VL"; // Progress: 0 story
private const string NewtBounsweetFilter = "RaidCrawler.Tests.Filters.BounsweetShiny.json";
private const string IVControlFilter = "RaidCrawler.Tests.Filters.IVControl.json";
[Theory]
[InlineData(SennaDitto, SennaDittoFilterAtk, IVControlFilter, 4)]
[InlineData(SennaDitto, SennaDittoFilterSpe, IVControlFilter, 4)]
[InlineData(NewtShinyBounsweet, NewtBounsweetFilter, IVControlFilter, 0)]
[Description("Test various stat filters.")]
public void FilterTest(string path, string filterPath, string controlPath, int storyPrg)
{
var raid = GetRaidContainer(path, storyPrg);
raid.Item1.delivery.Should().Be(0);
raid.Item1.enc.Should().Be(0);
var container = raid.Item2;
container.Should().NotBeNull();
var filter = GetRaidFilter(filterPath)[0];
filter.Should().NotBeNull();
var raids = container!.Raids;
var encounters = container.Encounters;
var satisfied = 0;
for (int i = 0; i < raids.Count; i++)
{
if (filter.FilterSatisfied(container, encounters[i], raids[i], 0))
satisfied++;
}
satisfied.Should().NotBe(0);
var controlFilter = GetRaidFilter(controlPath)[0];
filter.IVBin = controlFilter.IVBin;
filter.IVComps = controlFilter.IVComps;
filter.IVVals = controlFilter.IVVals;
satisfied = 0;
for (int i = 0; i < raids.Count; i++)
{
if (filter.FilterSatisfied(container, encounters[i], raids[i], 0))
satisfied++;
}
satisfied.Should().Be(0);
}
}
================================================
FILE: RaidCrawler.Tests/Filters/BounsweetShiny.json
================================================
[{"Name":"BounsweetShiny","Species":761,"Form":null,"Stars":null,"StarsComp":0,"Shiny":true,"Square":false,"Nature":20,"TeraType":null,"Gender":null,"IVBin":0,"IVComps":0,"IVVals":1073740831,"Enabled":true,"RewardItems":null,"RewardsComp":-1,"RewardsCount":0,"BatchFilters":null}]
================================================
FILE: RaidCrawler.Tests/Filters/Ditto0Atk.json
================================================
[{"Name":"Ditto0Atk","Species":132,"Form":null,"Stars":null,"StarsComp":0,"Shiny":false,"Square":false,"Nature":15,"TeraType":null,"Gender":null,"IVBin":63,"IVComps":0,"IVVals":1073740831,"Enabled":true,"RewardItems":null,"RewardsComp":-1,"RewardsCount":0,"BatchFilters":null}]
================================================
FILE: RaidCrawler.Tests/Filters/Ditto0Spe.json
================================================
[{"Name":"Ditto0Spe","Species":null,"Form":null,"Stars":null,"StarsComp":0,"Shiny":false,"Square":false,"Nature":null,"TeraType":null,"Gender":null,"IVBin":63,"IVComps":0,"IVVals":33554431,"Enabled":true,"RewardItems":null,"RewardsComp":-1,"RewardsCount":0,"BatchFilters":null}]
================================================
FILE: RaidCrawler.Tests/Filters/IVControl.json
================================================
[{"Name":"IVControl","Species":null,"Form":null,"Stars":null,"StarsComp":0,"Shiny":false,"Square":false,"Nature":null,"TeraType":null,"Gender":null,"IVBin":63,"IVComps":0,"IVVals":206703681,"Enabled":true,"RewardItems":null,"RewardsComp":-1,"RewardsCount":0,"BatchFilters":null}]
================================================
FILE: RaidCrawler.Tests/RaidCrawler.Tests.csproj
================================================
enable
enable
false
true
runtime; build; native; contentfiles; analyzers; buildtransitive
all
runtime; build; native; contentfiles; analyzers; buildtransitive
all
================================================
FILE: RaidCrawler.Tests/RaidReadTests.cs
================================================
using FluentAssertions;
using System.ComponentModel;
using Xunit;
namespace RaidCrawler.Tests;
public class RaidReadTests : TestUtil
{
private const string AnubisMightCleared = "RaidCrawler.Tests.Blocks.anubis_Might_cleared_VL"; // Progress: 4 story
private const string Buddy12Distro = "RaidCrawler.Tests.Blocks.buddy_12_Distro_noMight_VL"; // Progress: 3 story
private const string Chaos12Distro = "RaidCrawler.Tests.Blocks.chaos_12_Distro_noMight_VL"; // Progress: 3 story
private const string ZyroInteleonIL = "RaidCrawler.Tests.Blocks.zyro_Inteleon_IL_VL"; // Progress: 4 story
[Theory]
[InlineData(AnubisMightCleared, 4, 67)]
[InlineData(Buddy12Distro, 3, 69)]
[InlineData(Chaos12Distro, 3, 69)]
[InlineData(ZyroInteleonIL, 4, 69)]
[Description(
"Test read conditions where Might7 is possible but cleared, and where Might7 is possible but not present."
)]
public void RaidReadTest(string path, int storyPrg, int expectedRaids)
{
var raid = GetRaidContainer(path, storyPrg);
raid.Item1.delivery.Should().Be(0);
raid.Item1.enc.Should().Be(0);
var container = raid.Item2;
container.Should().NotBeNull();
var raidCount = container!.GetRaidCount();
var encCount = container.Encounters.Count;
container.GetRaidCount().Should().Be(expectedRaids);
raidCount.Should().Be(encCount);
}
}
================================================
FILE: RaidCrawler.Tests/RaidStatTests.cs
================================================
using FluentAssertions;
using PKHeX.Core;
using RaidCrawler.Core.Structures;
using System.ComponentModel;
using System.Diagnostics.Metrics;
using Xunit;
namespace RaidCrawler.Tests;
public class RaidStatTests : TestUtil
{
private const string SennaDitto = "RaidCrawler.Tests.Blocks.senna_9_132_Modest_31_0_31_31_31_31_SL"; // Progress: 4 story
private const string NewtShinyBounsweet = "RaidCrawler.Tests.Blocks.newt_56_761_Calm_4_7_4_3_31_25_VL"; // Progress: 0 story
private const string HexManiacLisaHippopotas = "RaidCrawler.Tests.Blocks.lisa_30_449_Gentle_21_31_25_21_8_31_SL"; // Progress: 4 story
[Theory]
[InlineData(SennaDitto, 4, 9, Species.Ditto, new[] { 31, 0, 31, 31, 31, 31 }, Nature.Modest, false)]
[InlineData(NewtShinyBounsweet, 0, 56, Species.Bounsweet, new[] { 4, 7, 4, 3, 31, 25 }, Nature.Calm, true)]
[InlineData(HexManiacLisaHippopotas, 4, 30, Species.Hippopotas, new[] { 21, 31, 25, 21, 8, 31 }, Nature.Gentle, false)]
[Description("Test known stats for a given raid encounter to make sure they match expected values.")]
public void StatsCorrect(string path, int storyPrg, int denIndex, Species species, int[] ivs, Nature nature, bool shiny)
{
var raids = GetRaidContainer(path, storyPrg);
raids.Item1.delivery.Should().Be(0);
raids.Item1.enc.Should().Be(0);
var container = raids.Item2;
container.Should().NotBeNull();
var raid = container!.Raids[denIndex];
var enc = container.Encounters[denIndex];
enc.Species.Should().Be((ushort)species);
var param = enc.GetParam();
var blank = new PK9 { Species = enc.Species, Form = enc.Form };
raid.GenerateDataPK9(blank, param, enc.Shiny, raid.Seed);
Span _ivs = stackalloc int[6];
blank.GetIVs(_ivs);
var encIVs = Utils.ToSpeedLast(_ivs);
encIVs.SequenceEqual(ivs).Should().BeTrue();
blank.Nature.Should().Be(nature);
blank.IsShiny.Should().Be(shiny);
}
}
================================================
FILE: RaidCrawler.Tests/TestUtil.cs
================================================
using RaidCrawler.Core.Structures;
using System.Reflection;
using System.Text.Json;
namespace RaidCrawler.Tests;
public class TestUtil
{
private readonly Assembly assembly;
public TestUtil()
{
assembly = Assembly.GetExecutingAssembly();
}
private static string GetGame(string resource) =>
resource.Contains("_VL", StringComparison.Ordinal) ? "Violet" : "Scarlet";
private static string GetTestResourceName(string name, string resource) =>
$"{name}.{resource}";
private byte[] GetBinaryTestResource(string name)
{
using var resource = assembly.GetManifestResourceStream(name)!;
using var reader = new BinaryReader(resource);
return reader.ReadBytes((int)resource.Length);
}
private string GetStringTestResource(string name)
{
using var resource = assembly.GetManifestResourceStream(name)!;
using var reader = new StreamReader(resource);
return reader.ReadToEnd();
}
public ((int delivery, int enc), RaidContainer?) GetRaidContainer(string path, int storyPrg)
{
var game = GetGame(path);
var container = new RaidContainer(game);
var eventPrg = Math.Min(storyPrg, 3);
// Read embedded distribution data.
var delivery_raid_prio = GetBinaryTestResource(
GetTestResourceName(path, "raid_priority_array")
);
(var group_id, var priority) = FlatbufferDumper.DumpDeliveryPriorities(
delivery_raid_prio
);
if (priority == 0)
return ((-1, -1), null);
var delivery_raid_fbs = GetBinaryTestResource(
GetTestResourceName(path, "raid_enemy_array")
);
var delivery_fixed_rewards = GetBinaryTestResource(
GetTestResourceName(path, "fixed_reward_item_array")
);
var delivery_lottery_rewards = GetBinaryTestResource(
GetTestResourceName(path, "lottery_reward_item_array")
);
container.DistTeraRaids = TeraDistribution.GetAllEncounters(delivery_raid_fbs);
container.MightTeraRaids = TeraMight.GetAllEncounters(delivery_raid_fbs);
container.DeliveryRaidPriority = group_id;
container.DeliveryRaidFixedRewards = FlatbufferDumper.DumpFixedRewards(
delivery_fixed_rewards
);
container.DeliveryRaidLotteryRewards = FlatbufferDumper.DumpLotteryRewards(
delivery_lottery_rewards
);
// Read embedded base data and read all raids.
var baseData = GetBinaryTestResource(GetTestResourceName(path, "base"));
var failed = container.ReadAllRaids(baseData, storyPrg, 0, eventPrg, 0);
return (failed, container);
}
public IReadOnlyList GetRaidFilter(string path)
{
var text = GetStringTestResource(path);
return JsonSerializer.Deserialize>(text)!;
}
}
================================================
FILE: RaidCrawler.WinForms/App.config
================================================
================================================
FILE: RaidCrawler.WinForms/Config.cs
================================================
using RaidCrawler.Core.Interfaces;
using SysBot.Base;
namespace RaidCrawler.WinForms;
public class ClientConfig : IDateAdvanceConfig, IWebhookConfig
{
// General
public string IP { get; set; } = "192.168.0.0";
public int UsbPort { get; set; }
public SwitchProtocol Protocol { get; set; } = SwitchProtocol.WiFi;
public string Game { get; set; } = "Scarlet";
public int Progress { get; set; }
public int EventProgress { get; set; }
public bool EnableFilters { get; set; } = true;
public bool PaldeaScan { get; set; } = true;
public bool KitakamiScan { get; set; } = true;
public bool BlueberryScan { get; set; } = true;
// Match
public bool FocusWindow { get; set; } = true;
public bool PlaySound { get; set; } = true;
public bool EnableAlertWindow { get; set; } = true;
public string AlertWindowMessage { get; set; } =
"Match found! Hold Shift and click one of the arrow keys to jump to the matching result.";
public bool EnableNotification { get; set; }
public string DiscordWebhook { get; set; } = string.Empty;
public string DiscordMessageContent { get; set; } = string.Empty;
// Date Advance
public bool ZyroMethod { get; set; }
public bool UseTouch { get; set; }
public bool UseOvershoot { get; set; }
public bool DodgeSystemUpdate { get; set; }
public bool SaveOnMatch { get; set; } = true;
public bool UseSetStick { get; set; }
public bool UseMapTrick { get; set; }
public int OpenHomeDelay { get; set; } = 1_800;
public int NavigateToSettingsDelay { get; set; } = 0_100;
public int OpenSettingsDelay { get; set; } = 1_000;
public int HoldDuration { get; set; } = 1_700;
public int SystemDownPresses { get; set; } = 38;
public int Submenu { get; set; } = 2_200;
public int DateChange { get; set; } = 0_500;
public int DaysToSkip { get; set; }
public int ReturnHomeDelay { get; set; } = 2_500;
public int ReturnGameDelay { get; set; } = 4_000;
public int SystemOvershoot { get; set; } = 0_750;
public int BaseDelay { get; set; }
public int SaveGameDelay { get; set; }
public int SystemReset { get; set; } = 30;
public int RelaunchDelay { get; set; }
public int ExtraOverworldWait { get; set; }
// Webhook
public bool EnableEmoji { get; set; } = true;
public bool VerboseIVs { get; set; }
public int IVsStyle { get; set; }
public string IVsSpacer { get; set; } = " ";
public bool ToggleDen { get; set; } = true;
public Dictionary Emoji { get; set; } = new()
{
{ "Bug", "<:bug:1064546304048496812>" },
{ "Dark", "<:dark:1064557656079085588>" },
{ "Dragon", "<:dragon:1064557631890538566>" },
{ "Electric", "<:electric:1064557559563943956>" },
{ "Fairy", "<:fairy:1064557682566123701>" },
{ "Fighting", "<:fighting:1064546289406189648>" },
{ "Fire", "<:fire:1064557482468446230>" },
{ "Flying", "<:flying:1064546291239104623>" },
{ "Ghost", "<:ghost:1064546307848536115>" },
{ "Grass", "<:grass:1064557534096130099>" },
{ "Ground", "<:ground:1064546296725241988>" },
{ "Ice", "<:ice:1064557609857863770>" },
{ "Normal", "<:normal:1064546286247886938>" },
{ "Poison", "<:poison:1064546294854586400>" },
{ "Psychic", "<:psychic:1064557585124049006>" },
{ "Rock", "<:rock:1064546299992625242>" },
{ "Steel", "<:steel:1064557443742453790>" },
{ "Water", "<:water:1064557509404270642>" },
{ "Male", "<:male:1064844611341795398>" },
{ "Female", "<:female:1064844510636552212>" },
{ "Shiny", "<:shiny:1064845915036323840>" },
{ "Square Shiny", ":white_square_button:" },
{ "Event Star", "<:bluestar:1064538604409471016>" },
{ "7 Star", "<:pinkstar:1064538642934140978>" },
{ "Star", "<:yellowstar:1064538672113922109>" },
{ "Health 0", "<:h0:1064842950573572126>" },
{ "Health 31", "<:h31:1064726680628895784>" },
{ "Attack 0", "<:a0:1064842895712075796>" },
{ "Attack 31", "<:a31:1064726668419289138>" },
{ "Defense 0", "<:b0:1064842811196833832>" },
{ "Defense 31", "<:b31:1064726671703429220>" },
{ "SpAttack 0", "<:c0:1064842749272133752>" },
{ "SpAttack 31", "<:c31:1064726673649582121>" },
{ "SpDefense 0", "<:d0:1064842668624068608>" },
{ "SpDefense 31", "<:d31:1064726677176987832>" },
{ "Speed 0", "<:s0:1064842545953243176>" },
{ "Speed 31", "<:s31:1064726682721865818>" },
{ "Sweet Herba", "<:sweetherba:1064541764163227759>" },
{ "Sour Herba", "<:sourherba:1064541770148483073>" },
{ "Salty Herba", "<:saltyherba:1064541768147796038>" },
{ "Bitter Herba", "<:bitterherba:1064541773763977256>" },
{ "Spicy Herba", "<:spicyherba:1064541776699994132>" },
{ "Bottle Cap", "<:bottlecap:1064537470370320495>" },
{ "Ability Capsule", "<:abilitycapsule:1064541406921752737>" },
{ "Ability Patch", "<:abilitypatch:1064538087763476522>" },
};
// Experimental
public bool StreamerView { get; set; }
public string InstanceName { get; set; } = string.Empty;
}
================================================
FILE: RaidCrawler.WinForms/ErrorHandler/ErrorHandler.cs
================================================
using RaidCrawler.Core.Discord;
namespace RaidCrawler.WinForms;
public static class ErrorHandler
{
public static async Task DisplayMessageBox(this Form form, NotificationHandler webhook, string msg, CancellationToken token, string caption = "")
{
caption = caption.Length == 0 ? "RaidCrawler Error" : caption;
await webhook.SendErrorNotification(msg, caption, token).ConfigureAwait(false);
if (form.InvokeRequired)
form.Invoke(() => MessageBox.Show(msg, caption, MessageBoxButtons.OK));
else
MessageBox.Show(msg, caption, MessageBoxButtons.OK);
}
}
================================================
FILE: RaidCrawler.WinForms/MainWindow.Designer.cs
================================================
namespace RaidCrawler.WinForms
{
partial class MainWindow
{
///
/// Required designer variable.
///
private System.ComponentModel.IContainer components = null;
///
/// Clean up any resources being used.
///
/// true if managed resources should be disposed; otherwise, false.
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainWindow));
toolTip = new ToolTip(components);
ButtonAdvanceDate = new Button();
CheckEnableFilters = new CheckBox();
ButtonDisconnect = new Button();
ButtonConnect = new Button();
InputSwitchIP = new TextBox();
LabelSwitchIP = new Label();
LabelLoadedRaids = new Label();
TeraType = new TextBox();
LabelTeraType = new Label();
PID = new TextBox();
LabelPID = new Label();
EC = new TextBox();
LabelEC = new Label();
Seed = new TextBox();
LabelSeed = new Label();
ButtonNext = new Button();
ButtonPrevious = new Button();
Area = new TextBox();
LabelUNK_2 = new Label();
IVs = new TextBox();
LabelIVs = new Label();
ButtonReadRaids = new Button();
labelEvent = new Label();
Difficulty = new TextBox();
LabelDifficulty = new Label();
ButtonViewRAM = new Button();
Species = new TextBox();
LabelSpecies = new Label();
LabelMoves = new Label();
Move1 = new TextBox();
Move2 = new TextBox();
Move4 = new TextBox();
Move3 = new TextBox();
Nature = new TextBox();
LabelNature = new Label();
Gender = new TextBox();
LabelGender = new Label();
StopFilter = new Button();
Sprite = new PictureBox();
Ability = new TextBox();
LabelAbility = new Label();
GemIcon = new PictureBox();
ButtonDownloadEvents = new Button();
ConfigSettings = new Button();
Rewards = new Button();
LabelSandwichBonus = new Label();
RaidBoost = new ComboBox();
ComboIndex = new ComboBox();
SendScreenshot = new Button();
SearchTimer = new System.Timers.Timer();
btnOpenMap = new Button();
groupBox1 = new GroupBox();
statusStrip1 = new StatusStrip();
StatusLabel = new ToolStripStatusLabel();
ToolStripStatusLabel = new ToolStripStatusLabel();
Label_DayAdvance = new ToolStripStatusLabel();
USB_Port_label = new Label();
USB_Port_TB = new TextBox();
StopAdvance_Button = new Button();
B_DateTools = new Button();
((System.ComponentModel.ISupportInitialize)Sprite).BeginInit();
((System.ComponentModel.ISupportInitialize)GemIcon).BeginInit();
((System.ComponentModel.ISupportInitialize)SearchTimer).BeginInit();
groupBox1.SuspendLayout();
statusStrip1.SuspendLayout();
SuspendLayout();
//
// ButtonAdvanceDate
//
ButtonAdvanceDate.Enabled = false;
ButtonAdvanceDate.Location = new Point(117, 98);
ButtonAdvanceDate.Margin = new Padding(4, 3, 4, 3);
ButtonAdvanceDate.Name = "ButtonAdvanceDate";
ButtonAdvanceDate.Size = new Size(96, 27);
ButtonAdvanceDate.TabIndex = 81;
ButtonAdvanceDate.Text = "Advance Date";
toolTip.SetToolTip(ButtonAdvanceDate, "Advance Date performs one (1) time set.\r\n\r\nIf Stop Filters are defined, Advance Date\r\ncontinues advancing the date until a stop\r\nfilter has been hit.");
ButtonAdvanceDate.UseVisualStyleBackColor = true;
ButtonAdvanceDate.Click += ButtonAdvanceDate_Click;
//
// CheckEnableFilters
//
CheckEnableFilters.AutoSize = true;
CheckEnableFilters.Checked = true;
CheckEnableFilters.CheckState = CheckState.Checked;
CheckEnableFilters.Location = new Point(117, 276);
CheckEnableFilters.Name = "CheckEnableFilters";
CheckEnableFilters.Size = new Size(95, 19);
CheckEnableFilters.TabIndex = 119;
CheckEnableFilters.Text = "Enable Filters";
toolTip.SetToolTip(CheckEnableFilters, "Enable Filters enables or disables all filters\r\nentirely.\r\n\r\nEnabled - Advance Date will continue until\r\na match occurs from a filter.\r\n\r\nDisabled - Advance Date will only advance\r\none (1) day.");
CheckEnableFilters.UseVisualStyleBackColor = true;
CheckEnableFilters.Click += EnableFilters_Click;
//
// ButtonDisconnect
//
ButtonDisconnect.Enabled = false;
ButtonDisconnect.Location = new Point(117, 35);
ButtonDisconnect.Margin = new Padding(4, 3, 4, 3);
ButtonDisconnect.Name = "ButtonDisconnect";
ButtonDisconnect.Size = new Size(97, 27);
ButtonDisconnect.TabIndex = 11;
ButtonDisconnect.Text = "Disconnect";
ButtonDisconnect.UseVisualStyleBackColor = true;
ButtonDisconnect.Click += Disconnect_Click;
//
// ButtonConnect
//
ButtonConnect.Location = new Point(13, 35);
ButtonConnect.Margin = new Padding(4, 3, 4, 3);
ButtonConnect.Name = "ButtonConnect";
ButtonConnect.Size = new Size(97, 27);
ButtonConnect.TabIndex = 10;
ButtonConnect.Text = "Connect";
ButtonConnect.UseVisualStyleBackColor = true;
ButtonConnect.Click += ButtonConnect_Click;
//
// InputSwitchIP
//
InputSwitchIP.Location = new Point(84, 6);
InputSwitchIP.Margin = new Padding(4, 3, 4, 3);
InputSwitchIP.Name = "InputSwitchIP";
InputSwitchIP.Size = new Size(129, 23);
InputSwitchIP.TabIndex = 8;
InputSwitchIP.Text = "www.www.www.www";
InputSwitchIP.TextChanged += InputSwitchIP_Changed;
//
// LabelSwitchIP
//
LabelSwitchIP.AutoSize = true;
LabelSwitchIP.Location = new Point(13, 9);
LabelSwitchIP.Margin = new Padding(4, 0, 4, 0);
LabelSwitchIP.Name = "LabelSwitchIP";
LabelSwitchIP.Size = new Size(58, 15);
LabelSwitchIP.TabIndex = 6;
LabelSwitchIP.Text = "Switch IP:";
//
// LabelLoadedRaids
//
LabelLoadedRaids.AutoSize = true;
LabelLoadedRaids.Font = new Font("Segoe UI", 9F, FontStyle.Bold);
LabelLoadedRaids.Location = new Point(12, 103);
LabelLoadedRaids.Name = "LabelLoadedRaids";
LabelLoadedRaids.Size = new Size(67, 15);
LabelLoadedRaids.TabIndex = 12;
LabelLoadedRaids.Text = "Matches: 0";
//
// TeraType
//
TeraType.Font = new Font("Consolas", 9F);
TeraType.Location = new Point(296, 152);
TeraType.Margin = new Padding(4, 3, 4, 3);
TeraType.Name = "TeraType";
TeraType.ReadOnly = true;
TeraType.Size = new Size(95, 22);
TeraType.TabIndex = 49;
//
// LabelTeraType
//
LabelTeraType.AutoSize = true;
LabelTeraType.Location = new Point(232, 156);
LabelTeraType.Name = "LabelTeraType";
LabelTeraType.Size = new Size(58, 15);
LabelTeraType.TabIndex = 48;
LabelTeraType.Text = "Tera Type:";
LabelTeraType.TextAlign = ContentAlignment.MiddleRight;
//
// PID
//
PID.Font = new Font("Consolas", 9F);
PID.Location = new Point(296, 68);
PID.Margin = new Padding(4, 3, 4, 3);
PID.Name = "PID";
PID.ReadOnly = true;
PID.Size = new Size(95, 22);
PID.TabIndex = 47;
//
// LabelPID
//
LabelPID.AutoSize = true;
LabelPID.Location = new Point(261, 70);
LabelPID.Name = "LabelPID";
LabelPID.Size = new Size(28, 15);
LabelPID.TabIndex = 46;
LabelPID.Text = "PID:";
LabelPID.TextAlign = ContentAlignment.MiddleRight;
//
// EC
//
EC.Font = new Font("Consolas", 9F);
EC.Location = new Point(296, 40);
EC.Margin = new Padding(4, 3, 4, 3);
EC.Name = "EC";
EC.ReadOnly = true;
EC.Size = new Size(95, 22);
EC.TabIndex = 45;
//
// LabelEC
//
LabelEC.AutoSize = true;
LabelEC.Location = new Point(265, 42);
LabelEC.Name = "LabelEC";
LabelEC.Size = new Size(24, 15);
LabelEC.TabIndex = 44;
LabelEC.Text = "EC:";
LabelEC.TextAlign = ContentAlignment.MiddleRight;
//
// Seed
//
Seed.Font = new Font("Consolas", 9F);
Seed.Location = new Point(296, 12);
Seed.Margin = new Padding(4, 3, 4, 3);
Seed.Name = "Seed";
Seed.ReadOnly = true;
Seed.Size = new Size(95, 22);
Seed.TabIndex = 43;
Seed.Click += Seed_Click;
//
// LabelSeed
//
LabelSeed.AutoSize = true;
LabelSeed.Location = new Point(254, 14);
LabelSeed.Name = "LabelSeed";
LabelSeed.Size = new Size(35, 15);
LabelSeed.TabIndex = 42;
LabelSeed.Text = "Seed:";
LabelSeed.TextAlign = ContentAlignment.MiddleRight;
//
// ButtonNext
//
ButtonNext.Enabled = false;
ButtonNext.Location = new Point(168, 67);
ButtonNext.Name = "ButtonNext";
ButtonNext.Size = new Size(45, 25);
ButtonNext.TabIndex = 56;
ButtonNext.Text = ">>";
ButtonNext.UseVisualStyleBackColor = true;
ButtonNext.Click += ButtonNext_Click;
//
// ButtonPrevious
//
ButtonPrevious.Enabled = false;
ButtonPrevious.Location = new Point(13, 68);
ButtonPrevious.Name = "ButtonPrevious";
ButtonPrevious.Size = new Size(45, 25);
ButtonPrevious.TabIndex = 55;
ButtonPrevious.Text = "<<";
ButtonPrevious.UseVisualStyleBackColor = true;
ButtonPrevious.Click += ButtonPrevious_Click;
//
// Area
//
Area.Font = new Font("Consolas", 9F);
Area.Location = new Point(296, 236);
Area.Margin = new Padding(4, 3, 4, 3);
Area.Name = "Area";
Area.ReadOnly = true;
Area.Size = new Size(271, 22);
Area.TabIndex = 61;
Area.Click += DisplayMap;
//
// LabelUNK_2
//
LabelUNK_2.AutoSize = true;
LabelUNK_2.Location = new Point(256, 240);
LabelUNK_2.Name = "LabelUNK_2";
LabelUNK_2.Size = new Size(34, 15);
LabelUNK_2.TabIndex = 60;
LabelUNK_2.Text = "Area:";
LabelUNK_2.TextAlign = ContentAlignment.MiddleRight;
//
// IVs
//
IVs.Font = new Font("Consolas", 9F);
IVs.Location = new Point(296, 208);
IVs.Margin = new Padding(4, 3, 4, 3);
IVs.Name = "IVs";
IVs.ReadOnly = true;
IVs.Size = new Size(271, 22);
IVs.TabIndex = 69;
//
// LabelIVs
//
LabelIVs.AutoSize = true;
LabelIVs.Location = new Point(265, 212);
LabelIVs.Name = "LabelIVs";
LabelIVs.Size = new Size(25, 15);
LabelIVs.TabIndex = 68;
LabelIVs.Text = "IVs:";
LabelIVs.TextAlign = ContentAlignment.MiddleRight;
//
// ButtonReadRaids
//
ButtonReadRaids.Enabled = false;
ButtonReadRaids.Location = new Point(6, 22);
ButtonReadRaids.Margin = new Padding(4, 3, 4, 3);
ButtonReadRaids.Name = "ButtonReadRaids";
ButtonReadRaids.Size = new Size(90, 25);
ButtonReadRaids.TabIndex = 80;
ButtonReadRaids.Text = "Read Raids";
ButtonReadRaids.UseVisualStyleBackColor = true;
ButtonReadRaids.Click += ButtonReadRaids_Click;
//
// labelEvent
//
labelEvent.AutoSize = true;
labelEvent.Font = new Font("Segoe UI", 9F, FontStyle.Bold | FontStyle.Italic);
labelEvent.ForeColor = SystemColors.ControlText;
labelEvent.Location = new Point(496, 64);
labelEvent.Name = "labelEvent";
labelEvent.Size = new Size(73, 15);
labelEvent.TabIndex = 84;
labelEvent.Text = "~~Event~~";
labelEvent.TextAlign = ContentAlignment.MiddleLeft;
labelEvent.Visible = false;
//
// Difficulty
//
Difficulty.Font = new Font("Consolas", 9F);
Difficulty.Location = new Point(470, 152);
Difficulty.Margin = new Padding(4, 3, 4, 3);
Difficulty.Name = "Difficulty";
Difficulty.ReadOnly = true;
Difficulty.Size = new Size(97, 22);
Difficulty.TabIndex = 86;
//
// LabelDifficulty
//
LabelDifficulty.AutoSize = true;
LabelDifficulty.Location = new Point(405, 156);
LabelDifficulty.Name = "LabelDifficulty";
LabelDifficulty.Size = new Size(58, 15);
LabelDifficulty.TabIndex = 85;
LabelDifficulty.Text = "Difficulty:";
LabelDifficulty.TextAlign = ContentAlignment.MiddleRight;
//
// ButtonViewRAM
//
ButtonViewRAM.Enabled = false;
ButtonViewRAM.Location = new Point(104, 22);
ButtonViewRAM.Name = "ButtonViewRAM";
ButtonViewRAM.Size = new Size(90, 25);
ButtonViewRAM.TabIndex = 89;
ButtonViewRAM.Text = "Dump Raid";
ButtonViewRAM.UseVisualStyleBackColor = true;
ButtonViewRAM.Click += ViewRAM_Click;
//
// Species
//
Species.Font = new Font("Consolas", 9F);
Species.Location = new Point(296, 96);
Species.Margin = new Padding(4, 3, 4, 3);
Species.Name = "Species";
Species.ReadOnly = true;
Species.Size = new Size(271, 22);
Species.TabIndex = 93;
//
// LabelSpecies
//
LabelSpecies.AutoSize = true;
LabelSpecies.Location = new Point(241, 100);
LabelSpecies.Name = "LabelSpecies";
LabelSpecies.Size = new Size(49, 15);
LabelSpecies.TabIndex = 92;
LabelSpecies.Text = "Species:";
LabelSpecies.TextAlign = ContentAlignment.MiddleRight;
//
// LabelMoves
//
LabelMoves.AutoSize = true;
LabelMoves.Location = new Point(244, 280);
LabelMoves.Name = "LabelMoves";
LabelMoves.Size = new Size(45, 15);
LabelMoves.TabIndex = 94;
LabelMoves.Text = "Moves:";
LabelMoves.TextAlign = ContentAlignment.MiddleRight;
//
// Move1
//
Move1.Font = new Font("Consolas", 9F);
Move1.Location = new Point(296, 264);
Move1.Margin = new Padding(4, 3, 4, 3);
Move1.Name = "Move1";
Move1.ReadOnly = true;
Move1.Size = new Size(133, 22);
Move1.TabIndex = 95;
Move1.Click += Move_Clicked;
//
// Move2
//
Move2.Font = new Font("Consolas", 9F);
Move2.Location = new Point(434, 264);
Move2.Margin = new Padding(4, 3, 4, 3);
Move2.Name = "Move2";
Move2.ReadOnly = true;
Move2.Size = new Size(133, 22);
Move2.TabIndex = 96;
Move2.Click += Move_Clicked;
//
// Move4
//
Move4.Font = new Font("Consolas", 9F);
Move4.Location = new Point(434, 292);
Move4.Margin = new Padding(4, 3, 4, 3);
Move4.Name = "Move4";
Move4.ReadOnly = true;
Move4.Size = new Size(133, 22);
Move4.TabIndex = 98;
Move4.Click += Move_Clicked;
//
// Move3
//
Move3.Font = new Font("Consolas", 9F);
Move3.Location = new Point(296, 292);
Move3.Margin = new Padding(4, 3, 4, 3);
Move3.Name = "Move3";
Move3.ReadOnly = true;
Move3.Size = new Size(133, 22);
Move3.TabIndex = 97;
Move3.Click += Move_Clicked;
//
// Nature
//
Nature.Font = new Font("Consolas", 9F);
Nature.Location = new Point(470, 180);
Nature.Margin = new Padding(4, 3, 4, 3);
Nature.Name = "Nature";
Nature.ReadOnly = true;
Nature.Size = new Size(97, 22);
Nature.TabIndex = 106;
//
// LabelNature
//
LabelNature.AutoSize = true;
LabelNature.Location = new Point(417, 184);
LabelNature.Name = "LabelNature";
LabelNature.Size = new Size(46, 15);
LabelNature.TabIndex = 105;
LabelNature.Text = "Nature:";
LabelNature.TextAlign = ContentAlignment.MiddleRight;
//
// Gender
//
Gender.Font = new Font("Consolas", 9F);
Gender.Location = new Point(296, 180);
Gender.Margin = new Padding(4, 3, 4, 3);
Gender.Name = "Gender";
Gender.ReadOnly = true;
Gender.Size = new Size(95, 22);
Gender.TabIndex = 104;
//
// LabelGender
//
LabelGender.AutoSize = true;
LabelGender.Location = new Point(241, 184);
LabelGender.Name = "LabelGender";
LabelGender.Size = new Size(48, 15);
LabelGender.TabIndex = 103;
LabelGender.Text = "Gender:";
LabelGender.TextAlign = ContentAlignment.MiddleRight;
//
// StopFilter
//
StopFilter.Location = new Point(12, 273);
StopFilter.Name = "StopFilter";
StopFilter.Size = new Size(97, 23);
StopFilter.TabIndex = 107;
StopFilter.Text = "Edit Filters";
StopFilter.UseVisualStyleBackColor = true;
StopFilter.Click += StopFilter_Click;
//
// Sprite
//
Sprite.Location = new Point(498, 7);
Sprite.Name = "Sprite";
Sprite.Size = new Size(68, 56);
Sprite.SizeMode = PictureBoxSizeMode.CenterImage;
Sprite.TabIndex = 108;
Sprite.TabStop = false;
//
// Ability
//
Ability.Font = new Font("Consolas", 9F);
Ability.Location = new Point(296, 124);
Ability.Margin = new Padding(4, 3, 4, 3);
Ability.Name = "Ability";
Ability.ReadOnly = true;
Ability.Size = new Size(271, 22);
Ability.TabIndex = 110;
//
// LabelAbility
//
LabelAbility.AutoSize = true;
LabelAbility.Location = new Point(245, 127);
LabelAbility.Name = "LabelAbility";
LabelAbility.Size = new Size(44, 15);
LabelAbility.TabIndex = 109;
LabelAbility.Text = "Ability:";
LabelAbility.TextAlign = ContentAlignment.MiddleRight;
//
// GemIcon
//
GemIcon.Location = new Point(434, 7);
GemIcon.Name = "GemIcon";
GemIcon.Size = new Size(56, 56);
GemIcon.SizeMode = PictureBoxSizeMode.Zoom;
GemIcon.TabIndex = 111;
GemIcon.TabStop = false;
//
// ButtonDownloadEvents
//
ButtonDownloadEvents.Enabled = false;
ButtonDownloadEvents.Location = new Point(104, 50);
ButtonDownloadEvents.Name = "ButtonDownloadEvents";
ButtonDownloadEvents.Size = new Size(90, 25);
ButtonDownloadEvents.TabIndex = 112;
ButtonDownloadEvents.Text = "Pull Events";
ButtonDownloadEvents.UseVisualStyleBackColor = true;
ButtonDownloadEvents.Click += DownloadEvents_Click;
//
// ConfigSettings
//
ConfigSettings.Location = new Point(12, 302);
ConfigSettings.Name = "ConfigSettings";
ConfigSettings.Size = new Size(97, 23);
ConfigSettings.TabIndex = 115;
ConfigSettings.Text = "Open Settings";
ConfigSettings.UseVisualStyleBackColor = true;
ConfigSettings.Click += ConfigSettings_Click;
//
// Rewards
//
Rewards.Location = new Point(104, 78);
Rewards.Name = "Rewards";
Rewards.Size = new Size(90, 25);
Rewards.TabIndex = 116;
Rewards.Text = "Rewards";
Rewards.UseVisualStyleBackColor = true;
Rewards.Click += Rewards_Click;
//
// LabelSandwichBonus
//
LabelSandwichBonus.AutoSize = true;
LabelSandwichBonus.Location = new Point(13, 248);
LabelSandwichBonus.Name = "LabelSandwichBonus";
LabelSandwichBonus.Size = new Size(120, 15);
LabelSandwichBonus.TabIndex = 118;
LabelSandwichBonus.Text = "Raid Sandwich Boost:";
//
// RaidBoost
//
RaidBoost.FormattingEnabled = true;
RaidBoost.Items.AddRange(new object[] { "0", "1", "2", "3" });
RaidBoost.Location = new Point(165, 245);
RaidBoost.Name = "RaidBoost";
RaidBoost.Size = new Size(48, 23);
RaidBoost.TabIndex = 117;
RaidBoost.Text = "w";
RaidBoost.SelectedIndexChanged += RaidBoost_SelectedIndexChanged;
//
// ComboIndex
//
ComboIndex.BackColor = SystemColors.Window;
ComboIndex.DropDownStyle = ComboBoxStyle.DropDownList;
ComboIndex.Enabled = false;
ComboIndex.FormattingEnabled = true;
ComboIndex.Location = new Point(64, 68);
ComboIndex.Name = "ComboIndex";
ComboIndex.Size = new Size(98, 23);
ComboIndex.TabIndex = 120;
ComboIndex.SelectedIndexChanged += ComboIndex_SelectedIndexChanged;
//
// SendScreenshot
//
SendScreenshot.Location = new Point(6, 50);
SendScreenshot.Name = "SendScreenshot";
SendScreenshot.Size = new Size(90, 25);
SendScreenshot.TabIndex = 121;
SendScreenshot.Text = "Screenshot";
SendScreenshot.UseVisualStyleBackColor = true;
SendScreenshot.Click += SendScreenshot_Click;
//
// SearchTimer
//
SearchTimer.Enabled = true;
SearchTimer.Interval = 1D;
SearchTimer.SynchronizingObject = this;
SearchTimer.Elapsed += SearchTimer_Elapsed;
//
// btnOpenMap
//
btnOpenMap.Location = new Point(6, 78);
btnOpenMap.Name = "btnOpenMap";
btnOpenMap.Size = new Size(90, 25);
btnOpenMap.TabIndex = 124;
btnOpenMap.Text = "Open Map";
btnOpenMap.UseVisualStyleBackColor = true;
btnOpenMap.Click += DisplayMap;
//
// groupBox1
//
groupBox1.Controls.Add(ButtonViewRAM);
groupBox1.Controls.Add(ButtonDownloadEvents);
groupBox1.Controls.Add(btnOpenMap);
groupBox1.Controls.Add(SendScreenshot);
groupBox1.Controls.Add(Rewards);
groupBox1.Controls.Add(ButtonReadRaids);
groupBox1.Location = new Point(13, 129);
groupBox1.Name = "groupBox1";
groupBox1.Size = new Size(200, 110);
groupBox1.TabIndex = 125;
groupBox1.TabStop = false;
groupBox1.Text = "Raid Controls";
//
// statusStrip1
//
statusStrip1.Items.AddRange(new ToolStripItem[] { StatusLabel, ToolStripStatusLabel, Label_DayAdvance });
statusStrip1.Location = new Point(0, 335);
statusStrip1.Name = "statusStrip1";
statusStrip1.Size = new Size(580, 22);
statusStrip1.SizingGrip = false;
statusStrip1.TabIndex = 126;
statusStrip1.Text = "statusStrip1";
//
// StatusLabel
//
StatusLabel.Name = "StatusLabel";
StatusLabel.Size = new Size(42, 17);
StatusLabel.Text = "Status:";
//
// ToolStripStatusLabel
//
ToolStripStatusLabel.Name = "ToolStripStatusLabel";
ToolStripStatusLabel.Size = new Size(89, 17);
ToolStripStatusLabel.Text = "Not connected.";
//
// Label_DayAdvance
//
Label_DayAdvance.Name = "Label_DayAdvance";
Label_DayAdvance.Size = new Size(136, 17);
Label_DayAdvance.Text = "Day Skip Successes: 0 / 0";
Label_DayAdvance.Visible = false;
//
// USB_Port_label
//
USB_Port_label.AutoSize = true;
USB_Port_label.Location = new Point(13, 9);
USB_Port_label.Name = "USB_Port_label";
USB_Port_label.Size = new Size(56, 15);
USB_Port_label.TabIndex = 127;
USB_Port_label.Text = "USB Port:";
//
// USB_Port_TB
//
USB_Port_TB.Location = new Point(84, 6);
USB_Port_TB.Name = "USB_Port_TB";
USB_Port_TB.Size = new Size(129, 23);
USB_Port_TB.TabIndex = 128;
USB_Port_TB.Text = "w";
USB_Port_TB.TextAlign = HorizontalAlignment.Center;
USB_Port_TB.TextChanged += USB_Port_Changed;
//
// StopAdvance_Button
//
StopAdvance_Button.Location = new Point(117, 98);
StopAdvance_Button.Name = "StopAdvance_Button";
StopAdvance_Button.Size = new Size(96, 27);
StopAdvance_Button.TabIndex = 129;
StopAdvance_Button.Text = "Stop";
StopAdvance_Button.UseVisualStyleBackColor = true;
StopAdvance_Button.Visible = false;
StopAdvance_Button.Click += StopAdvanceButton_Click;
//
// B_DateTools
//
B_DateTools.Enabled = false;
B_DateTools.Location = new Point(117, 302);
B_DateTools.Name = "B_DateTools";
B_DateTools.Size = new Size(97, 23);
B_DateTools.TabIndex = 130;
B_DateTools.Text = "Date Tools";
B_DateTools.UseVisualStyleBackColor = true;
B_DateTools.Click += B_DateTools_Click;
//
// MainWindow
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(580, 357);
Controls.Add(B_DateTools);
Controls.Add(StopAdvance_Button);
Controls.Add(USB_Port_TB);
Controls.Add(USB_Port_label);
Controls.Add(statusStrip1);
Controls.Add(groupBox1);
Controls.Add(ComboIndex);
Controls.Add(CheckEnableFilters);
Controls.Add(LabelSandwichBonus);
Controls.Add(LabelLoadedRaids);
Controls.Add(RaidBoost);
Controls.Add(ConfigSettings);
Controls.Add(GemIcon);
Controls.Add(Ability);
Controls.Add(LabelAbility);
Controls.Add(Sprite);
Controls.Add(StopFilter);
Controls.Add(Nature);
Controls.Add(LabelNature);
Controls.Add(Gender);
Controls.Add(LabelGender);
Controls.Add(Move4);
Controls.Add(Move3);
Controls.Add(Move2);
Controls.Add(Move1);
Controls.Add(LabelMoves);
Controls.Add(Species);
Controls.Add(LabelSpecies);
Controls.Add(Difficulty);
Controls.Add(LabelDifficulty);
Controls.Add(labelEvent);
Controls.Add(ButtonAdvanceDate);
Controls.Add(IVs);
Controls.Add(LabelIVs);
Controls.Add(Area);
Controls.Add(LabelUNK_2);
Controls.Add(ButtonNext);
Controls.Add(ButtonPrevious);
Controls.Add(TeraType);
Controls.Add(LabelTeraType);
Controls.Add(PID);
Controls.Add(LabelPID);
Controls.Add(EC);
Controls.Add(LabelEC);
Controls.Add(Seed);
Controls.Add(LabelSeed);
Controls.Add(ButtonDisconnect);
Controls.Add(ButtonConnect);
Controls.Add(InputSwitchIP);
Controls.Add(LabelSwitchIP);
FormBorderStyle = FormBorderStyle.FixedDialog;
Icon = (Icon)resources.GetObject("$this.Icon");
MaximizeBox = false;
Name = "MainWindow";
FormClosing += MainWindow_FormClosing;
Load += MainWindow_Load;
((System.ComponentModel.ISupportInitialize)Sprite).EndInit();
((System.ComponentModel.ISupportInitialize)GemIcon).EndInit();
((System.ComponentModel.ISupportInitialize)SearchTimer).EndInit();
groupBox1.ResumeLayout(false);
statusStrip1.ResumeLayout(false);
statusStrip1.PerformLayout();
ResumeLayout(false);
PerformLayout();
}
#endregion
private ToolTip toolTip;
private Button ButtonDisconnect;
private Button ButtonConnect;
private TextBox InputSwitchIP;
private Label LabelSwitchIP;
private Label LabelLoadedRaids;
private TextBox TeraType;
private Label LabelTeraType;
private TextBox PID;
private Label LabelPID;
private TextBox EC;
private Label LabelEC;
private TextBox Seed;
private Label LabelSeed;
private Button ButtonNext;
private Button ButtonPrevious;
private TextBox Area;
private Label LabelUNK_2;
private TextBox IVs;
private Label LabelIVs;
private Button ButtonReadRaids;
private Button ButtonAdvanceDate;
private Label labelEvent;
private TextBox Difficulty;
private Label LabelDifficulty;
private Button ButtonViewRAM;
private TextBox Species;
private Label LabelSpecies;
private Label LabelMoves;
private TextBox Move1;
private TextBox Move2;
private TextBox Move4;
private TextBox Move3;
private TextBox Nature;
private Label LabelNature;
private TextBox Gender;
private Label LabelGender;
private Button StopFilter;
private PictureBox Sprite;
private TextBox Ability;
private Label LabelAbility;
private PictureBox GemIcon;
private Button ButtonDownloadEvents;
private Button ConfigSettings;
private Button Rewards;
private Label LabelSandwichBonus;
private ComboBox RaidBoost;
private CheckBox CheckEnableFilters;
private ComboBox ComboIndex;
private Button SendScreenshot;
private System.Timers.Timer SearchTimer;
private Button btnOpenMap;
private GroupBox groupBox1;
private StatusStrip statusStrip1;
private ToolStripStatusLabel StatusLabel;
private ToolStripStatusLabel ToolStripStatusLabel;
private Label USB_Port_label;
private TextBox USB_Port_TB;
private Button StopAdvance_Button;
private ToolStripStatusLabel Label_DayAdvance;
private Button B_DateTools;
}
}
================================================
FILE: RaidCrawler.WinForms/MainWindow.cs
================================================
using PKHeX.Core;
using PKHeX.Drawing;
using PKHeX.Drawing.PokeSprite;
using RaidCrawler.Core.Connection;
using RaidCrawler.Core.Discord;
using RaidCrawler.Core.Structures;
using RaidCrawler.WinForms.SubForms;
using SysBot.Base;
using System.Diagnostics;
using System.Text.Json;
using static RaidCrawler.Core.Structures.Offsets;
namespace RaidCrawler.WinForms;
public partial class MainWindow : Form
{
private static CancellationTokenSource Source = new();
private static CancellationTokenSource DateAdvanceSource = new();
private static readonly object _connectLock = new();
private static readonly object _readLock = new();
private readonly ClientConfig Config;
private ConnectionWrapperAsync ConnectionWrapper = default!;
private readonly SwitchConnectionConfig ConnectionConfig;
private readonly RaidContainer RaidContainer;
private readonly NotificationHandler Webhook;
private List RaidFilters = [];
private static readonly Image MapBase = Image.FromStream(
new MemoryStream(Utils.GetBinaryResource("paldea.png"))
);
private static readonly Image MapKitakami = Image.FromStream(
new MemoryStream(Utils.GetBinaryResource("kitakami.png"))
);
private static readonly Image MapBlueberry = Image.FromStream(
new MemoryStream(Utils.GetBinaryResource("blueberry.png"))
);
private static Dictionary? DenLocationsBase;
private static Dictionary? DenLocationsKitakami;
private static Dictionary? DenLocationsBlueberry;
// statistics
public int StatDaySkipTries;
public int StatDaySkipSuccess;
public readonly string formTitle;
private ulong RaidBlockOffsetBase;
private ulong RaidBlockOffsetKitakami;
private ulong RaidBlockOffsetBlueberry;
private bool IsReading;
private bool HideSeed;
private bool ShowExtraMoves;
private Color DefaultColor;
private FormWindowState _WindowState;
private readonly Stopwatch stopwatch = new();
private TeraRaidView? teraRaidView;
private bool StopAdvances =>
!Config.EnableFilters || RaidFilters.Count == 0 || RaidFilters.All(x => !x.Enabled);
private readonly Version CurrentVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version!;
public MainWindow()
{
Config = new ClientConfig();
#if DEBUG
var date = File.GetLastWriteTime(AppContext.BaseDirectory);
var build = $" (dev-{date:yyyyMMdd})";
#else
var build = "";
#endif
var v = CurrentVersion;
var filterPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "filters.json");
if (File.Exists(filterPath))
RaidFilters = JsonSerializer.Deserialize>(File.ReadAllText(filterPath)) ?? [];
DenLocationsBase = JsonSerializer.Deserialize>(Utils.GetStringResource("den_locations_base.json") ?? "{}");
DenLocationsKitakami = JsonSerializer.Deserialize>(Utils.GetStringResource("den_locations_kitakami.json") ?? "{}");
DenLocationsBlueberry = JsonSerializer.Deserialize>(Utils.GetStringResource("den_locations_blueberry.json") ?? "{}");
var configPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "config.json");
if (File.Exists(configPath))
{
var text = File.ReadAllText(configPath);
Config = JsonSerializer.Deserialize(text)!;
}
else
{
Config = new();
}
ConnectionConfig = new SwitchConnectionConfig
{
Protocol = SwitchProtocol.WiFi,
IP = "192.168.0.0",
Port = 6000,
};
formTitle = $"RaidCrawler v{v.Major}.{v.Minor}.{v.Build}{build} {Config.InstanceName}";
Text = formTitle;
// load raids
RaidContainer = new(Config.Game);
SpriteBuilder.ShowTeraThicknessStripe = 0x4;
SpriteBuilder.ShowTeraOpacityStripe = 0xAF;
SpriteBuilder.ShowTeraOpacityBackground = 0xFF;
SpriteUtil.ChangeMode(SpriteBuilderMode.SpritesArtwork5668);
var protocol = Config.Protocol;
ConnectionConfig = new()
{
IP = Config.IP,
Port = protocol is SwitchProtocol.WiFi ? 6000 : Config.UsbPort,
Protocol = Config.Protocol,
};
Webhook = new(Config);
InitializeComponent();
btnOpenMap.Enabled = false;
Rewards.Enabled = false;
SendScreenshot.Enabled = false;
CheckEnableFilters.Checked = Config.EnableFilters;
if (Config.Protocol is SwitchProtocol.USB)
{
InputSwitchIP.Visible = false;
LabelSwitchIP.Visible = false;
USB_Port_TB.Visible = true;
USB_Port_label.Visible = true;
}
else
{
InputSwitchIP.Visible = true;
LabelSwitchIP.Visible = true;
USB_Port_TB.Visible = false;
USB_Port_label.Visible = false;
}
}
private void UpdateStatus(string status)
{
ToolStripStatusLabel.Text = status;
}
private void ButtonEnable(bool enable, params object[] obj)
{
lock (_readLock)
{
foreach (object o in obj)
{
if (o is not Button btn)
continue;
if (InvokeRequired)
Invoke(() => btn.Enabled = enable);
else
btn.Enabled = enable;
}
IsReading = !enable;
}
}
private void ShowDialog(object obj)
{
var window = (Form?)obj;
if (window is null)
return;
window.StartPosition = FormStartPosition.CenterParent;
if (InvokeRequired)
Invoke(() => window.ShowDialog());
else
window.ShowDialog();
}
private int GetRaidBoost()
{
if (InvokeRequired)
return Invoke(() => RaidBoost.SelectedIndex);
return RaidBoost.SelectedIndex;
}
public int GetStatDaySkipTries() => StatDaySkipTries;
public int GetStatDaySkipSuccess() => StatDaySkipSuccess;
private void MainWindow_Load(object sender, EventArgs e)
{
CenterToScreen();
InputSwitchIP.Text = Config.IP;
USB_Port_TB.Text = Config.UsbPort.ToString();
DefaultColor = IVs.BackColor;
RaidBoost.SelectedIndex = 0;
ToggleStreamerView();
CheckForUpdates();
}
private void InputSwitchIP_Changed(object sender, EventArgs e)
{
TextBox textBox = (TextBox)sender;
Config.IP = textBox.Text;
ConnectionConfig.IP = textBox.Text;
}
private void USB_Port_Changed(object sender, EventArgs e)
{
if (Config.Protocol is SwitchProtocol.WiFi)
return;
TextBox textBox = (TextBox)sender;
if (int.TryParse(textBox.Text, out int port) && port >= 0)
{
Config.UsbPort = port;
ConnectionConfig.Port = port;
return;
}
Task.Run(async () => await this.DisplayMessageBox(Webhook, "Please enter a valid numerical USB port.", Source.Token).ConfigureAwait(false), Source.Token);
}
private void ButtonConnect_Click(object sender, EventArgs e)
{
lock (_connectLock)
{
if (ConnectionWrapper is { Connected: true })
return;
ConnectionWrapper = new(ConnectionConfig, UpdateStatus);
Connect(Source.Token);
}
}
private void Connect(CancellationToken token)
{
Task.Run(
async () =>
{
ButtonEnable(false, ButtonConnect, SendScreenshot, btnOpenMap, Rewards);
try
{
(bool success, string err) = await ConnectionWrapper
.Connect(token)
.ConfigureAwait(false);
if (!success)
{
ButtonEnable(true, ButtonConnect);
await this
.DisplayMessageBox(Webhook, err, token)
.ConfigureAwait(false);
return;
}
}
catch (Exception ex)
{
ButtonEnable(true, ButtonConnect);
await this
.DisplayMessageBox(Webhook, ex.Message, token)
.ConfigureAwait(false);
return;
}
UpdateStatus("Detecting game version...");
string id = await ConnectionWrapper.Connection
.GetTitleID(token)
.ConfigureAwait(false);
var game = id switch
{
ScarletID => "Scarlet",
VioletID => "Violet",
_ => "",
};
if (game is "")
{
try
{
(bool success, string err) = await ConnectionWrapper
.DisconnectAsync(token)
.ConfigureAwait(false);
if (!success)
{
ButtonEnable(true, ButtonConnect);
await this
.DisplayMessageBox(Webhook, err, token)
.ConfigureAwait(false);
return;
}
}
catch
{
// ignored
}
finally
{
ButtonEnable(true, ButtonConnect);
await this
.DisplayMessageBox(Webhook,
"Unable to detect Pokémon Scarlet or Pokémon Violet running on your Switch!",
token
)
.ConfigureAwait(false);
}
return;
}
Config.Game = game;
RaidContainer.SetGame(Config.Game);
UpdateStatus("Reading story progress...");
Config.Progress = await ConnectionWrapper
.GetStoryProgress(token)
.ConfigureAwait(false);
Config.EventProgress = Math.Min(Config.Progress, 3);
UpdateStatus("Reading event raid status...");
try
{
await ReadEventRaids(token).ConfigureAwait(false);
}
catch (Exception ex)
{
ButtonEnable(true, ButtonConnect);
await this.DisplayMessageBox(Webhook, $"Error occurred while reading event raids: {ex.Message}", token)
.ConfigureAwait(false);
return;
}
UpdateStatus("Reading raids...");
try
{
await ReadRaids(token).ConfigureAwait(false);
}
catch (Exception ex)
{
ButtonEnable(true, ButtonConnect);
await this.DisplayMessageBox(Webhook, $"Error occurred while reading raids: {ex.Message}", token)
.ConfigureAwait(false);
return;
}
ButtonEnable(true, ButtonAdvanceDate, ButtonReadRaids, ButtonDisconnect, ButtonViewRAM, ButtonDownloadEvents, SendScreenshot, btnOpenMap, Rewards, B_DateTools);
if (InvokeRequired)
{
Invoke(() =>
{
ComboIndex.Enabled = true;
ComboIndex.SelectedIndex = 0;
});
}
else
{
ComboIndex.SelectedIndex = 0;
}
UpdateStatus("Completed!");
},
token
);
}
private void Disconnect_Click(object sender, EventArgs e)
{
lock (_connectLock)
{
if (ConnectionWrapper is not { Connected: true })
return;
Disconnect(Source.Token);
}
}
private void Disconnect(CancellationToken token)
{
Task.Run(
async () =>
{
ButtonEnable(false, ButtonAdvanceDate, ButtonReadRaids, ButtonDisconnect, ButtonViewRAM, ButtonDownloadEvents, SendScreenshot, B_DateTools);
try
{
(bool success, string err) = await ConnectionWrapper
.DisconnectAsync(token)
.ConfigureAwait(false);
if (!success)
await this.DisplayMessageBox(Webhook, err, token).ConfigureAwait(false);
}
catch (Exception ex)
{
await this
.DisplayMessageBox(Webhook, ex.Message, token)
.ConfigureAwait(false);
}
await Source.CancelAsync();
await DateAdvanceSource.CancelAsync();
Source = new();
DateAdvanceSource = new();
RaidBlockOffsetBase = 0;
ButtonEnable(true, ButtonConnect);
},
token
);
}
private void ButtonPrevious_Click(object sender, EventArgs e)
{
var count = RaidContainer.GetRaidCount();
if (count > 0)
{
var index = (ComboIndex.SelectedIndex + count - 1) % count; // Wrap around
if (ModifierKeys == Keys.Shift)
{
for (int i = 0; i < count; i++)
{
var chk = (index + count - i) % count;
if (
StopAdvances
|| RaidFilters.Any(
z =>
z.FilterSatisfied(
RaidContainer,
RaidContainer.Encounters[chk],
RaidContainer.Raids[chk],
RaidBoost.SelectedIndex
)
)
)
{
index = chk;
break;
}
}
}
ComboIndex.SelectedIndex = index;
}
}
private void ButtonNext_Click(object sender, EventArgs e)
{
var count = RaidContainer.GetRaidCount();
if (count > 0)
{
var index = (ComboIndex.SelectedIndex + count + 1) % count; // Wrap around
if (ModifierKeys == Keys.Shift)
{
for (int i = 0; i < count; i++)
{
var chk = (index + count + i) % count;
if (StopAdvances || RaidFilters.Any(z => z.FilterSatisfied(RaidContainer, RaidContainer.Encounters[chk], RaidContainer.Raids[chk], RaidBoost.SelectedIndex)))
{
index = chk;
break;
}
}
}
ComboIndex.SelectedIndex = index;
}
}
private void ButtonAdvanceDate_Click(object sender, EventArgs e)
{
if (ConnectionWrapper is not { Connected: true })
return;
ButtonAdvanceDate.Visible = false;
StopAdvance_Button.Visible = true;
Task.Run(async () => await AdvanceDateClick(DateAdvanceSource.Token).ConfigureAwait(false), Source.Token);
}
private async Task AdvanceDateClick(CancellationToken token)
{
try
{
ButtonEnable(false, ButtonViewRAM, ButtonAdvanceDate, ButtonDisconnect, ButtonDownloadEvents, SendScreenshot, ButtonReadRaids);
Invoke(() => Label_DayAdvance.Visible = true);
SearchTimer.Start();
stopwatch.Start();
_WindowState = WindowState;
var advanceTextInit =
$"Day Skip Successes {GetStatDaySkipSuccess()} / {GetStatDaySkipTries()}";
Invoke(() => Label_DayAdvance.Text = advanceTextInit);
if (teraRaidView is not null)
Invoke(() => teraRaidView.DaySkips.Text = advanceTextInit);
var stop = false;
var raids = RaidContainer.Raids;
int skips = 0;
while (!stop)
{
if (skips >= Config.SystemReset)
{
// When raids are generated, the game determines raids for both the current and next day.
// In order to avoid rescanning the same raids on a reset, save the game before reset.
await ConnectionWrapper.SaveGame(Config, token).ConfigureAwait(false);
await ConnectionWrapper.CloseGame(token).ConfigureAwait(false);
await ConnectionWrapper.StartGame(Config, token).ConfigureAwait(false);
RaidBlockOffsetBase = 0;
RaidBlockOffsetKitakami = 0;
RaidBlockOffsetBlueberry = 0;
skips = 0;
// Read the initial raids upon reopening the game to correctly detect if the next advance fails
await ReadRaids(token).ConfigureAwait(false);
raids = RaidContainer.Raids;
}
var previousSeeds = raids.Select(z => z.Seed).ToList();
UpdateStatus("Changing date...");
bool streamer = Config.StreamerView && teraRaidView is not null;
Action? action = streamer ? teraRaidView!.UpdateProgressBar : null;
await ConnectionWrapper
.AdvanceDate(Config, skips, token, action)
.ConfigureAwait(false);
await ReadRaids(token).ConfigureAwait(false);
raids = RaidContainer.Raids;
Invoke(DisplayRaid);
if (streamer)
Invoke(DisplayPrettyRaid);
stop = StopAdvanceDate(previousSeeds);
skips++;
var advanceText =
$"Day Skip Successes {GetStatDaySkipSuccess()} / {GetStatDaySkipTries()}";
Invoke(() => Label_DayAdvance.Text = advanceText);
if (teraRaidView is not null)
Invoke(() => teraRaidView.DaySkips.Text = advanceText);
}
stopwatch.Stop();
SearchTimer.Stop();
var timeSpan = stopwatch.Elapsed;
var time = $"{timeSpan.Days:00}:{timeSpan.Hours:00}:{timeSpan.Minutes:00}:{timeSpan.Seconds:00}";
if (Config.PlaySound)
System.Media.SystemSounds.Asterisk.Play();
if (Config.FocusWindow)
{
Invoke(() =>
{
WindowState = _WindowState;
Activate();
});
}
if (Config.EnableFilters)
{
var encounters = RaidContainer.Encounters;
var rewards = RaidContainer.Rewards;
var boost = Invoke(() => RaidBoost.SelectedIndex);
var satisfiedFilters = new List<(RaidFilter, ITeraRaid, Raid, IReadOnlyList<(int, int, int)>)>();
for (int i = 0; i < raids.Count; i++)
{
foreach (var filter in RaidFilters)
{
if (filter is null)
continue;
if (filter.FilterSatisfied(RaidContainer, encounters[i], raids[i], boost))
{
satisfiedFilters.Add((filter, encounters[i], raids[i], rewards[i]));
if (InvokeRequired)
Invoke(() => ComboIndex.SelectedIndex = i);
else
ComboIndex.SelectedIndex = i;
}
}
}
if (Config.EnableNotification)
{
foreach (var satisfied in satisfiedFilters)
{
var teraType = satisfied.Item3.GetTeraType(satisfied.Item2);
var color = TypeColor.GetTypeSpriteColor((byte)teraType);
var hexColor = $"{color.R:X2}{color.G:X2}{color.B:X2}";
var blank = new PK9
{
Species = satisfied.Item2.Species,
Form = satisfied.Item2.Form,
};
var spriteName = GetSpriteNameForUrl(
blank,
satisfied.Item3.CheckIsShiny(satisfied.Item2)
);
await Webhook
.SendNotification(satisfied.Item2, satisfied.Item3, satisfied.Item1, time, satisfied.Item4, hexColor, spriteName, Source.Token)
.ConfigureAwait(false);
}
}
// Save game on match.
if (Config.SaveOnMatch && satisfiedFilters.Count > 0)
await ConnectionWrapper.SaveGame(Config, token).ConfigureAwait(false);
if (Config.EnableAlertWindow)
await this.DisplayMessageBox(Webhook, $"{Config.AlertWindowMessage}\n\nTime Spent: {time}", token, "Result found!").ConfigureAwait(false);
Invoke(() => Text = $"{formTitle} [Match Found in {time}]");
}
}
catch (Exception ex)
{
UpdateStatus("Date advance stopped.");
SearchTimer.Stop();
if (ex is not TaskCanceledException)
await this.DisplayMessageBox(Webhook, ex.Message, token, "Date Advance Error").ConfigureAwait(false);
}
if (InvokeRequired)
{
Invoke(() =>
{
ButtonAdvanceDate.Visible = true;
StopAdvance_Button.Visible = false;
});
}
else
{
ButtonAdvanceDate.Visible = true;
StopAdvance_Button.Visible = false;
}
var buttons = new[]
{
ButtonViewRAM,
ButtonAdvanceDate,
ButtonDisconnect,
ButtonDownloadEvents,
SendScreenshot,
ButtonReadRaids,
};
ButtonEnable(true, buttons);
DateAdvanceSource = new();
}
private void StopAdvanceButton_Click(object sender, EventArgs e)
{
StopAdvance_Button.Visible = false;
ButtonAdvanceDate.Visible = true;
DateAdvanceSource.Cancel();
DateAdvanceSource = new();
teraRaidView?.ResetProgressBar();
stopwatch.Stop();
SearchTimer.Stop();
}
private void ButtonReadRaids_Click(object sender, EventArgs e)
{
Task.Run(async () => await ReadRaidsAsync(Source.Token).ConfigureAwait(false), Source.Token);
}
private async Task ReadRaidsAsync(CancellationToken token)
{
if (IsReading)
{
await this
.DisplayMessageBox(Webhook,
"Please wait for the current RAM read to finish.",
token
)
.ConfigureAwait(false);
return;
}
ButtonEnable(false, ButtonViewRAM, ButtonAdvanceDate, ButtonDisconnect, ButtonDownloadEvents, SendScreenshot, ButtonReadRaids);
try
{
await ReadRaids(token).ConfigureAwait(false);
}
catch (Exception ex)
{
await this
.DisplayMessageBox(Webhook,
$"Error occurred while reading raids: {ex.Message}",
token
)
.ConfigureAwait(false);
}
ButtonEnable(true, ButtonViewRAM, ButtonAdvanceDate, ButtonDisconnect, ButtonDownloadEvents, SendScreenshot, ButtonReadRaids);
}
private void ViewRAM_Click(object sender, EventArgs e)
{
if (IsReading)
{
Task.Run(async () => await this.DisplayMessageBox(Webhook, "Please wait for the current RAM read to finish.", Source.Token).ConfigureAwait(false), Source.Token);
return;
}
ButtonEnable(false, ButtonViewRAM);
RaidBlockViewer window = default!;
if (ConnectionWrapper is { Connected: true } && ModifierKeys == Keys.Shift)
{
try
{
var data = ConnectionWrapper.Connection
.ReadBytesAbsoluteAsync(
RaidBlockOffsetBase,
(int)RaidBlock.SIZE_BASE,
Source.Token
)
.Result;
window = new(data, RaidBlockOffsetBase);
}
catch (Exception ex)
{
ButtonEnable(true, ButtonViewRAM);
Task.Run(
async () =>
await this
.DisplayMessageBox(Webhook, ex.Message, Source.Token)
.ConfigureAwait(false),
Source.Token
);
return;
}
}
else if (RaidContainer.Raids.Count > ComboIndex.SelectedIndex)
{
var data = RaidContainer.Raids[ComboIndex.SelectedIndex].GetData();
window = new(data, RaidBlockOffsetBase);
}
ShowDialog(window);
ButtonEnable(true, ButtonViewRAM);
}
private void StopFilter_Click(object sender, EventArgs e)
{
var form = new FilterSettings(ref RaidFilters);
ShowDialog(form);
}
private void DownloadEvents_Click(object sender, EventArgs e)
{
if (ConnectionWrapper is not { Connected: true })
return;
if (IsReading)
{
Task.Run(async () => await this.DisplayMessageBox(Webhook, "Please wait for the current RAM read to finish.", Source.Token).ConfigureAwait(false), Source.Token);
return;
}
Task.Run(async () => await DownloadEventsAsync(Source.Token).ConfigureAwait(false), Source.Token);
}
private async Task DownloadEventsAsync(CancellationToken token)
{
ButtonEnable(false, ButtonViewRAM, ButtonAdvanceDate, ButtonDisconnect, ButtonDownloadEvents, SendScreenshot, ButtonReadRaids);
UpdateStatus("Reading event raid status...");
try
{
await ReadEventRaids(token, true).ConfigureAwait(false);
}
catch (Exception ex)
{
await this
.DisplayMessageBox(Webhook,
$"Error occurred while reading event raids: {ex.Message}",
token
)
.ConfigureAwait(false);
}
ButtonEnable(true, ButtonViewRAM, ButtonAdvanceDate, ButtonDisconnect, ButtonDownloadEvents, SendScreenshot, ButtonReadRaids);
UpdateStatus("Completed!");
}
private void Seed_Click(object sender, EventArgs e)
{
if (ModifierKeys == Keys.Shift && RaidContainer.Raids.Count > ComboIndex.SelectedIndex)
{
var raid = RaidContainer.Raids[ComboIndex.SelectedIndex];
Seed.Text = HideSeed ? $"{raid.Seed:X8}" : "Hidden";
EC.Text = HideSeed ? $"{raid.EC:X8}" : "Hidden";
PID.Text =
(HideSeed ? $"{raid.PID:X8}" : "Hidden")
+ $"{(raid.IsShiny ? " (☆)" : string.Empty)}";
HideSeed = !HideSeed;
ActiveControl = null;
}
}
private void ConfigSettings_Click(object sender, EventArgs e)
{
var form = new ConfigWindow(Config);
ShowDialog(form);
}
private void EnableFilters_Click(object sender, EventArgs e)
{
Config.EnableFilters = CheckEnableFilters.Checked;
}
private readonly JsonSerializerOptions options = new() { WriteIndented = true };
private void MainWindow_FormClosing(object sender, FormClosingEventArgs e)
{
var configpath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "config.json");
string output = JsonSerializer.Serialize(Config, options);
using StreamWriter sw = new(configpath);
sw.Write(output);
if (ConnectionWrapper is { Connected: true })
{
try
{
_ = ConnectionWrapper.DisconnectAsync(Source.Token).Result;
}
catch
{
// ignored
}
}
Source.Cancel();
DateAdvanceSource.Cancel();
Source = new();
DateAdvanceSource = new();
}
private async Task ReadEventRaids(CancellationToken token, bool force = false)
{
var priorityFile = Path.Combine(
Directory.GetCurrentDirectory(),
"cache",
"raid_priority_array"
);
if (!force && File.Exists(priorityFile))
{
var (_, version) = FlatbufferDumper.DumpDeliveryPriorities(
await File.ReadAllBytesAsync(priorityFile, token)
);
var block = await ConnectionWrapper
.ReadBlockDefault(
BCATRaidPriorityLocation,
"raid_priority_array.tmp",
true,
token
)
.ConfigureAwait(false);
var (_, v2) = FlatbufferDumper.DumpDeliveryPriorities(block);
if (version != v2)
force = true;
var tempFile = Path.Combine(
Directory.GetCurrentDirectory(),
"cache",
"raid_priority_array.tmp"
);
if (File.Exists(tempFile))
File.Delete(tempFile);
if (v2 == 0) // raid reset
return;
}
var deliveryRaidPriorityFlatbuffer = await ConnectionWrapper
.ReadBlockDefault(BCATRaidPriorityLocation, "raid_priority_array", force, token)
.ConfigureAwait(false);
var (groupID, priority) = FlatbufferDumper.DumpDeliveryPriorities(deliveryRaidPriorityFlatbuffer);
if (priority == 0)
return;
var deliveryRaidFlatbuffer = await ConnectionWrapper
.ReadBlockDefault(BCATRaidBinaryLocation, "raid_enemy_array", force, token)
.ConfigureAwait(false);
var deliveryFixedRewardFlatbuffer = await ConnectionWrapper
.ReadBlockDefault(
BCATRaidFixedRewardLocation,
"fixed_reward_item_array",
force,
token
)
.ConfigureAwait(false);
var deliveryLotteryRewardFlatbuffer = await ConnectionWrapper
.ReadBlockDefault(
BCATRaidLotteryRewardLocation,
"lottery_reward_item_array",
force,
token
)
.ConfigureAwait(false);
RaidContainer.DistTeraRaids = TeraDistribution.GetAllEncounters(deliveryRaidFlatbuffer);
RaidContainer.MightTeraRaids = TeraMight.GetAllEncounters(deliveryRaidFlatbuffer);
RaidContainer.DeliveryRaidPriority = groupID;
RaidContainer.DeliveryRaidFixedRewards = FlatbufferDumper.DumpFixedRewards(
deliveryFixedRewardFlatbuffer
);
RaidContainer.DeliveryRaidLotteryRewards = FlatbufferDumper.DumpLotteryRewards(
deliveryLotteryRewardFlatbuffer
);
}
private void DisplayRaid()
{
int index = ComboIndex.SelectedIndex;
var raids = RaidContainer.Raids;
if (raids.Count > index)
{
Raid raid = raids[index];
var encounter = RaidContainer.Encounters[index];
Seed.Text = !HideSeed ? $"{raid.Seed:X8}" : "Hidden";
EC.Text = !HideSeed ? $"{raid.EC:X8}" : "Hidden";
PID.Text = GetPIDString(raid, encounter);
Area.Text =
$"{Areas.GetArea((int)(raid.Area - 1), raid.MapParent)} - Den {raid.Den}";
labelEvent.Visible = raid.IsEvent;
var teraType = raid.GetTeraType(encounter);
TeraType.Text = RaidContainer.Strings.types[teraType];
int starCount = encounter switch
{
TeraDistribution => encounter.Stars,
TeraMight => encounter.Stars,
_ => raid.GetStarCount(raid.Difficulty, Config.Progress, raid.IsBlack),
};
Difficulty.Text = string.Concat(Enumerable.Repeat("☆", starCount));
var param = encounter.GetParam();
var blank = new PK9 { Species = encounter.Species, Form = encounter.Form };
raid.GenerateDataPK9(blank, param, encounter.Shiny, raid.Seed);
var img = blank.Sprite();
img = (Bitmap)ApplyTeraColor((byte)teraType, img, SpriteBackgroundType.BottomStripe);
var form = ShowdownParsing.GetStringFromForm(
encounter.Form,
RaidContainer.Strings,
encounter.Species,
EntityContext.Gen9
);
if (form.Length > 0 && form[0] != '-')
form = form.Insert(0, "-");
Species.Text = $"{RaidContainer.Strings.Species[encounter.Species]}{form}";
Sprite.Image = img;
GemIcon.Image = GetDisplayGemImage(teraType, raid);
Gender.Text = $"{(Gender)blank.Gender}";
var nature = blank.Nature;
Nature.Text = $"{RaidContainer.Strings.Natures[(int)nature]}";
Ability.Text = $"{RaidContainer.Strings.Ability[blank.Ability]}";
var extraMoves = new ushort[] { 0, 0, 0, 0 };
for (int i = 0; i < encounter.ExtraMoves.Length; i++)
{
if (i < extraMoves.Length)
extraMoves[i] = encounter.ExtraMoves[i];
}
Move1.Text = ShowExtraMoves
? RaidContainer.Strings.Move[extraMoves[0]]
: RaidContainer.Strings.Move[encounter.Move1];
Move2.Text = ShowExtraMoves
? RaidContainer.Strings.Move[extraMoves[1]]
: RaidContainer.Strings.Move[encounter.Move2];
Move3.Text = ShowExtraMoves
? RaidContainer.Strings.Move[extraMoves[2]]
: RaidContainer.Strings.Move[encounter.Move3];
Move4.Text = ShowExtraMoves
? RaidContainer.Strings.Move[extraMoves[3]]
: RaidContainer.Strings.Move[encounter.Move4];
Span _ivs = stackalloc int[6];
blank.GetIVs(_ivs);
IVs.Text = IVsString(Utils.ToSpeedLast(_ivs));
toolTip.SetToolTip(IVs, IVsString(Utils.ToSpeedLast(_ivs), true));
PID.BackColor = raid.CheckIsShiny(encounter) ? Color.Gold : DefaultColor;
IVs.BackColor = IVs.Text is "31/31/31/31/31/31" ? Color.YellowGreen : DefaultColor;
return;
}
var msg = $"Unable to display raid at index {index}. Ensure there are no cheats running or anything else that might shift RAM (Edizon, overlays, etc.), then reboot your console and try again.";
Task.Run(async () => await this.DisplayMessageBox(Webhook, msg, Source.Token).ConfigureAwait(false), Source.Token);
}
private static Image? GetDisplayGemImage(int teratype, Raid raid)
{
var shouldDisplayBlack = raid.IsBlack || raid.Flags == 3;
var baseImg = shouldDisplayBlack
? (Image?)Properties.Resources.ResourceManager.GetObject($"black_{teratype:D2}")
: (Image?)Properties.Resources.ResourceManager.GetObject($"gem_{teratype:D2}");
if (baseImg is null)
return null;
var backlayer = new Bitmap(
baseImg.Width + 10,
baseImg.Height + 10,
baseImg.PixelFormat
);
baseImg = ImageUtil.LayerImage(backlayer, baseImg, 5, 5);
var pixels = ImageUtil.GetPixelData((Bitmap)baseImg);
for (int i = 0; i < pixels.Length; i += 4)
{
if (pixels[i + 3] == 0)
{
pixels[i] = 0;
pixels[i + 1] = 0;
pixels[i + 2] = 0;
}
}
baseImg = ImageUtil.GetBitmap(
pixels,
baseImg.Width,
baseImg.Height,
baseImg.PixelFormat
);
if (shouldDisplayBlack)
{
var color = Color.Indigo;
SpriteUtil.GetSpriteGlow(baseImg, color.B, color.G, color.R, out var glow);
baseImg = ImageUtil.LayerImage(
ImageUtil.GetBitmap(glow, baseImg.Width, baseImg.Height, baseImg.PixelFormat),
baseImg,
0,
0
);
}
else if (raid.IsEvent)
{
var color = Color.DarkTurquoise;
SpriteUtil.GetSpriteGlow(baseImg, color.B, color.G, color.R, out var glow);
baseImg = ImageUtil.LayerImage(
ImageUtil.GetBitmap(glow, baseImg.Width, baseImg.Height, baseImg.PixelFormat),
baseImg,
0,
0
);
}
return baseImg;
}
private void DisplayPrettyRaid()
{
if (teraRaidView is null)
{
Task.Run(
async () =>
await this
.DisplayMessageBox(Webhook,
"Something went terribly wrong: teraRaidView is not initialized.",
Source.Token
)
.ConfigureAwait(false),
Source.Token
);
return;
}
int index = ComboIndex.SelectedIndex;
var raids = RaidContainer.Raids;
if (raids.Count > index)
{
Raid raid = raids[index];
var encounter = RaidContainer.Encounters[index];
teraRaidView.Area.Text =
$"{Areas.GetArea((int)(raid.Area - 1), raid.MapParent)} - Den {raid.Den}";
var teraType = raid.GetTeraType(encounter);
teraRaidView.TeraType.Image = (Bitmap)
Properties.Resources.ResourceManager.GetObject($"gem_text_{teraType}")!;
int StarCount = encounter switch
{
TeraDistribution => encounter.Stars,
TeraMight => encounter.Stars,
_ => raid.GetStarCount(raid.Difficulty, Config.Progress, raid.IsBlack),
};
teraRaidView.Difficulty.Text = string.Concat(Enumerable.Repeat("⭐", StarCount));
var param = encounter.GetParam();
var blank = new PK9 { Species = encounter.Species, Form = encounter.Form };
raid.GenerateDataPK9(blank, param, encounter.Shiny, raid.Seed);
var img = blank.Sprite();
teraRaidView.picBoxPokemon.Image = img;
var form = Utils.GetFormString(blank.Species, blank.Form, RaidContainer.Strings);
teraRaidView.Species.Text =
$"{RaidContainer.Strings.Species[encounter.Species]}{form}";
teraRaidView.Gender.Text = $"{(Gender)blank.Gender}";
var nature = blank.Nature;
teraRaidView.Nature.Text = $"{RaidContainer.Strings.Natures[(int)nature]}";
teraRaidView.Ability.Text = $"{RaidContainer.Strings.Ability[blank.Ability]}";
teraRaidView.Move1.Text =
encounter.Move1 > 0 ? RaidContainer.Strings.Move[encounter.Move1] : "---";
teraRaidView.Move2.Text =
encounter.Move2 > 0 ? RaidContainer.Strings.Move[encounter.Move2] : "---";
teraRaidView.Move3.Text =
encounter.Move3 > 0 ? RaidContainer.Strings.Move[encounter.Move3] : "---";
teraRaidView.Move4.Text =
encounter.Move4 > 0 ? RaidContainer.Strings.Move[encounter.Move4] : "---";
var length = encounter.ExtraMoves.Length < 4 ? 4 : encounter.ExtraMoves.Length;
var extraMoves = new ushort[length];
for (int i = 0; i < encounter.ExtraMoves.Length; i++)
extraMoves[i] = encounter.ExtraMoves[i];
teraRaidView.Move5.Text =
extraMoves[0] > 0 ? RaidContainer.Strings.Move[extraMoves[0]] : "---";
teraRaidView.Move6.Text =
extraMoves[1] > 0 ? RaidContainer.Strings.Move[extraMoves[1]] : "---";
teraRaidView.Move7.Text =
extraMoves[2] > 0 ? RaidContainer.Strings.Move[extraMoves[2]] : "---";
teraRaidView.Move8.Text =
extraMoves[3] > 0 ? RaidContainer.Strings.Move[extraMoves[3]] : "---";
Span _ivs = stackalloc int[6];
blank.GetIVs(_ivs);
var ivs = Utils.ToSpeedLast(_ivs);
// HP
teraRaidView.HP.Text = $"{ivs[0]:D2}";
teraRaidView.HP.BackColor = Color.FromArgb(0, 5, 25);
if (teraRaidView.HP.Text is "31")
teraRaidView.HP.BackColor = Color.ForestGreen;
else if (teraRaidView.HP.Text is "00")
teraRaidView.HP.BackColor = Color.DarkRed;
// ATK
teraRaidView.ATK.Text = $"{ivs[1]:D2}";
teraRaidView.ATK.BackColor = Color.FromArgb(0, 5, 25);
if (teraRaidView.ATK.Text is "31")
teraRaidView.ATK.BackColor = Color.ForestGreen;
else if (teraRaidView.ATK.Text is "00")
teraRaidView.ATK.BackColor = Color.DarkRed;
// DEF
teraRaidView.DEF.Text = $"{ivs[2]:D2}";
teraRaidView.DEF.BackColor = Color.FromArgb(0, 5, 25);
if (teraRaidView.DEF.Text is "31")
teraRaidView.DEF.BackColor = Color.ForestGreen;
else if (teraRaidView.DEF.Text is "00")
teraRaidView.DEF.BackColor = Color.DarkRed;
// SPA
teraRaidView.SPA.Text = $"{ivs[3]:D2}";
teraRaidView.SPA.BackColor = Color.FromArgb(0, 5, 25);
if (teraRaidView.SPA.Text is "31")
teraRaidView.SPA.BackColor = Color.ForestGreen;
else if (teraRaidView.SPA.Text is "00")
teraRaidView.SPA.BackColor = Color.DarkRed;
// SPD
teraRaidView.SPD.Text = $"{ivs[4]:D2}";
teraRaidView.SPD.BackColor = Color.FromArgb(0, 5, 25);
if (teraRaidView.SPD.Text is "31")
teraRaidView.SPD.BackColor = Color.ForestGreen;
else if (teraRaidView.SPD.Text is "00")
teraRaidView.SPD.BackColor = Color.DarkRed;
// SPEED
teraRaidView.SPEED.Text = $"{ivs[5]:D2}";
teraRaidView.SPEED.BackColor = Color.FromArgb(0, 5, 25);
if (teraRaidView.SPEED.Text is "31")
teraRaidView.SPEED.BackColor = Color.ForestGreen;
else if (teraRaidView.SPEED.Text is "00")
teraRaidView.SPEED.BackColor = Color.DarkRed;
var map = GenerateMap(raid, teraType);
if (map is null)
Task.Run(async () => await this.DisplayMessageBox(Webhook, "Error generating map.", Source.Token).ConfigureAwait(false), Source.Token);
teraRaidView.Map.Image = map;
// Rewards
var rewards = RaidContainer.Rewards[index];
teraRaidView.textAbilityPatch.Text = "0";
teraRaidView.textAbilityPatch.ForeColor = Color.DimGray;
teraRaidView.labelAbilityPatch.ForeColor = Color.DimGray;
teraRaidView.textAbilityCapsule.Text = "0";
teraRaidView.textAbilityCapsule.ForeColor = Color.DimGray;
teraRaidView.labelAbilityCapsule.ForeColor = Color.DimGray;
teraRaidView.textBottleCap.Text = "0";
teraRaidView.textBottleCap.ForeColor = Color.DimGray;
teraRaidView.labelBottleCap.ForeColor = Color.DimGray;
teraRaidView.textSweetHerba.Text = "0";
teraRaidView.textSweetHerba.ForeColor = Color.DimGray;
teraRaidView.labelSweetHerba.ForeColor = Color.DimGray;
teraRaidView.textSaltyHerba.Text = "0";
teraRaidView.textSaltyHerba.ForeColor = Color.DimGray;
teraRaidView.labelSaltyHerba.ForeColor = Color.DimGray;
teraRaidView.textBitterHerba.Text = "0";
teraRaidView.textBitterHerba.ForeColor = Color.DimGray;
teraRaidView.labelBitterHerba.ForeColor = Color.DimGray;
teraRaidView.textSourHerba.Text = "0";
teraRaidView.textSourHerba.ForeColor = Color.DimGray;
teraRaidView.labelSourHerba.ForeColor = Color.DimGray;
teraRaidView.textSpicyHerba.Text = "0";
teraRaidView.textSpicyHerba.ForeColor = Color.DimGray;
teraRaidView.labelSpicyHerba.ForeColor = Color.DimGray;
for (int i = 0; i < rewards.Count; i++)
{
if (rewards[i].Item1 == 645)
{
teraRaidView.textAbilityCapsule.Text = (
int.Parse(teraRaidView.textAbilityCapsule.Text) + 1
).ToString();
teraRaidView.textAbilityCapsule.ForeColor = Color.White;
teraRaidView.labelAbilityCapsule.ForeColor = Color.WhiteSmoke;
}
if (rewards[i].Item1 == 795)
{
teraRaidView.textBottleCap.Text = (
int.Parse(teraRaidView.textBottleCap.Text) + 1
).ToString();
teraRaidView.textBottleCap.ForeColor = Color.White;
teraRaidView.labelBottleCap.ForeColor = Color.WhiteSmoke;
}
if (rewards[i].Item1 == 1606)
{
teraRaidView.textAbilityPatch.Text = (
int.Parse(teraRaidView.textAbilityPatch.Text) + 1
).ToString();
teraRaidView.textAbilityPatch.ForeColor = Color.White;
teraRaidView.labelAbilityPatch.ForeColor = Color.WhiteSmoke;
}
if (rewards[i].Item1 == 1904)
{
teraRaidView.textSweetHerba.Text = (
int.Parse(teraRaidView.textSweetHerba.Text) + 1
).ToString();
teraRaidView.textSweetHerba.ForeColor = Color.White;
teraRaidView.labelSweetHerba.ForeColor = Color.WhiteSmoke;
}
if (rewards[i].Item1 == 1905)
{
teraRaidView.textSaltyHerba.Text = (
int.Parse(teraRaidView.textSaltyHerba.Text) + 1
).ToString();
teraRaidView.textSaltyHerba.ForeColor = Color.White;
teraRaidView.labelSaltyHerba.ForeColor = Color.WhiteSmoke;
}
if (rewards[i].Item1 == 1906)
{
teraRaidView.textSourHerba.Text = (
int.Parse(teraRaidView.textSourHerba.Text) + 1
).ToString();
teraRaidView.textSourHerba.ForeColor = Color.White;
teraRaidView.labelSourHerba.ForeColor = Color.WhiteSmoke;
}
if (rewards[i].Item1 == 1907)
{
teraRaidView.textBitterHerba.Text = (
int.Parse(teraRaidView.textBitterHerba.Text) + 1
).ToString();
teraRaidView.textBitterHerba.ForeColor = Color.White;
teraRaidView.labelBitterHerba.ForeColor = Color.WhiteSmoke;
}
if (rewards[i].Item1 == 1908)
{
teraRaidView.textSpicyHerba.Text = (
int.Parse(teraRaidView.textSpicyHerba.Text) + 1
).ToString();
teraRaidView.textSpicyHerba.ForeColor = Color.White;
teraRaidView.labelSpicyHerba.ForeColor = Color.WhiteSmoke;
}
}
var shiny = raid.CheckIsShiny(encounter);
teraRaidView.Shiny.Visible = shiny;
teraRaidView.picShinyAlert.Enabled = shiny;
return;
}
var msg = $"Unable to display raid at index {index}. Ensure there are no cheats running or anything else that might shift RAM (Edizon, overlays, etc.), then reboot your console and try again.";
Task.Run(
async () =>
await this
.DisplayMessageBox(Webhook, msg, Source.Token)
.ConfigureAwait(false),
Source.Token
);
}
private string GetPIDString(Raid raid, ITeraRaid? enc)
{
if (HideSeed)
return "Hidden";
const string shiny_mark = " (☆)";
var pid = $"{raid.PID:X8}";
return raid.CheckIsShiny(enc) ? pid + shiny_mark : pid;
}
private static string IVsString(ReadOnlySpan ivs, bool verbose = false)
{
string s = string.Empty;
var stats = new[] { "HP", "Atk", "Def", "SpA", "SpD", "Spe" };
for (int i = 0; i < ivs.Length; i++)
{
s += $"{ivs[i]:D2}{(verbose ? " " + stats[i] : string.Empty)}";
if (i < 5)
s += "/";
}
return s;
}
private static Image ApplyTeraColor(byte elementalType, Image img, SpriteBackgroundType type)
{
var color = TypeColor.GetTypeSpriteColor(elementalType);
var thk = SpriteBuilder.ShowTeraThicknessStripe;
var op = SpriteBuilder.ShowTeraOpacityStripe;
var bg = SpriteBuilder.ShowTeraOpacityBackground;
return ApplyColor(img, type, color, thk, op, bg);
}
private static Image ApplyColor(Image img, SpriteBackgroundType type, Color color, int thick, byte opacStripe, byte opacBack)
{
if (type == SpriteBackgroundType.BottomStripe)
{
int stripeHeight = thick; // from bottom
if ((uint)stripeHeight > img.Height) // clamp negative & too-high values back to height.
stripeHeight = img.Height;
return ImageUtil.BlendTransparentTo(img, color, opacStripe, img.Width * 4 * (img.Height - stripeHeight));
}
if (type == SpriteBackgroundType.TopStripe)
{
int stripeHeight = thick; // from top
if ((uint)stripeHeight > img.Height) // clamp negative & too-high values back to height.
stripeHeight = img.Height;
return ImageUtil.BlendTransparentTo(img, color, opacStripe, 0, (img.Width * 4 * stripeHeight) - 4);
}
if (type == SpriteBackgroundType.FullBackground) // full background
return ImageUtil.BlendTransparentTo(img, color, opacBack);
return img;
}
private static Bitmap? GenerateMap(Raid raid, int teratype)
{
var original = PKHeX.Drawing.Misc.TypeSpriteUtil.GetTypeSpriteGem((byte)teratype);
if (original is null)
return null;
var gem = new Bitmap(original, new Size(30, 30));
SpriteUtil.GetSpriteGlow(gem, 0xFF, 0xFF, 0xFF, out var glow, true);
gem = ImageUtil.LayerImage(gem, ImageUtil.GetBitmap(glow, gem.Width, gem.Height, gem.PixelFormat), 0, 0);
if (DenLocationsBase is null || DenLocationsBase.Count == 0 ||
DenLocationsKitakami is null || DenLocationsKitakami.Count == 0 ||
DenLocationsBlueberry is null || DenLocationsBlueberry.Count == 0)
{
return null;
}
var locData = raid.MapParent switch
{
TeraRaidMapParent.Paldea => DenLocationsBase,
TeraRaidMapParent.Kitakami => DenLocationsKitakami,
_ => DenLocationsBlueberry,
};
var map = raid.MapParent switch
{
TeraRaidMapParent.Paldea => MapBase,
TeraRaidMapParent.Kitakami => MapKitakami,
_ => MapBlueberry,
};
try
{
(double x, double z) = GetCoordinate(raid, locData, gem);
return ImageUtil.LayerImage(map, gem, (int)x, (int)z);
}
catch
{
return null;
}
}
private static (double x, double y) GetCoordinate(Raid raid, IReadOnlyDictionary locData, Bitmap gem)
{
var m = MapMagic.GetMapMagic(raid.MapParent);
double x = m.ConvertX(locData[$"{raid.Area}-{raid.LotteryGroup}-{raid.Den}"][0]) - (gem.Size.Width / 2);
double z = m.ConvertZ(locData[$"{raid.Area}-{raid.LotteryGroup}-{raid.Den}"][2]) - (gem.Size.Height / 2);
return (x, z);
}
private bool StopAdvanceDate(IEnumerable previousSeeds)
{
var raids = RaidContainer.Raids;
var curSeeds = raids.Select(x => x.Seed).ToArray();
var sameRaids = curSeeds.Except(previousSeeds).ToArray().Length == 0;
StatDaySkipTries++;
if (sameRaids)
return false;
StatDaySkipSuccess++;
if (!Config.EnableFilters)
return true;
foreach (RaidFilter rf in RaidFilters)
{
var index = Invoke(() => RaidBoost.SelectedIndex);
var encounters = RaidContainer.Encounters;
if (rf.FilterSatisfied(RaidContainer, encounters, raids, index))
return true;
}
return StopAdvances;
}
private async Task ReadRaids(CancellationToken token)
{
if (Config is { PaldeaScan: false, KitakamiScan: false, BlueberryScan: false })
{
await this.DisplayMessageBox(Webhook, "Please select a location to scan in your General Settings.", token, "No locations selected").ConfigureAwait(false);
return;
}
if (RaidBlockOffsetBase == 0)
{
UpdateStatus("Caching the raid block pointers...");
RaidBlockOffsetBase = await ConnectionWrapper.Connection
.PointerAll(RaidBlockPointerBase.ToArray(), token)
.ConfigureAwait(false);
RaidBlockOffsetKitakami = await ConnectionWrapper.Connection
.PointerAll(RaidBlockPointerKitakami.ToArray(), token)
.ConfigureAwait(false);
RaidBlockOffsetBlueberry = await ConnectionWrapper.Connection
.PointerAll(RaidBlockPointerBlueberry.ToArray(), token)
.ConfigureAwait(false);
}
RaidContainer.ClearRaids();
RaidContainer.ClearEncounters();
RaidContainer.ClearRewards();
// Base
var msg = string.Empty;
int delivery,
enc;
if (Config.PaldeaScan)
{
UpdateStatus("Reading Paldea raid block...");
var data = await ConnectionWrapper.Connection
.ReadBytesAbsoluteAsync(RaidBlockOffsetBase + RaidBlock.HEADER_SIZE, (int)RaidBlock.SIZE_BASE, token)
.ConfigureAwait(false);
(delivery, enc) = RaidContainer.ReadAllRaids(data, Config.Progress, Config.EventProgress, GetRaidBoost(), TeraRaidMapParent.Paldea);
if (enc > 0)
msg += $"Failed to find encounters for {enc} raid(s).\n";
if (delivery > 0)
msg += $"Invalid delivery group ID for {delivery} raid(s). Try deleting the \"cache\" folder.\n";
if (msg != string.Empty)
{
msg += $"\nMore info can be found in the \"raid_dbg_{TeraRaidMapParent.Paldea}.txt\" file.";
await this.DisplayMessageBox(Webhook, msg, token, "Raid Read Error").ConfigureAwait(false);
}
}
var raids = RaidContainer.Raids;
var encounters = RaidContainer.Encounters;
var rewards = RaidContainer.Rewards;
RaidContainer.ClearRaids();
RaidContainer.ClearEncounters();
RaidContainer.ClearRewards();
// Kitakami
if (Config.KitakamiScan)
{
UpdateStatus("Reading Kitakami raid block...");
var data = await ConnectionWrapper.Connection
.ReadBytesAbsoluteAsync(RaidBlockOffsetKitakami, (int)RaidBlock.SIZE_KITAKAMI, token)
.ConfigureAwait(false);
msg = string.Empty;
(delivery, enc) = RaidContainer.ReadAllRaids(data, Config.Progress, Config.EventProgress, GetRaidBoost(), TeraRaidMapParent.Kitakami);
if (enc > 0)
msg += $"Failed to find encounters for {enc} raid(s).\n";
if (delivery > 0)
msg += $"Invalid delivery group ID for {delivery} raid(s). Try deleting the \"cache\" folder.\n";
if (msg != string.Empty)
{
msg += $"\nMore info can be found in the \"raid_dbg_{TeraRaidMapParent.Kitakami}.txt\" file.";
await this.DisplayMessageBox(Webhook, msg, token, "Raid Read Error")
.ConfigureAwait(false);
}
}
var allRaids = raids.Concat(RaidContainer.Raids).ToList().AsReadOnly();
var allEncounters = encounters.Concat(RaidContainer.Encounters).ToList().AsReadOnly();
var allRewards = rewards.Concat(RaidContainer.Rewards).ToList().AsReadOnly();
RaidContainer.ClearRaids();
RaidContainer.ClearEncounters();
RaidContainer.ClearRewards();
// Blueberry
if (Config.BlueberryScan)
{
UpdateStatus("Reading Blueberry raid block...");
var data = await ConnectionWrapper.Connection
.ReadBytesAbsoluteAsync(RaidBlockOffsetBlueberry, (int)RaidBlock.SIZE_BLUEBERRY, token)
.ConfigureAwait(false);
msg = string.Empty;
(delivery, enc) = RaidContainer.ReadAllRaids(data, Config.Progress, Config.EventProgress, GetRaidBoost(), TeraRaidMapParent.Blueberry);
if (enc > 0)
msg += $"Failed to find encounters for {enc} raid(s).\n";
if (delivery > 0)
msg += $"Invalid delivery group ID for {delivery} raid(s). Try deleting the \"cache\" folder.\n";
if (msg != string.Empty)
{
msg += $"\nMore info can be found in the \"raid_dbg_{TeraRaidMapParent.Blueberry}.txt\" file.";
await this.DisplayMessageBox(Webhook, msg, token, "Raid Read Error")
.ConfigureAwait(false);
}
}
allRaids = allRaids.Concat(RaidContainer.Raids).ToList().AsReadOnly();
allEncounters = allEncounters.Concat(RaidContainer.Encounters).ToList().AsReadOnly();
allRewards = allRewards.Concat(RaidContainer.Rewards).ToList().AsReadOnly();
RaidContainer.SetRaids(allRaids);
RaidContainer.SetEncounters(allEncounters);
RaidContainer.SetRewards(allRewards);
UpdateStatus("Completed!");
var filterMatchCount = Enumerable.Range(0, allRaids.Count)
.Count(c => RaidFilters.Any(z => z.FilterSatisfied(RaidContainer, allEncounters[c], allRaids[c], GetRaidBoost())));
if (InvokeRequired)
Invoke(() => LabelLoadedRaids.Text = $"Matches: {filterMatchCount}");
else
LabelLoadedRaids.Text = $"Matches: {filterMatchCount}";
if (allRaids.Count > 0)
{
ButtonEnable(true, ButtonPrevious, ButtonNext);
var dataSource = Enumerable.Range(0, allRaids.Count)
.Select(z => $"{z + 1:D} / {allRaids.Count:D}")
.ToArray();
if (InvokeRequired)
Invoke(() => ComboIndex.DataSource = dataSource);
else
ComboIndex.DataSource = dataSource;
if (InvokeRequired)
Invoke(() => ComboIndex.SelectedIndex = ComboIndex.SelectedIndex < allRaids.Count ? ComboIndex.SelectedIndex : 0);
else
ComboIndex.SelectedIndex = ComboIndex.SelectedIndex < allRaids.Count ? ComboIndex.SelectedIndex : 0;
}
else
{
ButtonEnable(false, ButtonPrevious, ButtonNext);
if (allRaids.Count > RaidBlock.MAX_COUNT_BASE + RaidBlock.MAX_COUNT_KITAKAMI || allRaids.Count == 0)
{
msg = "Bad read, ensure there are no cheats running or anything else that might shift RAM (Edizon, overlays, etc.), then reboot your console and try again.";
await this.DisplayMessageBox(Webhook, msg, token, "Raid Read Error").ConfigureAwait(false);
}
}
}
public void Game_SelectedIndexChanged(string name)
{
Config.Game = name;
RaidContainer.SetGame(name);
if (RaidContainer.Raids.Count > 0)
DisplayRaid();
}
public void Protocol_SelectedIndexChanged(SwitchProtocol protocol)
{
Config.Protocol = protocol;
ConnectionConfig.Protocol = protocol;
if (protocol is SwitchProtocol.USB)
{
InputSwitchIP.Visible = false;
LabelSwitchIP.Visible = false;
USB_Port_label.Visible = true;
USB_Port_TB.Visible = true;
ConnectionConfig.Port = Config.UsbPort;
}
else
{
InputSwitchIP.Visible = true;
LabelSwitchIP.Visible = true;
USB_Port_label.Visible = false;
USB_Port_TB.Visible = false;
ConnectionConfig.Port = 6000;
}
}
private void DisplayMap(object sender, EventArgs e)
{
var raids = RaidContainer.Raids;
if (raids.Count == 0)
{
Task.Run(async () => await this.DisplayMessageBox(Webhook, "Raids not loaded.", Source.Token).ConfigureAwait(false), Source.Token);
return;
}
var raid = raids[ComboIndex.SelectedIndex];
var encounter = RaidContainer.Encounters[ComboIndex.SelectedIndex];
var teraType = raid.GetTeraType(encounter);
var map = GenerateMap(raid, teraType);
if (map is null)
{
Task.Run(async () => await this.DisplayMessageBox(Webhook, "Error generating map.", Source.Token).ConfigureAwait(false), Source.Token);
return;
}
var form = new MapView(map);
ShowDialog(form);
}
private void Rewards_Click(object sender, EventArgs e)
{
if (RaidContainer.Raids.Count == 0)
{
Task.Run(async () => await this.DisplayMessageBox(Webhook, "Raids not loaded.", Source.Token).ConfigureAwait(false), Source.Token);
return;
}
var rewards = RaidContainer.Rewards[ComboIndex.SelectedIndex];
if (rewards is null)
{
Task.Run(async () => await this.DisplayMessageBox(Webhook, "Error while displaying rewards.", Source.Token).ConfigureAwait(false), Source.Token);
return;
}
var form = new RewardsView(RaidContainer.Strings.Item, RaidContainer.Strings.Move, rewards);
ShowDialog(form);
}
private void RaidBoost_SelectedIndexChanged(object sender, EventArgs e)
{
RaidContainer.ClearRewards();
var raids = RaidContainer.Raids;
var encounters = RaidContainer.Encounters;
List> newRewards = [];
for (int i = 0; i < raids.Count; i++)
{
var raid = raids[i];
var encounter = encounters[i];
newRewards.Add(encounter.GetRewards(RaidContainer, raid, RaidBoost.SelectedIndex));
}
RaidContainer.SetRewards(newRewards);
}
private void Move_Clicked(object sender, EventArgs e)
{
if (RaidContainer.Raids.Count == 0)
{
Task.Run(async () => await this.DisplayMessageBox(Webhook, "Raids not loaded.", Source.Token).ConfigureAwait(false), Source.Token);
return;
}
var encounter = RaidContainer.Encounters[ComboIndex.SelectedIndex];
if (encounter is null)
return;
ShowExtraMoves ^= true;
LabelMoves.Text = ShowExtraMoves ? "Extra:" : "Moves:";
LabelMoves.Location = LabelMoves.Location with { X = LabelMoves.Location.X + (ShowExtraMoves ? 9 : -9) };
var length = encounter.ExtraMoves.Length < 4 ? 4 : encounter.ExtraMoves.Length;
var extraMoves = new ushort[length];
for (int i = 0; i < encounter.ExtraMoves.Length; i++)
extraMoves[i] = encounter.ExtraMoves[i];
Move1.Text = ShowExtraMoves
? RaidContainer.Strings.Move[extraMoves[0]]
: RaidContainer.Strings.Move[encounter.Move1];
Move2.Text = ShowExtraMoves
? RaidContainer.Strings.Move[extraMoves[1]]
: RaidContainer.Strings.Move[encounter.Move2];
Move3.Text = ShowExtraMoves
? RaidContainer.Strings.Move[extraMoves[2]]
: RaidContainer.Strings.Move[encounter.Move3];
Move4.Text = ShowExtraMoves
? RaidContainer.Strings.Move[extraMoves[3]]
: RaidContainer.Strings.Move[encounter.Move4];
}
private void ComboIndex_SelectedIndexChanged(object sender, EventArgs e)
{
if (RaidContainer.Raids.Count == 0)
return;
DisplayRaid();
if (Config.StreamerView)
DisplayPrettyRaid();
}
private void SendScreenshot_Click(object sender, EventArgs e)
{
Task.Run(async () =>
{
try
{
await Webhook.SendScreenshot(ConnectionWrapper.Connection, Source.Token).ConfigureAwait(false);
}
catch (Exception ex)
{
await this.DisplayMessageBox(Webhook, $"Could not send the screenshot: {ex.Message}", Source.Token).ConfigureAwait(false);
}
},
Source.Token
);
}
private void SearchTimer_Elapsed(object sender, EventArgs e)
{
if (!stopwatch.IsRunning)
return;
var timeSpan = stopwatch.Elapsed;
var time = $"{timeSpan.Days:00}:{timeSpan.Hours:00}:{timeSpan.Minutes:00}:{timeSpan.Seconds:00}";
Invoke(() => Text = $"{formTitle} [Searching for {time}]");
if (Config.StreamerView && teraRaidView is not null)
Invoke(() => teraRaidView.textSearchTime.Text = time);
}
public void TestWebhook() => Task.Run(async () => await TestWebhookAsync(Source.Token).ConfigureAwait(false), Source.Token);
private async Task TestWebhookAsync(CancellationToken token)
{
var filter = new RaidFilter { Name = "Test Webhook" };
int i = ComboIndex.SelectedIndex;
var raids = RaidContainer.Raids;
var encounters = RaidContainer.Encounters;
var rewards = RaidContainer.Rewards;
if (i <= -1 || encounters[i] is null || raids[i] is null)
{
await this.DisplayMessageBox(Webhook, "Please connect to your device and ensure a raid has been found.", token).ConfigureAwait(false);
return;
}
var timeSpan = stopwatch.Elapsed;
string time = $"{timeSpan.Hours:00}:{timeSpan.Minutes:00}:{timeSpan.Seconds:00}";
var teraType = raids[i].GetTeraType(encounters[i]);
var color = TypeColor.GetTypeSpriteColor((byte)teraType);
var hexColor = $"{color.R:X2}{color.G:X2}{color.B:X2}";
var blank = new PK9
{
Species = encounters[i].Species,
Form = encounters[i].Form,
Gender = encounters[i].Gender,
};
blank.SetSuggestedFormArgument();
var spriteName = GetSpriteNameForUrl(blank, raids[i].CheckIsShiny(encounters[i]));
await Webhook.SendNotification(encounters[i], raids[i], filter, time, rewards[i], hexColor, spriteName, token).ConfigureAwait(false);
}
public void ToggleStreamerView()
{
if (Config.StreamerView)
{
teraRaidView = new();
teraRaidView.Map.Image = MapBase;
teraRaidView.Show();
}
else if (!Config.StreamerView && teraRaidView is not null)
{
teraRaidView.Close();
}
}
private static string GetSpriteNameForUrl(PK9 pk, bool shiny)
{
// Since we're later using this for URL assembly later, we need dashes instead of underscores for forms.
var spriteName = SpriteName.GetResourceStringSprite(pk.Species, pk.Form, pk.Gender, pk.FormArgument, EntityContext.Gen9, shiny)[1..];
return spriteName.Replace('_', '-').Insert(0, "_");
}
private void B_DateTools_Click(object sender, EventArgs e)
{
Task.Run(async () =>
{
try
{
var tick = await ConnectionWrapper.GetCurrentTime(Source.Token).ConfigureAwait(false);
var form = new TickModifier(tick, ConnectionWrapper, Webhook, Source.Token);
ShowDialog(form);
}
catch (Exception ex)
{
await this.DisplayMessageBox(Webhook, $"Could not read the date: {ex.Message}", Source.Token).ConfigureAwait(false);
}
});
}
private void CheckForUpdates()
{
Task.Run(async () =>
{
Version? latestVersion;
try { latestVersion = Utils.GetLatestVersion(); }
catch (Exception ex)
{
Debug.WriteLine($"Exception while checking for latest version: {ex}");
return;
}
if (latestVersion is null || latestVersion <= CurrentVersion)
return;
while (!IsHandleCreated) // Wait for form to be ready
await Task.Delay(2_000).ConfigureAwait(false);
await InvokeAsync(() => NotifyNewVersionAvailable(latestVersion));
});
}
private void NotifyNewVersionAvailable(Version version)
{
Text += $" - Update v{version.Major}.{version.Minor}.{version.Build} available!";
UpdateStatus($"Update v{version.Major}.{version.Minor}.{version.Build} available!");
#if !DEBUG
using UpdateNotifPopup nup = new(CurrentVersion, version);
if (nup.ShowDialog() == DialogResult.OK)
{
Process.Start(new ProcessStartInfo("https://github.com/LegoFigure11/RaidCrawler/releases/")
{
UseShellExecute = true
});
}
#endif
}
}
================================================
FILE: RaidCrawler.WinForms/MainWindow.resx
================================================
text/microsoft-resx
2.0
System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
136, 17
17, 17
226, 17
AAABAAEAGBgAAAEAIACICQAAFgAAACgAAAAYAAAAMAAAAAEAIAAAAAAAAAkAAMMOAADDDgAAAAAAAAAA
AACDiI4Uy83Ql+jr6+Tk5+ffz9LUvrm8v56lqa2AlZieZYiOlFF7gYhEb3Z+O2lxeTlpcXk4bnV9OnqB
iEOIjpRQmJyiYKmssXm7v8KZ0tTWuubo6drn6enku77Br2pxeDDX2NtL+vn69OnX5P/lz9//9Orx//n2
+f/4+Pn89fb29u/y8e3p6+zm5ejo4OTn597k5+fe5ejo3+nr6+Xv8vHt9ff39fj4+fv59/n/9Orx/+TP
3//p1+T/9vb2+qqvs3Xs7e5g/Pr7/bR6pv+YSIT/o1yS/7F0ov++jLL/y6PB/9Oxy//exNj/483e/+TN
3v/kzd7/5M3e/97E2P/TsMr/y6LB/76Msv+xdKL/o1yR/5hIg/+0eqb/+vn6/8fJzYHw8PFR/fv8+rV9
pv+TQH7/lEF//5NAfv+TQH7/k0B+/5VDgP+XRoL/l0aC/5ZFgf+WRYH/l0aC/5ZGgv+VQoD/k0B+/5NA
fv+TQH7/lEF//5NAfv+1fKf/+vn6/cXHynLs7e1D/fz99LuHrv+SPn3/lUJ//5VDgP+VQ4D/lUOA/5VD
gP+UQoD/pF6S/72KsP+9irD/o16S/5RCf/+VQ4D/lUOA/5VDgP+VQ4D/lUJ//5I+ff+7hq7/+fn5+rzA
wmPl5eY1/f797dGuyf+jXJL/nVGK/5hJhP+WRYH/lUOA/5RAf/+ydqP/7uHr//Lo8P/y6O//7uHq/7J2
o/+TQH7/lUOA/5ZEgf+YSIP/nE+I/6JYj//RrMj/9/j49q+zt1bh4uQo/f395vr2+f/y6PD/7N3o/+TP
3v/cwdX/1rbO/9Kvyf/v4uv/3cTX/6Rek/+kXpP/3cPX/+7h6//Rrcj/1LPM/9q+0//jzd3/6trm//Hm
7v/69vn/9vb38Kerr0Xa290e/P39297D1/+4gqv/xpq7/9GsyP/Zu9H/38bZ/+jW4//7+Pr/tX2o/5I+
ff+SPn3/tX2o//v4+v/o1uP/38fZ/9q+0//Tscv/yJ6+/7qFrf/fxtn/8vT06JyhpTnMz9AV+/38ztq+
0/+UQn//k0B+/5RCf/+WRIH/lkWB/6Nbkf/v4uz/yqHA/5ZEgf+WRIH/yqHA/+/i7P+iW5H/lkWB/5ZE
gf+UQn//k0B+/5RCf//bvtT/7/Hx35CUmS3BxMgL+/38v+LL3P+XR4P/lUOA/5VDgP+VQ4D/lUKA/5VD
gP/HnLz/9u/0/9q/0//av9P/9u/1/8edvf+VQ4D/lUKA/5VDgP+VQ4D/lUOA/5dHg//iy9z/7e/v1H6C
iCKipqkG+fv6sebS4f+aS4b/lUKA/5VDgP+VQoD/mUqG/5hJhP+ZSYT/voyy/9/G2f/fxtn/voyy/5lJ
hP+YSIT/mUqF/5VCgP+VQ4D/lUKA/5pLhv/m0uH/6OrqyG91fBhYW2AD9/j3oe3f6f+eU4v/lEJ//5VD
gP+WRYL/zabE/76Msv+TQH7/lEF//5dGgv+XRoL/lEF//5NAfv++jLH/zabD/5ZFgv+VQ4D/lEJ//55T
i//u3+r/3+LjvFdcZRL///8A9vj3jvPp8P+iWY//lEJ//5RBf/+zeKX/+vb5/9/H2f+YSIT/lUOA/5VD
gP+VQ4D/lUOA/5hIhP/fx9n/+vb5/7N4pf+UQX//lEJ//6JZj//z6fD/297frDY/SQz///8A9vf3ffXt
8/+mYJX/k0B+/55TjP/l0uH//////PXt8/+nY5b/lEF//5VDgP+VQ4D/lEF//6dilv/17fP//////eXS
4P+eU4z/k0B+/6Zfk//17fP/1tnbmwAHFQb///8A8fHxa/n1+P+tbp7/lEF//8qiwP/9/f308/T0pf79
/vLAkLT/k0B+/5VDgP+VQ4D/k0B+/8CQtP/8/Pz27Oztrf79/vHKocD/lEF//65unv/49Pf/zc/SiwAA
AAP///8A7/DwVPz7/PuzeaX/rW2d//Xu9P/19vao3N7fJf///9DbwNT/l0aC/5VDgP+VQ4D/l0aC/9zA
1f/3+fjcvsHDMP///5317vT/rW2d/7R6pv/6+fr+xMbJdQAAAAD///8A7+/wNP7+/urgyNr/6Nfk//z9
/N7f4uMz////AP3+/pnw5e7/olmQ/5RCf/+UQX//olmP//Hm7v/r7e2rOUFKCfv7+yv////Z6Nfk/+DI
2v/6+/vvxMfJSf///wD///8A2NrbBvz8/Hr////h/v7+1vHx81sAEBwB////APf4+Fr7+fv7tn6o/5NA
fv+TQH7/tn6p//v5+v3X2dtxAAAAAdDZ3AD6/v5U/v//1f///+L19fWBr7K2Cenq7AAAAAAA+Pn5APb2
9gX5+voh9/j4G9vb3gK9vb8A////AO7v8Sj////i0K3H/5RCgP+VQoD/0a3I//n7+uq/wsU5////AL/D
xgD09/cC+vv7Gvf4+CHf4OAG8fHxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6+vsAOTk
5Qj+//+x6trm/5xQif+cUIn/6trm//Hz87+Ok5gTqKquAISMlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjo+RAP///wD4+fpq+vf6/rJ2o/+ydqP/+vf5/9/h
4oAAAAACVFlhAIiPlwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAPn5+wD29vgi////2OfV4//n1eP/+vv73sjLzTD///8AWF5nAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOnp6gAdHSUA/Pz8Xv//
/9v+/v7c8fLzZDZCTAL///8AYWlxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAOPj5gAAAAAA9PT1A/v7+x/5+fkf0dLVBAAAAACvsbYAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAACAAAAAgAAAAIAAAACAAAEAgQABAIEAQQDDAMMA/wD/AP+A/wD/gf8A/8H/AP/D
/wA=
================================================
FILE: RaidCrawler.WinForms/Program.cs
================================================
namespace RaidCrawler.WinForms;
internal static class Program
{
///
/// The main entry point for the application.
///
[STAThread]
static void Main()
{
// To customize application configuration such as set high DPI settings or default font,
// see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize();
Application.Run(new MainWindow());
}
}
================================================
FILE: RaidCrawler.WinForms/Properties/Resources.Designer.cs
================================================
//------------------------------------------------------------------------------
//
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
//
//------------------------------------------------------------------------------
namespace RaidCrawler.WinForms.Properties {
using System;
///
/// A strongly-typed resource class, for looking up localized strings, etc.
///
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
///
/// Returns the cached ResourceManager instance used by this class.
///
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("RaidCrawler.WinForms.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
///
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
///
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap black_00 {
get {
object obj = ResourceManager.GetObject("black_00", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap black_01 {
get {
object obj = ResourceManager.GetObject("black_01", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap black_02 {
get {
object obj = ResourceManager.GetObject("black_02", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap black_03 {
get {
object obj = ResourceManager.GetObject("black_03", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap black_04 {
get {
object obj = ResourceManager.GetObject("black_04", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap black_05 {
get {
object obj = ResourceManager.GetObject("black_05", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap black_06 {
get {
object obj = ResourceManager.GetObject("black_06", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap black_07 {
get {
object obj = ResourceManager.GetObject("black_07", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap black_08 {
get {
object obj = ResourceManager.GetObject("black_08", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap black_09 {
get {
object obj = ResourceManager.GetObject("black_09", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap black_10 {
get {
object obj = ResourceManager.GetObject("black_10", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap black_11 {
get {
object obj = ResourceManager.GetObject("black_11", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap black_12 {
get {
object obj = ResourceManager.GetObject("black_12", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap black_13 {
get {
object obj = ResourceManager.GetObject("black_13", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap black_14 {
get {
object obj = ResourceManager.GetObject("black_14", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap black_15 {
get {
object obj = ResourceManager.GetObject("black_15", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap black_16 {
get {
object obj = ResourceManager.GetObject("black_16", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap black_17 {
get {
object obj = ResourceManager.GetObject("black_17", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap gem_00 {
get {
object obj = ResourceManager.GetObject("gem_00", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap gem_01 {
get {
object obj = ResourceManager.GetObject("gem_01", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap gem_02 {
get {
object obj = ResourceManager.GetObject("gem_02", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap gem_03 {
get {
object obj = ResourceManager.GetObject("gem_03", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap gem_04 {
get {
object obj = ResourceManager.GetObject("gem_04", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap gem_05 {
get {
object obj = ResourceManager.GetObject("gem_05", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap gem_06 {
get {
object obj = ResourceManager.GetObject("gem_06", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap gem_07 {
get {
object obj = ResourceManager.GetObject("gem_07", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap gem_08 {
get {
object obj = ResourceManager.GetObject("gem_08", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap gem_09 {
get {
object obj = ResourceManager.GetObject("gem_09", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap gem_10 {
get {
object obj = ResourceManager.GetObject("gem_10", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap gem_11 {
get {
object obj = ResourceManager.GetObject("gem_11", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap gem_12 {
get {
object obj = ResourceManager.GetObject("gem_12", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap gem_13 {
get {
object obj = ResourceManager.GetObject("gem_13", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap gem_14 {
get {
object obj = ResourceManager.GetObject("gem_14", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap gem_15 {
get {
object obj = ResourceManager.GetObject("gem_15", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap gem_16 {
get {
object obj = ResourceManager.GetObject("gem_16", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap gem_17 {
get {
object obj = ResourceManager.GetObject("gem_17", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap gem_text_0 {
get {
object obj = ResourceManager.GetObject("gem_text_0", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap gem_text_1 {
get {
object obj = ResourceManager.GetObject("gem_text_1", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap gem_text_10 {
get {
object obj = ResourceManager.GetObject("gem_text_10", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap gem_text_11 {
get {
object obj = ResourceManager.GetObject("gem_text_11", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap gem_text_12 {
get {
object obj = ResourceManager.GetObject("gem_text_12", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap gem_text_13 {
get {
object obj = ResourceManager.GetObject("gem_text_13", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap gem_text_14 {
get {
object obj = ResourceManager.GetObject("gem_text_14", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap gem_text_15 {
get {
object obj = ResourceManager.GetObject("gem_text_15", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap gem_text_16 {
get {
object obj = ResourceManager.GetObject("gem_text_16", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap gem_text_17 {
get {
object obj = ResourceManager.GetObject("gem_text_17", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap gem_text_2 {
get {
object obj = ResourceManager.GetObject("gem_text_2", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap gem_text_3 {
get {
object obj = ResourceManager.GetObject("gem_text_3", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap gem_text_4 {
get {
object obj = ResourceManager.GetObject("gem_text_4", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap gem_text_5 {
get {
object obj = ResourceManager.GetObject("gem_text_5", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap gem_text_6 {
get {
object obj = ResourceManager.GetObject("gem_text_6", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap gem_text_7 {
get {
object obj = ResourceManager.GetObject("gem_text_7", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap gem_text_8 {
get {
object obj = ResourceManager.GetObject("gem_text_8", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap gem_text_9 {
get {
object obj = ResourceManager.GetObject("gem_text_9", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap item_0645_hires {
get {
object obj = ResourceManager.GetObject("item_0645_hires", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap item_0795_hires {
get {
object obj = ResourceManager.GetObject("item_0795_hires", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap item_1606_hires {
get {
object obj = ResourceManager.GetObject("item_1606_hires", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap item_1904 {
get {
object obj = ResourceManager.GetObject("item_1904", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap item_1904_hires {
get {
object obj = ResourceManager.GetObject("item_1904_hires", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap item_1905 {
get {
object obj = ResourceManager.GetObject("item_1905", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap item_1905_hires {
get {
object obj = ResourceManager.GetObject("item_1905_hires", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap item_1906 {
get {
object obj = ResourceManager.GetObject("item_1906", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap item_1906_hires {
get {
object obj = ResourceManager.GetObject("item_1906_hires", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap item_1907 {
get {
object obj = ResourceManager.GetObject("item_1907", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap item_1907_hires {
get {
object obj = ResourceManager.GetObject("item_1907_hires", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap item_1908 {
get {
object obj = ResourceManager.GetObject("item_1908", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap item_1908_hires {
get {
object obj = ResourceManager.GetObject("item_1908_hires", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap material {
get {
object obj = ResourceManager.GetObject("material", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
///
/// Looks up a localized resource of type System.Drawing.Bitmap.
///
internal static System.Drawing.Bitmap shard {
get {
object obj = ResourceManager.GetObject("shard", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
}
}
================================================
FILE: RaidCrawler.WinForms/Properties/Resources.resx
================================================
text/microsoft-resx
2.0
System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
..\resources\black_00.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\resources\black_01.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\resources\black_02.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\resources\black_03.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\resources\black_04.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\resources\black_05.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\resources\black_06.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\resources\black_07.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\resources\black_08.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\resources\black_09.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\resources\black_10.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\resources\black_11.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\resources\black_12.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\resources\black_13.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\resources\black_14.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\resources\black_15.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\resources\black_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\resources\black_17.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\resources\gem_00.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\resources\gem_01.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\resources\gem_02.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\resources\gem_03.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\resources\gem_04.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\resources\gem_05.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\resources\gem_06.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\resources\gem_07.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\resources\gem_08.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\resources\gem_09.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\resources\gem_10.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\resources\gem_11.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\resources\gem_12.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\resources\gem_13.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\resources\gem_14.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\resources\gem_15.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\resources\gem_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\resources\gem_17.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\gem-text-0.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\gem-text-1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\gem-text-10.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\gem-text-11.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\gem-text-12.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\gem-text-13.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\gem-text-14.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\gem-text-15.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\gem-text-16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\gem-text-17.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\gem-text-2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\gem-text-3.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\gem-text-4.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\gem-text-5.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\gem-text-6.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\gem-text-7.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\gem-text-8.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\gem-text-9.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\item_0645_hires.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\item_0795_hires.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\item_1606_hires.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\item_1904.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\item_1904_hires.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\item_1905.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\item_1905_hires.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\item_1906.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\item_1906_hires.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\item_1907.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\item_1907_hires.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\item_1908.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\item_1908_hires.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\material.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\shard.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
================================================
FILE: RaidCrawler.WinForms/Properties/Settings.Designer.cs
================================================
//------------------------------------------------------------------------------
//
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
//
//------------------------------------------------------------------------------
namespace RaidCrawler.WinForms.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.5.0.0")]
public sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}
================================================
FILE: RaidCrawler.WinForms/Properties/Settings.settings
================================================
================================================
FILE: RaidCrawler.WinForms/RaidCrawler.WinForms.csproj
================================================
WinExe
net10.0-windows
14
enable
true
enable
Resources\MightiestMark.ico
1.1.0
1.1.0
x64
true
true
false
all
runtime; build; native; contentfiles; analyzers; buildtransitive
deps\PKHeX.Drawing.dll
deps\PKHeX.Drawing.Misc.dll
deps\PKHeX.Drawing.PokeSprite.dll
deps\SysBot.Base.dll
True
True
Resources.resx
True
True
Settings.settings
ResXFileCodeGenerator
Resources.Designer.cs
PublicSettingsSingleFileGenerator
Settings.Designer.cs
================================================
FILE: RaidCrawler.WinForms/SubForms/ConfigWindow.Designer.cs
================================================
using SysBot.Base;
namespace RaidCrawler.WinForms.SubForms
{
partial class ConfigWindow
{
///
/// Required designer variable.
///
private System.ComponentModel.IContainer components = null;
///
/// Clean up any resources being used.
///
/// true if managed resources should be disposed; otherwise, false.
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConfigWindow));
FocusWindow = new CheckBox();
EnableAlert = new CheckBox();
PlayTone = new CheckBox();
LabelMatchFound = new Label();
AlertMessage = new TextBox();
L_AdvanceDate = new Label();
L_BaseDelay = new Label();
SystemDDownPresses = new NumericUpDown();
L_DdownInput = new Label();
NavigateToSettings = new NumericUpDown();
OpenSettings = new NumericUpDown();
OpenHome = new NumericUpDown();
L_OpenHOME = new Label();
L_NavigateSettings = new Label();
L_OpenSettingsDelay = new Label();
L_ScrollSystem = new Label();
Hold = new NumericUpDown();
L_SubmenuDelay = new Label();
Submenu = new NumericUpDown();
L_DateChangeDelay = new Label();
DateChange = new NumericUpDown();
L_ReturnHomeDelay = new Label();
ReturnHome = new NumericUpDown();
L_ReOpenGameDelay = new Label();
ReturnGame = new NumericUpDown();
L_DaysToSkip = new Label();
DaysToSkip = new NumericUpDown();
UseTouch = new CheckBox();
DiscordWebhook = new TextBox();
EnableDiscordNotifications = new CheckBox();
label13 = new Label();
ExperimentalView = new CheckBox();
tabControl1 = new TabControl();
tabGeneral = new TabPage();
LocationGroup = new GroupBox();
KitakamiScanCheck = new CheckBox();
PaldeaScanCheck = new CheckBox();
Protocol_dropdown = new ComboBox();
Protocol_label = new Label();
label23 = new Label();
LabelEventProgress = new Label();
EventProgress = new ComboBox();
LabelGame = new Label();
Game = new ComboBox();
LabelStoryProgress = new Label();
StoryProgress = new ComboBox();
tabMatch = new TabPage();
tabAdvanceDate = new TabPage();
ZyroMethod = new CheckBox();
UseMapTrick = new CheckBox();
ExtraOverworldWait = new NumericUpDown();
L_ExtraOverworldWait = new Label();
RelaunchDelay = new NumericUpDown();
L_RelaunchDelay = new Label();
SystemReset = new NumericUpDown();
L_SystemReset = new Label();
UseSetStick = new CheckBox();
DodgeSystemUpdate = new CheckBox();
SaveGameDelay = new NumericUpDown();
L_SaveGame = new Label();
SaveGame = new CheckBox();
L_OvershootHold = new Label();
SystemOvershoot = new NumericUpDown();
UseOvershoot = new CheckBox();
BaseDelay = new NumericUpDown();
tabWebhook = new TabPage();
EmojiConfig = new Button();
labelWebhooks = new Label();
label21 = new Label();
DiscordMessageContent = new TextBox();
label14 = new Label();
btnTestWebHook = new Button();
denToggle = new CheckBox();
LocationSettings_label = new Label();
IVstyle = new ComboBox();
IVverbose = new CheckBox();
label19 = new Label();
label18 = new Label();
EnableEmoji = new CheckBox();
tabExperimental = new TabPage();
InstanceName = new TextBox();
label17 = new Label();
tabAbout = new TabPage();
linkLabel1 = new LinkLabel();
labelAppName = new Label();
picAppIcon = new PictureBox();
labelAppVersion = new Label();
BlueberryScanCheck = new CheckBox();
((System.ComponentModel.ISupportInitialize)SystemDDownPresses).BeginInit();
((System.ComponentModel.ISupportInitialize)NavigateToSettings).BeginInit();
((System.ComponentModel.ISupportInitialize)OpenSettings).BeginInit();
((System.ComponentModel.ISupportInitialize)OpenHome).BeginInit();
((System.ComponentModel.ISupportInitialize)Hold).BeginInit();
((System.ComponentModel.ISupportInitialize)Submenu).BeginInit();
((System.ComponentModel.ISupportInitialize)DateChange).BeginInit();
((System.ComponentModel.ISupportInitialize)ReturnHome).BeginInit();
((System.ComponentModel.ISupportInitialize)ReturnGame).BeginInit();
((System.ComponentModel.ISupportInitialize)DaysToSkip).BeginInit();
tabControl1.SuspendLayout();
tabGeneral.SuspendLayout();
LocationGroup.SuspendLayout();
tabMatch.SuspendLayout();
tabAdvanceDate.SuspendLayout();
((System.ComponentModel.ISupportInitialize)ExtraOverworldWait).BeginInit();
((System.ComponentModel.ISupportInitialize)RelaunchDelay).BeginInit();
((System.ComponentModel.ISupportInitialize)SystemReset).BeginInit();
((System.ComponentModel.ISupportInitialize)SaveGameDelay).BeginInit();
((System.ComponentModel.ISupportInitialize)SystemOvershoot).BeginInit();
((System.ComponentModel.ISupportInitialize)BaseDelay).BeginInit();
tabWebhook.SuspendLayout();
tabExperimental.SuspendLayout();
tabAbout.SuspendLayout();
((System.ComponentModel.ISupportInitialize)picAppIcon).BeginInit();
SuspendLayout();
//
// FocusWindow
//
FocusWindow.AutoSize = true;
FocusWindow.Location = new Point(8, 44);
FocusWindow.Name = "FocusWindow";
FocusWindow.Size = new Size(123, 19);
FocusWindow.TabIndex = 1;
FocusWindow.Text = "Focus RaidCrawler";
FocusWindow.UseVisualStyleBackColor = true;
//
// EnableAlert
//
EnableAlert.AutoSize = true;
EnableAlert.Location = new Point(8, 65);
EnableAlert.Name = "EnableAlert";
EnableAlert.Size = new Size(293, 19);
EnableAlert.TabIndex = 2;
EnableAlert.Text = "Show an alert window with the following message:";
EnableAlert.UseVisualStyleBackColor = true;
EnableAlert.CheckedChanged += EnableAlert_CheckedChanged;
//
// PlayTone
//
PlayTone.AutoSize = true;
PlayTone.Location = new Point(8, 23);
PlayTone.Name = "PlayTone";
PlayTone.Size = new Size(84, 19);
PlayTone.TabIndex = 0;
PlayTone.Text = "Play a tone";
PlayTone.UseVisualStyleBackColor = true;
//
// LabelMatchFound
//
LabelMatchFound.AutoSize = true;
LabelMatchFound.Font = new Font("Segoe UI", 9F, FontStyle.Bold);
LabelMatchFound.Location = new Point(6, 3);
LabelMatchFound.Name = "LabelMatchFound";
LabelMatchFound.Size = new Size(137, 15);
LabelMatchFound.TabIndex = 3;
LabelMatchFound.Text = "When a match is found:";
//
// AlertMessage
//
AlertMessage.Location = new Point(8, 84);
AlertMessage.Name = "AlertMessage";
AlertMessage.Size = new Size(357, 23);
AlertMessage.TabIndex = 4;
//
// L_AdvanceDate
//
L_AdvanceDate.AutoSize = true;
L_AdvanceDate.Font = new Font("Segoe UI", 9F, FontStyle.Bold);
L_AdvanceDate.Location = new Point(6, 3);
L_AdvanceDate.Name = "L_AdvanceDate";
L_AdvanceDate.Size = new Size(233, 15);
L_AdvanceDate.TabIndex = 6;
L_AdvanceDate.Text = "Advance Date Options (all timings in ms):";
//
// L_BaseDelay
//
L_BaseDelay.AutoSize = true;
L_BaseDelay.Location = new Point(8, 178);
L_BaseDelay.Name = "L_BaseDelay";
L_BaseDelay.Size = new Size(196, 15);
L_BaseDelay.TabIndex = 8;
L_BaseDelay.Text = "Base delay to be added to all inputs:";
//
// SystemDDownPresses
//
SystemDDownPresses.Location = new Point(296, 321);
SystemDDownPresses.Maximum = new decimal(new int[] { 99, 0, 0, 0 });
SystemDDownPresses.Name = "SystemDDownPresses";
SystemDDownPresses.Size = new Size(68, 23);
SystemDDownPresses.TabIndex = 10;
SystemDDownPresses.Value = new decimal(new int[] { 38, 0, 0, 0 });
//
// L_DdownInput
//
L_DdownInput.AutoSize = true;
L_DdownInput.Location = new Point(8, 323);
L_DdownInput.Name = "L_DdownInput";
L_DdownInput.Size = new Size(228, 15);
L_DdownInput.TabIndex = 11;
L_DdownInput.Text = "DDOWN inputs to get to \"Date and Time\":";
//
// NavigateToSettings
//
NavigateToSettings.Location = new Point(296, 234);
NavigateToSettings.Maximum = new decimal(new int[] { 9999, 0, 0, 0 });
NavigateToSettings.Name = "NavigateToSettings";
NavigateToSettings.Size = new Size(68, 23);
NavigateToSettings.TabIndex = 16;
NavigateToSettings.Value = new decimal(new int[] { 100, 0, 0, 0 });
//
// OpenSettings
//
OpenSettings.Location = new Point(296, 263);
OpenSettings.Maximum = new decimal(new int[] { 9999, 0, 0, 0 });
OpenSettings.Name = "OpenSettings";
OpenSettings.Size = new Size(68, 23);
OpenSettings.TabIndex = 17;
OpenSettings.Value = new decimal(new int[] { 1000, 0, 0, 0 });
//
// OpenHome
//
OpenHome.Location = new Point(296, 205);
OpenHome.Maximum = new decimal(new int[] { 9999, 0, 0, 0 });
OpenHome.Name = "OpenHome";
OpenHome.Size = new Size(68, 23);
OpenHome.TabIndex = 18;
OpenHome.Value = new decimal(new int[] { 1800, 0, 0, 0 });
//
// L_OpenHOME
//
L_OpenHOME.AutoSize = true;
L_OpenHOME.Location = new Point(8, 207);
L_OpenHOME.Name = "L_OpenHOME";
L_OpenHOME.Size = new Size(140, 15);
L_OpenHOME.TabIndex = 19;
L_OpenHOME.Text = "Open Home Menu delay:";
//
// L_NavigateSettings
//
L_NavigateSettings.AutoSize = true;
L_NavigateSettings.Location = new Point(8, 236);
L_NavigateSettings.Name = "L_NavigateSettings";
L_NavigateSettings.Size = new Size(146, 15);
L_NavigateSettings.TabIndex = 20;
L_NavigateSettings.Text = "Navigate to settings delay:";
//
// L_OpenSettingsDelay
//
L_OpenSettingsDelay.AutoSize = true;
L_OpenSettingsDelay.Location = new Point(8, 265);
L_OpenSettingsDelay.Name = "L_OpenSettingsDelay";
L_OpenSettingsDelay.Size = new Size(114, 15);
L_OpenSettingsDelay.TabIndex = 21;
L_OpenSettingsDelay.Text = "Open settings delay:";
//
// L_ScrollSystem
//
L_ScrollSystem.AutoSize = true;
L_ScrollSystem.Location = new Point(8, 294);
L_ScrollSystem.Name = "L_ScrollSystem";
L_ScrollSystem.Size = new Size(187, 15);
L_ScrollSystem.TabIndex = 23;
L_ScrollSystem.Text = "Time to hold to scroll to \"System\":";
//
// Hold
//
Hold.Location = new Point(296, 292);
Hold.Maximum = new decimal(new int[] { 9999, 0, 0, 0 });
Hold.Name = "Hold";
Hold.Size = new Size(68, 23);
Hold.TabIndex = 22;
Hold.Value = new decimal(new int[] { 1700, 0, 0, 0 });
//
// L_SubmenuDelay
//
L_SubmenuDelay.AutoSize = true;
L_SubmenuDelay.Location = new Point(8, 352);
L_SubmenuDelay.Name = "L_SubmenuDelay";
L_SubmenuDelay.Size = new Size(123, 15);
L_SubmenuDelay.TabIndex = 25;
L_SubmenuDelay.Text = "Open submenu delay:";
//
// Submenu
//
Submenu.Location = new Point(296, 350);
Submenu.Maximum = new decimal(new int[] { 9999, 0, 0, 0 });
Submenu.Name = "Submenu";
Submenu.Size = new Size(68, 23);
Submenu.TabIndex = 24;
Submenu.Value = new decimal(new int[] { 800, 0, 0, 0 });
//
// L_DateChangeDelay
//
L_DateChangeDelay.AutoSize = true;
L_DateChangeDelay.Location = new Point(8, 381);
L_DateChangeDelay.Name = "L_DateChangeDelay";
L_DateChangeDelay.Size = new Size(138, 15);
L_DateChangeDelay.TabIndex = 27;
L_DateChangeDelay.Text = "Open date change delay:";
//
// DateChange
//
DateChange.Location = new Point(296, 379);
DateChange.Maximum = new decimal(new int[] { 9999, 0, 0, 0 });
DateChange.Name = "DateChange";
DateChange.Size = new Size(68, 23);
DateChange.TabIndex = 26;
DateChange.Value = new decimal(new int[] { 500, 0, 0, 0 });
//
// L_ReturnHomeDelay
//
L_ReturnHomeDelay.AutoSize = true;
L_ReturnHomeDelay.Location = new Point(8, 439);
L_ReturnHomeDelay.Name = "L_ReturnHomeDelay";
L_ReturnHomeDelay.Size = new Size(160, 15);
L_ReturnHomeDelay.TabIndex = 29;
L_ReturnHomeDelay.Text = "Return to Home Menu delay:";
//
// ReturnHome
//
ReturnHome.Location = new Point(296, 437);
ReturnHome.Maximum = new decimal(new int[] { 9999, 0, 0, 0 });
ReturnHome.Name = "ReturnHome";
ReturnHome.Size = new Size(68, 23);
ReturnHome.TabIndex = 28;
ReturnHome.Value = new decimal(new int[] { 2500, 0, 0, 0 });
//
// L_ReOpenGameDelay
//
L_ReOpenGameDelay.AutoSize = true;
L_ReOpenGameDelay.Location = new Point(8, 468);
L_ReOpenGameDelay.Name = "L_ReOpenGameDelay";
L_ReOpenGameDelay.Size = new Size(119, 15);
L_ReOpenGameDelay.TabIndex = 31;
L_ReOpenGameDelay.Text = "Re-open game delay:";
//
// ReturnGame
//
ReturnGame.Location = new Point(296, 466);
ReturnGame.Maximum = new decimal(new int[] { 9999, 0, 0, 0 });
ReturnGame.Name = "ReturnGame";
ReturnGame.Size = new Size(68, 23);
ReturnGame.TabIndex = 30;
ReturnGame.Value = new decimal(new int[] { 4000, 0, 0, 0 });
//
// L_DaysToSkip
//
L_DaysToSkip.AutoSize = true;
L_DaysToSkip.Location = new Point(8, 410);
L_DaysToSkip.Name = "L_DaysToSkip";
L_DaysToSkip.Size = new Size(179, 15);
L_DaysToSkip.TabIndex = 33;
L_DaysToSkip.Text = "Number of days/months to skip:";
//
// DaysToSkip
//
DaysToSkip.Location = new Point(296, 408);
DaysToSkip.Maximum = new decimal(new int[] { 99, 0, 0, 0 });
DaysToSkip.Name = "DaysToSkip";
DaysToSkip.Size = new Size(68, 23);
DaysToSkip.TabIndex = 32;
//
// UseTouch
//
UseTouch.AutoSize = true;
UseTouch.Location = new Point(8, 61);
UseTouch.Name = "UseTouch";
UseTouch.Size = new Size(267, 19);
UseTouch.TabIndex = 36;
UseTouch.Text = "Use touch screen inputs (faster, experimental)";
UseTouch.UseVisualStyleBackColor = true;
//
// DiscordWebhook
//
DiscordWebhook.Location = new Point(8, 138);
DiscordWebhook.Name = "DiscordWebhook";
DiscordWebhook.Size = new Size(357, 23);
DiscordWebhook.TabIndex = 37;
//
// EnableDiscordNotifications
//
EnableDiscordNotifications.AutoSize = true;
EnableDiscordNotifications.Location = new Point(8, 118);
EnableDiscordNotifications.Name = "EnableDiscordNotifications";
EnableDiscordNotifications.Size = new Size(303, 19);
EnableDiscordNotifications.TabIndex = 38;
EnableDiscordNotifications.Text = "Send alerts to Discord webhooks (comma separated)";
EnableDiscordNotifications.UseVisualStyleBackColor = true;
EnableDiscordNotifications.Click += EnableDiscordNotifications_Click;
//
// label13
//
label13.AutoSize = true;
label13.Font = new Font("Segoe UI", 9F, FontStyle.Bold);
label13.Location = new Point(6, 3);
label13.Name = "label13";
label13.Size = new Size(84, 15);
label13.TabIndex = 39;
label13.Text = "Experimental:";
//
// ExperimentalView
//
ExperimentalView.AutoSize = true;
ExperimentalView.Location = new Point(8, 23);
ExperimentalView.Name = "ExperimentalView";
ExperimentalView.Size = new Size(189, 19);
ExperimentalView.TabIndex = 40;
ExperimentalView.Text = "Toggle Streamer Tera Raid View";
ExperimentalView.UseVisualStyleBackColor = true;
ExperimentalView.Click += StreamerView_Clicked;
//
// tabControl1
//
tabControl1.Controls.Add(tabGeneral);
tabControl1.Controls.Add(tabMatch);
tabControl1.Controls.Add(tabAdvanceDate);
tabControl1.Controls.Add(tabWebhook);
tabControl1.Controls.Add(tabExperimental);
tabControl1.Controls.Add(tabAbout);
tabControl1.Dock = DockStyle.Fill;
tabControl1.Location = new Point(0, 0);
tabControl1.Name = "tabControl1";
tabControl1.SelectedIndex = 0;
tabControl1.Size = new Size(380, 668);
tabControl1.TabIndex = 41;
//
// tabGeneral
//
tabGeneral.Controls.Add(LocationGroup);
tabGeneral.Controls.Add(Protocol_dropdown);
tabGeneral.Controls.Add(Protocol_label);
tabGeneral.Controls.Add(label23);
tabGeneral.Controls.Add(LabelEventProgress);
tabGeneral.Controls.Add(EventProgress);
tabGeneral.Controls.Add(LabelGame);
tabGeneral.Controls.Add(Game);
tabGeneral.Controls.Add(LabelStoryProgress);
tabGeneral.Controls.Add(StoryProgress);
tabGeneral.Location = new Point(4, 24);
tabGeneral.Name = "tabGeneral";
tabGeneral.Padding = new Padding(3);
tabGeneral.Size = new Size(372, 640);
tabGeneral.TabIndex = 5;
tabGeneral.Text = "General";
tabGeneral.UseVisualStyleBackColor = true;
//
// LocationGroup
//
LocationGroup.Controls.Add(BlueberryScanCheck);
LocationGroup.Controls.Add(KitakamiScanCheck);
LocationGroup.Controls.Add(PaldeaScanCheck);
LocationGroup.Location = new Point(8, 137);
LocationGroup.Name = "LocationGroup";
LocationGroup.Size = new Size(200, 93);
LocationGroup.TabIndex = 115;
LocationGroup.TabStop = false;
LocationGroup.Text = "Scan Locations";
//
// KitakamiScanCheck
//
KitakamiScanCheck.AutoSize = true;
KitakamiScanCheck.Checked = true;
KitakamiScanCheck.CheckState = CheckState.Checked;
KitakamiScanCheck.Location = new Point(6, 47);
KitakamiScanCheck.Name = "KitakamiScanCheck";
KitakamiScanCheck.Size = new Size(72, 19);
KitakamiScanCheck.TabIndex = 113;
KitakamiScanCheck.Text = "Kitakami";
KitakamiScanCheck.UseVisualStyleBackColor = true;
//
// PaldeaScanCheck
//
PaldeaScanCheck.AutoSize = true;
PaldeaScanCheck.Checked = true;
PaldeaScanCheck.CheckState = CheckState.Checked;
PaldeaScanCheck.Location = new Point(6, 22);
PaldeaScanCheck.Name = "PaldeaScanCheck";
PaldeaScanCheck.Size = new Size(61, 19);
PaldeaScanCheck.TabIndex = 112;
PaldeaScanCheck.Text = "Paldea";
PaldeaScanCheck.UseVisualStyleBackColor = true;
//
// Protocol_dropdown
//
Protocol_dropdown.FormattingEnabled = true;
Protocol_dropdown.Items.AddRange(new object[] { SwitchProtocol.WiFi, SwitchProtocol.USB });
Protocol_dropdown.Location = new Point(159, 108);
Protocol_dropdown.MaxDropDownItems = 2;
Protocol_dropdown.Name = "Protocol_dropdown";
Protocol_dropdown.Size = new Size(48, 23);
Protocol_dropdown.TabIndex = 111;
Protocol_dropdown.Text = "w";
Protocol_dropdown.SelectedValueChanged += Protocol_Changed;
//
// Protocol_label
//
Protocol_label.AutoSize = true;
Protocol_label.Location = new Point(7, 111);
Protocol_label.Name = "Protocol_label";
Protocol_label.Size = new Size(120, 15);
Protocol_label.TabIndex = 110;
Protocol_label.Text = "Connection Protocol:";
//
// label23
//
label23.AutoSize = true;
label23.Font = new Font("Segoe UI", 9F, FontStyle.Bold);
label23.Location = new Point(6, 3);
label23.Name = "label23";
label23.Size = new Size(118, 15);
label23.TabIndex = 109;
label23.Text = "Application Settings";
//
// LabelEventProgress
//
LabelEventProgress.AutoSize = true;
LabelEventProgress.Location = new Point(7, 83);
LabelEventProgress.Name = "LabelEventProgress";
LabelEventProgress.Size = new Size(117, 15);
LabelEventProgress.TabIndex = 108;
LabelEventProgress.Text = "Event Progress Level:";
//
// EventProgress
//
EventProgress.FormattingEnabled = true;
EventProgress.Items.AddRange(new object[] { "1", "2", "3", "4" });
EventProgress.Location = new Point(159, 80);
EventProgress.Name = "EventProgress";
EventProgress.Size = new Size(48, 23);
EventProgress.TabIndex = 107;
EventProgress.Text = "w";
//
// LabelGame
//
LabelGame.AutoSize = true;
LabelGame.Location = new Point(8, 28);
LabelGame.Name = "LabelGame";
LabelGame.Size = new Size(41, 15);
LabelGame.TabIndex = 106;
LabelGame.Text = "Game:";
//
// Game
//
Game.FormattingEnabled = true;
Game.Items.AddRange(new object[] { "Scarlet", "Violet" });
Game.Location = new Point(111, 25);
Game.Name = "Game";
Game.Size = new Size(96, 23);
Game.TabIndex = 105;
Game.Text = "w";
Game.SelectedIndexChanged += Game_SelectedIndexChanged;
//
// LabelStoryProgress
//
LabelStoryProgress.AutoSize = true;
LabelStoryProgress.Location = new Point(8, 55);
LabelStoryProgress.Name = "LabelStoryProgress";
LabelStoryProgress.Size = new Size(115, 15);
LabelStoryProgress.TabIndex = 104;
LabelStoryProgress.Text = "Story Progress Level:";
//
// StoryProgress
//
StoryProgress.FormattingEnabled = true;
StoryProgress.Items.AddRange(new object[] { "1", "2", "3", "4", "5" });
StoryProgress.Location = new Point(159, 52);
StoryProgress.Name = "StoryProgress";
StoryProgress.Size = new Size(48, 23);
StoryProgress.TabIndex = 103;
StoryProgress.Text = "w";
//
// tabMatch
//
tabMatch.Controls.Add(LabelMatchFound);
tabMatch.Controls.Add(FocusWindow);
tabMatch.Controls.Add(EnableAlert);
tabMatch.Controls.Add(EnableDiscordNotifications);
tabMatch.Controls.Add(PlayTone);
tabMatch.Controls.Add(DiscordWebhook);
tabMatch.Controls.Add(AlertMessage);
tabMatch.Location = new Point(4, 24);
tabMatch.Name = "tabMatch";
tabMatch.Padding = new Padding(3);
tabMatch.Size = new Size(372, 640);
tabMatch.TabIndex = 0;
tabMatch.Text = "Match";
tabMatch.UseVisualStyleBackColor = true;
//
// tabAdvanceDate
//
tabAdvanceDate.Controls.Add(ZyroMethod);
tabAdvanceDate.Controls.Add(UseMapTrick);
tabAdvanceDate.Controls.Add(ExtraOverworldWait);
tabAdvanceDate.Controls.Add(L_ExtraOverworldWait);
tabAdvanceDate.Controls.Add(RelaunchDelay);
tabAdvanceDate.Controls.Add(L_RelaunchDelay);
tabAdvanceDate.Controls.Add(SystemReset);
tabAdvanceDate.Controls.Add(L_SystemReset);
tabAdvanceDate.Controls.Add(UseSetStick);
tabAdvanceDate.Controls.Add(DodgeSystemUpdate);
tabAdvanceDate.Controls.Add(SaveGameDelay);
tabAdvanceDate.Controls.Add(L_SaveGame);
tabAdvanceDate.Controls.Add(SaveGame);
tabAdvanceDate.Controls.Add(L_OvershootHold);
tabAdvanceDate.Controls.Add(SystemOvershoot);
tabAdvanceDate.Controls.Add(UseOvershoot);
tabAdvanceDate.Controls.Add(L_AdvanceDate);
tabAdvanceDate.Controls.Add(L_BaseDelay);
tabAdvanceDate.Controls.Add(UseTouch);
tabAdvanceDate.Controls.Add(SystemDDownPresses);
tabAdvanceDate.Controls.Add(L_DdownInput);
tabAdvanceDate.Controls.Add(L_DaysToSkip);
tabAdvanceDate.Controls.Add(NavigateToSettings);
tabAdvanceDate.Controls.Add(DaysToSkip);
tabAdvanceDate.Controls.Add(OpenSettings);
tabAdvanceDate.Controls.Add(L_ReOpenGameDelay);
tabAdvanceDate.Controls.Add(OpenHome);
tabAdvanceDate.Controls.Add(ReturnGame);
tabAdvanceDate.Controls.Add(L_OpenHOME);
tabAdvanceDate.Controls.Add(L_ReturnHomeDelay);
tabAdvanceDate.Controls.Add(L_NavigateSettings);
tabAdvanceDate.Controls.Add(ReturnHome);
tabAdvanceDate.Controls.Add(L_OpenSettingsDelay);
tabAdvanceDate.Controls.Add(L_DateChangeDelay);
tabAdvanceDate.Controls.Add(Hold);
tabAdvanceDate.Controls.Add(DateChange);
tabAdvanceDate.Controls.Add(L_ScrollSystem);
tabAdvanceDate.Controls.Add(L_SubmenuDelay);
tabAdvanceDate.Controls.Add(Submenu);
tabAdvanceDate.Controls.Add(BaseDelay);
tabAdvanceDate.Location = new Point(4, 24);
tabAdvanceDate.Name = "tabAdvanceDate";
tabAdvanceDate.Padding = new Padding(3);
tabAdvanceDate.Size = new Size(372, 640);
tabAdvanceDate.TabIndex = 1;
tabAdvanceDate.Text = "Advance Date";
tabAdvanceDate.UseVisualStyleBackColor = true;
//
// ZyroMethod
//
ZyroMethod.AutoSize = true;
ZyroMethod.Location = new Point(8, 21);
ZyroMethod.Name = "ZyroMethod";
ZyroMethod.Size = new Size(332, 19);
ZyroMethod.TabIndex = 53;
ZyroMethod.Text = "Use Zyro's usb-botbase fork methods (approx. 4-5x faster)";
ZyroMethod.UseVisualStyleBackColor = true;
//
// UseMapTrick
//
UseMapTrick.AutoSize = true;
UseMapTrick.Location = new Point(8, 41);
UseMapTrick.Name = "UseMapTrick";
UseMapTrick.Size = new Size(164, 19);
UseMapTrick.TabIndex = 52;
UseMapTrick.Text = "Use Map Trick to avoid lag";
UseMapTrick.UseVisualStyleBackColor = true;
//
// ExtraOverworldWait
//
ExtraOverworldWait.Location = new Point(296, 555);
ExtraOverworldWait.Maximum = new decimal(new int[] { 1000000, 0, 0, 0 });
ExtraOverworldWait.Name = "ExtraOverworldWait";
ExtraOverworldWait.Size = new Size(68, 23);
ExtraOverworldWait.TabIndex = 51;
//
// L_ExtraOverworldWait
//
L_ExtraOverworldWait.AutoSize = true;
L_ExtraOverworldWait.Location = new Point(8, 557);
L_ExtraOverworldWait.Name = "L_ExtraOverworldWait";
L_ExtraOverworldWait.Size = new Size(218, 15);
L_ExtraOverworldWait.TabIndex = 50;
L_ExtraOverworldWait.Text = "Extra time to wait for Overworld to load:";
L_ExtraOverworldWait.UseMnemonic = false;
//
// RelaunchDelay
//
RelaunchDelay.Location = new Point(296, 525);
RelaunchDelay.Maximum = new decimal(new int[] { 20000, 0, 0, 0 });
RelaunchDelay.Name = "RelaunchDelay";
RelaunchDelay.Size = new Size(68, 23);
RelaunchDelay.TabIndex = 49;
//
// L_RelaunchDelay
//
L_RelaunchDelay.AutoSize = true;
L_RelaunchDelay.Location = new Point(8, 527);
L_RelaunchDelay.Name = "L_RelaunchDelay";
L_RelaunchDelay.Size = new Size(198, 15);
L_RelaunchDelay.TabIndex = 48;
L_RelaunchDelay.Text = "Extra time to wait to relaunch game:";
//
// SystemReset
//
SystemReset.Location = new Point(296, 495);
SystemReset.Maximum = new decimal(new int[] { 2000, 0, 0, 0 });
SystemReset.Minimum = new decimal(new int[] { 1, 0, 0, 0 });
SystemReset.Name = "SystemReset";
SystemReset.Size = new Size(68, 23);
SystemReset.TabIndex = 47;
SystemReset.Value = new decimal(new int[] { 30, 0, 0, 0 });
//
// L_SystemReset
//
L_SystemReset.AutoSize = true;
L_SystemReset.Location = new Point(8, 497);
L_SystemReset.Name = "L_SystemReset";
L_SystemReset.Size = new Size(203, 15);
L_SystemReset.TabIndex = 46;
L_SystemReset.Text = "Relaunch game after this many skips:";
//
// UseSetStick
//
UseSetStick.AutoSize = true;
UseSetStick.Location = new Point(8, 145);
UseSetStick.Name = "UseSetStick";
UseSetStick.Size = new Size(222, 19);
UseSetStick.TabIndex = 45;
UseSetStick.Text = "Use SetStick instead of PressAndHold";
UseSetStick.UseVisualStyleBackColor = true;
UseSetStick.CheckedChanged += UseSetStick_CheckedChanged;
//
// DodgeSystemUpdate
//
DodgeSystemUpdate.AutoSize = true;
DodgeSystemUpdate.Location = new Point(8, 124);
DodgeSystemUpdate.Name = "DodgeSystemUpdate";
DodgeSystemUpdate.Size = new Size(184, 19);
DodgeSystemUpdate.TabIndex = 44;
DodgeSystemUpdate.Text = "Dodge system update prompt";
DodgeSystemUpdate.UseVisualStyleBackColor = true;
//
// SaveGameDelay
//
SaveGameDelay.Location = new Point(296, 614);
SaveGameDelay.Name = "SaveGameDelay";
SaveGameDelay.Size = new Size(68, 23);
SaveGameDelay.TabIndex = 43;
//
// L_SaveGame
//
L_SaveGame.AutoSize = true;
L_SaveGame.Location = new Point(8, 616);
L_SaveGame.Name = "L_SaveGame";
L_SaveGame.Size = new Size(186, 15);
L_SaveGame.TabIndex = 42;
L_SaveGame.Text = "Time to wait for the game to save:";
//
// SaveGame
//
SaveGame.AutoSize = true;
SaveGame.Location = new Point(8, 103);
SaveGame.Name = "SaveGame";
SaveGame.Size = new Size(164, 19);
SaveGame.TabIndex = 41;
SaveGame.Text = "Save game on filter match";
SaveGame.UseVisualStyleBackColor = true;
SaveGame.CheckedChanged += SaveGame_CheckedChanged;
//
// L_OvershootHold
//
L_OvershootHold.AutoSize = true;
L_OvershootHold.Location = new Point(8, 587);
L_OvershootHold.Name = "L_OvershootHold";
L_OvershootHold.Size = new Size(236, 15);
L_OvershootHold.TabIndex = 40;
L_OvershootHold.Text = "Time to hold to overshoot \"Date and Time\":";
//
// SystemOvershoot
//
SystemOvershoot.Location = new Point(296, 585);
SystemOvershoot.Maximum = new decimal(new int[] { 1200, 0, 0, 0 });
SystemOvershoot.Name = "SystemOvershoot";
SystemOvershoot.Size = new Size(68, 23);
SystemOvershoot.TabIndex = 39;
SystemOvershoot.Value = new decimal(new int[] { 950, 0, 0, 0 });
//
// UseOvershoot
//
UseOvershoot.AutoSize = true;
UseOvershoot.Location = new Point(8, 82);
UseOvershoot.Name = "UseOvershoot";
UseOvershoot.Size = new Size(355, 19);
UseOvershoot.TabIndex = 38;
UseOvershoot.Text = "Use overshoot instead of DDOWN inputs (faster, experimental)";
UseOvershoot.UseVisualStyleBackColor = true;
UseOvershoot.CheckedChanged += UseOvershoot_CheckedChanged;
//
// BaseDelay
//
BaseDelay.Location = new Point(296, 176);
BaseDelay.Maximum = new decimal(new int[] { 9999, 0, 0, 0 });
BaseDelay.Name = "BaseDelay";
BaseDelay.Size = new Size(68, 23);
BaseDelay.TabIndex = 9;
//
// tabWebhook
//
tabWebhook.Controls.Add(EmojiConfig);
tabWebhook.Controls.Add(labelWebhooks);
tabWebhook.Controls.Add(label21);
tabWebhook.Controls.Add(DiscordMessageContent);
tabWebhook.Controls.Add(label14);
tabWebhook.Controls.Add(btnTestWebHook);
tabWebhook.Controls.Add(denToggle);
tabWebhook.Controls.Add(LocationSettings_label);
tabWebhook.Controls.Add(IVstyle);
tabWebhook.Controls.Add(IVverbose);
tabWebhook.Controls.Add(label19);
tabWebhook.Controls.Add(label18);
tabWebhook.Controls.Add(EnableEmoji);
tabWebhook.Location = new Point(4, 24);
tabWebhook.Name = "tabWebhook";
tabWebhook.Size = new Size(372, 640);
tabWebhook.TabIndex = 3;
tabWebhook.Text = "Webhook";
tabWebhook.UseVisualStyleBackColor = true;
//
// EmojiConfig
//
EmojiConfig.Location = new Point(7, 94);
EmojiConfig.Name = "EmojiConfig";
EmojiConfig.Size = new Size(100, 23);
EmojiConfig.TabIndex = 46;
EmojiConfig.Text = "Emoji Config";
EmojiConfig.UseVisualStyleBackColor = true;
EmojiConfig.Click += EmojiConfig_Click;
//
// labelWebhooks
//
labelWebhooks.AutoSize = true;
labelWebhooks.Location = new Point(10, 618);
labelWebhooks.Name = "labelWebhooks";
labelWebhooks.Size = new Size(85, 15);
labelWebhooks.TabIndex = 44;
labelWebhooks.Text = "Webhooks are ";
//
// label21
//
label21.AutoSize = true;
label21.Font = new Font("Segoe UI", 9F, FontStyle.Bold);
label21.Location = new Point(8, 3);
label21.Name = "label21";
label21.Size = new Size(100, 15);
label21.TabIndex = 43;
label21.Text = "General Settings";
//
// DiscordMessageContent
//
DiscordMessageContent.Location = new Point(7, 40);
DiscordMessageContent.Name = "DiscordMessageContent";
DiscordMessageContent.Size = new Size(357, 23);
DiscordMessageContent.TabIndex = 42;
//
// label14
//
label14.AutoSize = true;
label14.Location = new Point(7, 22);
label14.Name = "label14";
label14.Size = new Size(285, 15);
label14.TabIndex = 41;
label14.Text = "Message Content (ping with <@numerical_user_id>)";
//
// btnTestWebHook
//
btnTestWebHook.Location = new Point(260, 614);
btnTestWebHook.Name = "btnTestWebHook";
btnTestWebHook.Size = new Size(104, 23);
btnTestWebHook.TabIndex = 22;
btnTestWebHook.Text = "Test Webhook";
btnTestWebHook.UseVisualStyleBackColor = true;
btnTestWebHook.Click += BtnTestWebHook_Click;
//
// denToggle
//
denToggle.AutoSize = true;
denToggle.Checked = true;
denToggle.CheckState = CheckState.Checked;
denToggle.Location = new Point(8, 249);
denToggle.Name = "denToggle";
denToggle.Size = new Size(79, 19);
denToggle.TabIndex = 21;
denToggle.Text = "Show Den";
denToggle.UseVisualStyleBackColor = true;
//
// LocationSettings_label
//
LocationSettings_label.AutoSize = true;
LocationSettings_label.Font = new Font("Segoe UI", 9F, FontStyle.Bold);
LocationSettings_label.Location = new Point(7, 231);
LocationSettings_label.Name = "LocationSettings_label";
LocationSettings_label.Size = new Size(103, 15);
LocationSettings_label.TabIndex = 20;
LocationSettings_label.Text = "Location Settings";
//
// IVstyle
//
IVstyle.FormattingEnabled = true;
IVstyle.Items.AddRange(new object[] { "Emoji", "Highlighted Numerical", "Numerical" });
IVstyle.Location = new Point(8, 196);
IVstyle.Name = "IVstyle";
IVstyle.Size = new Size(121, 23);
IVstyle.TabIndex = 8;
//
// IVverbose
//
IVverbose.AutoSize = true;
IVverbose.Location = new Point(8, 147);
IVverbose.Name = "IVverbose";
IVverbose.Size = new Size(85, 19);
IVverbose.TabIndex = 5;
IVverbose.Text = "Verbose IVs";
IVverbose.UseVisualStyleBackColor = true;
//
// label19
//
label19.AutoSize = true;
label19.Font = new Font("Segoe UI", 9F, FontStyle.Bold);
label19.Location = new Point(7, 178);
label19.Name = "label19";
label19.Size = new Size(48, 15);
label19.TabIndex = 2;
label19.Text = "IV style";
//
// label18
//
label18.AutoSize = true;
label18.Font = new Font("Segoe UI", 9F, FontStyle.Bold);
label18.Location = new Point(7, 129);
label18.Name = "label18";
label18.Size = new Size(68, 15);
label18.TabIndex = 1;
label18.Text = "IV Settings";
//
// EnableEmoji
//
EnableEmoji.AutoSize = true;
EnableEmoji.Checked = true;
EnableEmoji.CheckState = CheckState.Checked;
EnableEmoji.Location = new Point(8, 69);
EnableEmoji.Name = "EnableEmoji";
EnableEmoji.Size = new Size(94, 19);
EnableEmoji.TabIndex = 0;
EnableEmoji.Text = "Enable Emoji";
EnableEmoji.UseVisualStyleBackColor = true;
//
// tabExperimental
//
tabExperimental.Controls.Add(InstanceName);
tabExperimental.Controls.Add(label17);
tabExperimental.Controls.Add(label13);
tabExperimental.Controls.Add(ExperimentalView);
tabExperimental.Location = new Point(4, 24);
tabExperimental.Name = "tabExperimental";
tabExperimental.Padding = new Padding(3);
tabExperimental.Size = new Size(372, 640);
tabExperimental.TabIndex = 2;
tabExperimental.Text = "Experimental";
tabExperimental.UseVisualStyleBackColor = true;
//
// InstanceName
//
InstanceName.Location = new Point(6, 63);
InstanceName.Name = "InstanceName";
InstanceName.Size = new Size(358, 23);
InstanceName.TabIndex = 42;
//
// label17
//
label17.AutoSize = true;
label17.Location = new Point(6, 45);
label17.Name = "label17";
label17.Size = new Size(89, 15);
label17.TabIndex = 41;
label17.Text = "Instance Name:";
//
// tabAbout
//
tabAbout.Controls.Add(linkLabel1);
tabAbout.Controls.Add(labelAppName);
tabAbout.Controls.Add(picAppIcon);
tabAbout.Controls.Add(labelAppVersion);
tabAbout.Location = new Point(4, 24);
tabAbout.Name = "tabAbout";
tabAbout.Padding = new Padding(3);
tabAbout.Size = new Size(372, 640);
tabAbout.TabIndex = 4;
tabAbout.Text = "About";
tabAbout.UseVisualStyleBackColor = true;
//
// linkLabel1
//
linkLabel1.AutoSize = true;
linkLabel1.Location = new Point(55, 273);
linkLabel1.Name = "linkLabel1";
linkLabel1.Size = new Size(253, 15);
linkLabel1.TabIndex = 4;
linkLabel1.TabStop = true;
linkLabel1.Text = "https://github.com/LegoFigure11/RaidCrawler";
linkLabel1.LinkClicked += LinkLabel1_LinkClicked;
//
// labelAppName
//
labelAppName.AutoSize = true;
labelAppName.Font = new Font("Segoe UI", 14F, FontStyle.Bold);
labelAppName.Location = new Point(135, 164);
labelAppName.Name = "labelAppName";
labelAppName.Size = new Size(119, 25);
labelAppName.TabIndex = 2;
labelAppName.Text = "RaidCrawler";
labelAppName.TextAlign = ContentAlignment.MiddleCenter;
//
// picAppIcon
//
picAppIcon.Image = (Image)resources.GetObject("picAppIcon.Image");
picAppIcon.Location = new Point(106, 159);
picAppIcon.Name = "picAppIcon";
picAppIcon.Size = new Size(32, 32);
picAppIcon.TabIndex = 1;
picAppIcon.TabStop = false;
//
// labelAppVersion
//
labelAppVersion.AutoSize = true;
labelAppVersion.Location = new Point(155, 206);
labelAppVersion.Name = "labelAppVersion";
labelAppVersion.Size = new Size(78, 15);
labelAppVersion.TabIndex = 0;
labelAppVersion.Text = "v0.0.0-000000";
labelAppVersion.TextAlign = ContentAlignment.MiddleCenter;
//
// BlueberryScanCheck
//
BlueberryScanCheck.AutoSize = true;
BlueberryScanCheck.Checked = true;
BlueberryScanCheck.CheckState = CheckState.Checked;
BlueberryScanCheck.Location = new Point(6, 72);
BlueberryScanCheck.Name = "BlueberryScanCheck";
BlueberryScanCheck.Size = new Size(76, 19);
BlueberryScanCheck.TabIndex = 114;
BlueberryScanCheck.Text = "Blueberry";
BlueberryScanCheck.UseVisualStyleBackColor = true;
//
// ConfigWindow
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(380, 668);
Controls.Add(tabControl1);
FormBorderStyle = FormBorderStyle.FixedDialog;
MaximizeBox = false;
Name = "ConfigWindow";
StartPosition = FormStartPosition.CenterParent;
Text = "RaidCrawler Settings";
FormClosing += Config_Closing;
((System.ComponentModel.ISupportInitialize)SystemDDownPresses).EndInit();
((System.ComponentModel.ISupportInitialize)NavigateToSettings).EndInit();
((System.ComponentModel.ISupportInitialize)OpenSettings).EndInit();
((System.ComponentModel.ISupportInitialize)OpenHome).EndInit();
((System.ComponentModel.ISupportInitialize)Hold).EndInit();
((System.ComponentModel.ISupportInitialize)Submenu).EndInit();
((System.ComponentModel.ISupportInitialize)DateChange).EndInit();
((System.ComponentModel.ISupportInitialize)ReturnHome).EndInit();
((System.ComponentModel.ISupportInitialize)ReturnGame).EndInit();
((System.ComponentModel.ISupportInitialize)DaysToSkip).EndInit();
tabControl1.ResumeLayout(false);
tabGeneral.ResumeLayout(false);
tabGeneral.PerformLayout();
LocationGroup.ResumeLayout(false);
LocationGroup.PerformLayout();
tabMatch.ResumeLayout(false);
tabMatch.PerformLayout();
tabAdvanceDate.ResumeLayout(false);
tabAdvanceDate.PerformLayout();
((System.ComponentModel.ISupportInitialize)ExtraOverworldWait).EndInit();
((System.ComponentModel.ISupportInitialize)RelaunchDelay).EndInit();
((System.ComponentModel.ISupportInitialize)SystemReset).EndInit();
((System.ComponentModel.ISupportInitialize)SaveGameDelay).EndInit();
((System.ComponentModel.ISupportInitialize)SystemOvershoot).EndInit();
((System.ComponentModel.ISupportInitialize)BaseDelay).EndInit();
tabWebhook.ResumeLayout(false);
tabWebhook.PerformLayout();
tabExperimental.ResumeLayout(false);
tabExperimental.PerformLayout();
tabAbout.ResumeLayout(false);
tabAbout.PerformLayout();
((System.ComponentModel.ISupportInitialize)picAppIcon).EndInit();
ResumeLayout(false);
}
#endregion
private CheckBox FocusWindow;
private CheckBox EnableAlert;
private CheckBox PlayTone;
private Label LabelMatchFound;
private TextBox AlertMessage;
private Label L_AdvanceDate;
private Label L_BaseDelay;
private NumericUpDown SystemDDownPresses;
private Label L_DdownInput;
private NumericUpDown NavigateToSettings;
private NumericUpDown OpenSettings;
private NumericUpDown OpenHome;
private Label L_OpenHOME;
private Label L_NavigateSettings;
private Label L_OpenSettingsDelay;
private Label L_ScrollSystem;
private NumericUpDown Hold;
private Label L_SubmenuDelay;
private NumericUpDown Submenu;
private Label L_DateChangeDelay;
private NumericUpDown DateChange;
private Label L_ReturnHomeDelay;
private NumericUpDown ReturnHome;
private Label L_ReOpenGameDelay;
private NumericUpDown ReturnGame;
private Label L_DaysToSkip;
private NumericUpDown DaysToSkip;
private CheckBox UseTouch;
private TextBox DiscordWebhook;
private CheckBox EnableDiscordNotifications;
private Label label13;
private CheckBox ExperimentalView;
private TabControl tabControl1;
private TabPage tabMatch;
private TabPage tabAdvanceDate;
private TabPage tabExperimental;
private Label L_OvershootHold;
private NumericUpDown SystemOvershoot;
private CheckBox UseOvershoot;
private TextBox InstanceName;
private Label label17;
private TabPage tabWebhook;
private CheckBox EnableEmoji;
private Label label19;
private Label label18;
private ComboBox IVstyle;
private CheckBox IVverbose;
private CheckBox denToggle;
private Label LocationSettings_label;
private Button btnTestWebHook;
private Label label21;
private TextBox DiscordMessageContent;
private Label label14;
private Label labelWebhooks;
private TabPage tabAbout;
private Label labelAppVersion;
private LinkLabel linkLabel1;
private Label labelAppName;
private PictureBox picAppIcon;
private TabPage tabGeneral;
private Label label23;
private Label LabelEventProgress;
private ComboBox EventProgress;
private Label LabelGame;
private ComboBox Game;
private Label LabelStoryProgress;
private ComboBox StoryProgress;
private Button EmojiConfig;
private ComboBox Protocol_dropdown;
private Label Protocol_label;
private NumericUpDown BaseDelay;
private NumericUpDown SaveGameDelay;
private Label L_SaveGame;
private CheckBox SaveGame;
private CheckBox DodgeSystemUpdate;
private CheckBox UseSetStick;
private CheckBox PaldeaScanCheck;
private GroupBox LocationGroup;
private CheckBox KitakamiScanCheck;
private NumericUpDown SystemReset;
private Label L_SystemReset;
private NumericUpDown RelaunchDelay;
private Label L_RelaunchDelay;
private NumericUpDown ExtraOverworldWait;
private Label L_ExtraOverworldWait;
private CheckBox UseMapTrick;
private CheckBox ZyroMethod;
private CheckBox BlueberryScanCheck;
}
}
================================================
FILE: RaidCrawler.WinForms/SubForms/ConfigWindow.cs
================================================
using System.Text.Json;
namespace RaidCrawler.WinForms.SubForms;
public partial class ConfigWindow : Form
{
private readonly ClientConfig c;
public ConfigWindow(ClientConfig c)
{
this.c = c;
var assembly = System.Reflection.Assembly.GetEntryAssembly();
var v = assembly?.GetName().Version!;
var gitVersionInformationType = assembly?.GetType("GitVersionInformation");
var shaField = gitVersionInformationType?.GetField("ShortSha");
InitializeComponent();
InstanceName.Text = c.InstanceName;
StoryProgress.SelectedIndex = c.Progress;
EventProgress.SelectedIndex = c.EventProgress;
Game.SelectedIndex = Game.FindString(c.Game);
Protocol_dropdown.SelectedIndex = (int)c.Protocol;
PlayTone.Checked = c.PlaySound;
FocusWindow.Checked = c.FocusWindow;
EnableAlert.Checked = c.EnableAlertWindow;
AlertMessage.Text = c.AlertWindowMessage;
AlertMessage.Enabled = EnableAlert.Checked;
EnableDiscordNotifications.Checked = c.EnableNotification;
DiscordWebhook.Text = c.DiscordWebhook;
DiscordWebhook.Enabled = EnableDiscordNotifications.Checked;
DiscordMessageContent.Text = c.DiscordMessageContent;
DiscordMessageContent.Enabled = EnableDiscordNotifications.Checked;
ZyroMethod.Checked = c.ZyroMethod;
UseTouch.Checked = c.UseTouch;
UseOvershoot.Checked = c.UseOvershoot;
SaveGame.Checked = c.SaveOnMatch;
DodgeSystemUpdate.Checked = c.DodgeSystemUpdate;
UseSetStick.Checked = c.UseSetStick;
UseMapTrick.Checked = c.UseMapTrick;
OpenHome.Value = c.OpenHomeDelay;
NavigateToSettings.Value = c.NavigateToSettingsDelay;
OpenSettings.Value = c.OpenSettingsDelay;
Hold.Value = c.HoldDuration;
SystemDDownPresses.Value = c.SystemDownPresses;
SystemOvershoot.Value = c.SystemOvershoot;
Submenu.Value = c.Submenu;
DateChange.Value = c.DateChange;
DaysToSkip.Value = c.DaysToSkip;
ReturnHome.Value = c.ReturnHomeDelay;
ReturnGame.Value = c.ReturnGameDelay;
BaseDelay.Value = c.BaseDelay;
SaveGameDelay.Value = c.SaveGameDelay;
SystemReset.Value = c.SystemReset;
RelaunchDelay.Value = c.RelaunchDelay;
ExtraOverworldWait.Value = c.ExtraOverworldWait;
PaldeaScanCheck.Checked = c.PaldeaScan;
KitakamiScanCheck.Checked = c.KitakamiScan;
BlueberryScanCheck.Checked = c.BlueberryScan;
SystemDDownPresses.Enabled = !UseOvershoot.Checked;
SystemOvershoot.Enabled = UseOvershoot.Checked;
SaveGameDelay.Enabled = SaveGame.Checked;
IVstyle.SelectedIndex = c.IVsStyle;
IVverbose.Checked = c.VerboseIVs;
denToggle.Checked = c.ToggleDen;
EnableEmoji.Checked = c.EnableEmoji;
ExperimentalView.Checked = c.StreamerView;
labelAppVersion.Text =
"v" + v.Major + "." + v.Minor + "." + v.Build + "-" + shaField?.GetValue(null);
labelAppVersion.Left = (tabAbout.Width - labelAppVersion.Width) / 2;
labelAppName.Left =
((tabAbout.Width - labelAppName.Width) / 2) + (picAppIcon.Width / 2) + 2;
picAppIcon.Left = labelAppName.Left - picAppIcon.Width - 2;
linkLabel1.Left = (tabAbout.Width - linkLabel1.Width) / 2;
labelWebhooks.Text =
"Webhooks are " + (DiscordWebhook.Enabled ? "enabled." : "disabled.");
}
private void EnableAlert_CheckedChanged(object sender, EventArgs e)
{
AlertMessage.Enabled = EnableAlert.Checked;
}
private void EnableDiscordNotifications_Click(object sender, EventArgs e)
{
DiscordWebhook.Enabled = EnableDiscordNotifications.Checked;
DiscordMessageContent.Enabled = EnableDiscordNotifications.Checked;
labelWebhooks.Text =
"Webhooks are " + (DiscordWebhook.Enabled ? "enabled." : "disabled.");
}
private void Config_Closing(object sender, EventArgs e)
{
c.InstanceName = InstanceName.Text;
c.PlaySound = PlayTone.Checked;
c.FocusWindow = FocusWindow.Checked;
c.EnableAlertWindow = EnableAlert.Checked;
c.AlertWindowMessage = AlertMessage.Text;
c.EnableNotification = EnableDiscordNotifications.Checked;
c.DiscordWebhook = DiscordWebhook.Text;
c.DiscordMessageContent = DiscordMessageContent.Text;
c.ZyroMethod = ZyroMethod.Checked;
c.UseTouch = UseTouch.Checked;
c.UseOvershoot = UseOvershoot.Checked;
c.SaveOnMatch = SaveGame.Checked;
c.DodgeSystemUpdate = DodgeSystemUpdate.Checked;
c.UseSetStick = UseSetStick.Checked;
c.UseMapTrick = UseMapTrick.Checked;
c.OpenHomeDelay = (int)OpenHome.Value;
c.NavigateToSettingsDelay = (int)NavigateToSettings.Value;
c.OpenSettingsDelay = (int)OpenSettings.Value;
c.HoldDuration = (int)Hold.Value;
c.SystemDownPresses = (int)SystemDDownPresses.Value;
c.SystemOvershoot = (int)SystemOvershoot.Value;
c.SystemReset = (int)SystemReset.Value;
c.Submenu = (int)Submenu.Value;
c.DateChange = (int)DateChange.Value;
c.DaysToSkip = (int)DaysToSkip.Value;
c.ReturnHomeDelay = (int)ReturnHome.Value;
c.ReturnGameDelay = (int)ReturnGame.Value;
c.BaseDelay = (int)BaseDelay.Value;
c.SaveGameDelay = (int)SaveGameDelay.Value;
c.RelaunchDelay = (int)RelaunchDelay.Value;
c.ExtraOverworldWait = (int)ExtraOverworldWait.Value;
c.PaldeaScan = PaldeaScanCheck.Checked;
c.KitakamiScan = KitakamiScanCheck.Checked;
c.BlueberryScan = BlueberryScanCheck.Checked;
c.IVsStyle = IVstyle.SelectedIndex;
c.VerboseIVs = IVverbose.Checked;
c.EnableEmoji = EnableEmoji.Checked;
c.ToggleDen = denToggle.Checked;
c.StreamerView = ExperimentalView.Checked;
c.Protocol = (SysBot.Base.SwitchProtocol)Protocol_dropdown.SelectedIndex;
string output = JsonSerializer.Serialize(c, Options);
using StreamWriter sw =
new(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "config.json"));
sw.Write(output);
}
private static readonly JsonSerializerOptions Options = new() { WriteIndented = true };
private void UseOvershoot_CheckedChanged(object sender, EventArgs e)
{
SystemDDownPresses.Enabled = !UseOvershoot.Checked;
SystemOvershoot.Enabled = UseOvershoot.Checked;
}
private void UseSetStick_CheckedChanged(object sender, EventArgs e)
{
UseSetStick.Enabled = !UseSetStick.Checked;
}
private void SaveGame_CheckedChanged(object sender, EventArgs e)
{
SaveGameDelay.Enabled = SaveGame.Checked;
}
private void BtnTestWebHook_Click(object sender, EventArgs e)
{
c.InstanceName = InstanceName.Text;
c.DiscordMessageContent = DiscordMessageContent.Text;
c.IVsStyle = IVstyle.SelectedIndex;
c.VerboseIVs = IVverbose.Checked;
c.EnableEmoji = EnableEmoji.Checked;
c.ToggleDen = denToggle.Checked;
var mainForm = Application.OpenForms.OfType().Single();
mainForm.TestWebhook();
}
private void LinkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
System.Diagnostics.Process.Start(
new System.Diagnostics.ProcessStartInfo(((LinkLabel)sender).Text)
{
UseShellExecute = true,
}
);
}
private void Game_SelectedIndexChanged(object sender, EventArgs e)
{
var game = (string)Game.SelectedItem!;
var mainForm = Application.OpenForms.OfType().Single();
mainForm.Game_SelectedIndexChanged(game);
}
private void EmojiConfig_Click(object sender, EventArgs e)
{
EmojiConfig config = new(c);
if (config.ShowDialog() == DialogResult.OK)
config.Show();
}
private void Protocol_Changed(object sender, EventArgs e)
{
c.Protocol = (SysBot.Base.SwitchProtocol)Protocol_dropdown.SelectedIndex;
var mainForm = Application.OpenForms.OfType().Single();
mainForm.Protocol_SelectedIndexChanged(c.Protocol);
}
private void StreamerView_Clicked(object sender, EventArgs e)
{
c.StreamerView = ExperimentalView.Checked;
var mainForm = Application.OpenForms.OfType().Single();
mainForm.ToggleStreamerView();
}
}
================================================
FILE: RaidCrawler.WinForms/SubForms/ConfigWindow.resx
================================================
text/microsoft-resx
2.0
System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
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
xE0QOO7fnUIZ1e1cKGIAAAAASUVORK5CYII=
================================================
FILE: RaidCrawler.WinForms/SubForms/EmojiConfig.Designer.cs
================================================
namespace RaidCrawler.WinForms.SubForms
{
partial class EmojiConfig
{
///
/// Required designer variable.
///
private System.ComponentModel.IContainer components = null;
///
/// Clean up any resources being used.
///
/// true if managed resources should be disposed; otherwise, false.
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
private void InitializeComponent()
{
this.EmojiGrid = new System.Windows.Forms.DataGridView();
((System.ComponentModel.ISupportInitialize)(this.EmojiGrid)).BeginInit();
this.SuspendLayout();
//
// EmojiGrid
//
this.EmojiGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells;
this.EmojiGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.EmojiGrid.Dock = System.Windows.Forms.DockStyle.Fill;
this.EmojiGrid.Location = new System.Drawing.Point(0, 0);
this.EmojiGrid.Name = "EmojiGrid";
this.EmojiGrid.RowTemplate.Height = 25;
this.EmojiGrid.Size = new System.Drawing.Size(374, 450);
this.EmojiGrid.TabIndex = 0;
this.EmojiGrid.CellEndEdit += new System.Windows.Forms.DataGridViewCellEventHandler(this.EmojiGrid_Changed);
//
// EmojiConfig
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(374, 450);
this.Controls.Add(this.EmojiGrid);
this.Name = "EmojiConfig";
this.ShowIcon = false;
this.Text = "EmojiConfig";
((System.ComponentModel.ISupportInitialize)(this.EmojiGrid)).EndInit();
this.ResumeLayout(false);
}
#endregion
private DataGridView EmojiGrid;
}
}
================================================
FILE: RaidCrawler.WinForms/SubForms/EmojiConfig.cs
================================================
using System.Data;
namespace RaidCrawler.WinForms.SubForms;
public partial class EmojiConfig : Form
{
private readonly ClientConfig c;
public EmojiConfig(ClientConfig c)
{
this.c = c;
InitializeComponent();
EmojiGrid.DataSource = EmojiLoad(c.Emoji);
}
private static DataTable EmojiLoad(Dictionary emoji)
{
DataTable dt = new();
dt.Columns.Add("Emoji", typeof(string));
dt.Columns.Add("Emoji Value", typeof(string));
emoji.ToList().ForEach(kvp => dt.Rows.Add(kvp.Key, kvp.Value));
dt.Columns[0].ReadOnly = true;
return dt;
}
private void EmojiGrid_Changed(object sender, EventArgs e)
{
var dict = new Dictionary();
var dt = (DataTable)EmojiGrid.DataSource!;
dt.AsEnumerable().ToList().ForEach(row => dict.Add((string)row[0], (string)row[1]));
c.Emoji = dict;
}
}
================================================
FILE: RaidCrawler.WinForms/SubForms/EmojiConfig.resx
================================================
text/microsoft-resx
2.0
System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
================================================
FILE: RaidCrawler.WinForms/SubForms/FilterSettings.Designer.cs
================================================
namespace RaidCrawler.WinForms.SubForms
{
partial class FilterSettings
{
///
/// Required designer variable.
///
private System.ComponentModel.IContainer components = null;
///
/// Clean up any resources being used.
///
/// true if managed resources should be disposed; otherwise, false.
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FilterSettings));
Species = new ComboBox();
SpeciesCheck = new CheckBox();
Form = new NumericUpDown();
FormCheck = new CheckBox();
NatureCheck = new CheckBox();
Nature = new ComboBox();
StarCheck = new CheckBox();
Stars = new ComboBox();
ShinyCheck = new CheckBox();
Add = new Button();
PerfectIVFilterGroup = new GroupBox();
SpeComp = new ComboBox();
SpaComp = new ComboBox();
SpdComp = new ComboBox();
DefComp = new ComboBox();
AtkComp = new ComboBox();
HPComp = new ComboBox();
IVSPE = new NumericUpDown();
IVSPD = new NumericUpDown();
IVSPA = new NumericUpDown();
IVDEF = new NumericUpDown();
IVATK = new NumericUpDown();
IVHP = new NumericUpDown();
Spe = new CheckBox();
SpD = new CheckBox();
SpA = new CheckBox();
Def = new CheckBox();
Atk = new CheckBox();
HP = new CheckBox();
TeraCheck = new CheckBox();
TeraType = new ComboBox();
ActiveFilters = new CheckedListBox();
FilterName = new TextBox();
label1 = new Label();
Remove = new Button();
StarsComp = new ComboBox();
RewardsComp = new ComboBox();
CheckRewards = new CheckBox();
Rewards = new TextBox();
label2 = new Label();
RewardsCount = new NumericUpDown();
ButtonOpenRewardsList = new Button();
GenderCheck = new CheckBox();
Gender = new ComboBox();
LabelBatchFilters = new Label();
BatchFilters = new TextBox();
SquareCheck = new CheckBox();
Tooltip = new ToolTip(components);
ECCheck = new CheckBox();
((System.ComponentModel.ISupportInitialize)Form).BeginInit();
PerfectIVFilterGroup.SuspendLayout();
((System.ComponentModel.ISupportInitialize)IVSPE).BeginInit();
((System.ComponentModel.ISupportInitialize)IVSPD).BeginInit();
((System.ComponentModel.ISupportInitialize)IVSPA).BeginInit();
((System.ComponentModel.ISupportInitialize)IVDEF).BeginInit();
((System.ComponentModel.ISupportInitialize)IVATK).BeginInit();
((System.ComponentModel.ISupportInitialize)IVHP).BeginInit();
((System.ComponentModel.ISupportInitialize)RewardsCount).BeginInit();
SuspendLayout();
//
// Species
//
Species.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
Species.AutoCompleteSource = AutoCompleteSource.ListItems;
Species.Enabled = false;
Species.FormattingEnabled = true;
Species.Location = new Point(104, 55);
Species.Name = "Species";
Species.Size = new Size(178, 23);
Species.TabIndex = 0;
//
// SpeciesCheck
//
SpeciesCheck.AutoSize = true;
SpeciesCheck.Location = new Point(15, 57);
SpeciesCheck.Name = "SpeciesCheck";
SpeciesCheck.Size = new Size(65, 19);
SpeciesCheck.TabIndex = 1;
SpeciesCheck.Text = "Species";
SpeciesCheck.UseVisualStyleBackColor = true;
SpeciesCheck.CheckedChanged += SpeciesCheck_CheckedChanged;
//
// Form
//
Form.Enabled = false;
Form.Location = new Point(104, 82);
Form.Name = "Form";
Form.Size = new Size(178, 23);
Form.TabIndex = 0;
//
// FormCheck
//
FormCheck.AutoSize = true;
FormCheck.Location = new Point(15, 84);
FormCheck.Name = "FormCheck";
FormCheck.Size = new Size(54, 19);
FormCheck.TabIndex = 1;
FormCheck.Text = "Form";
FormCheck.UseVisualStyleBackColor = true;
FormCheck.CheckedChanged += FormCheck_CheckedChanged;
//
// NatureCheck
//
NatureCheck.AutoSize = true;
NatureCheck.Location = new Point(15, 113);
NatureCheck.Name = "NatureCheck";
NatureCheck.Size = new Size(62, 19);
NatureCheck.TabIndex = 3;
NatureCheck.Text = "Nature";
NatureCheck.UseVisualStyleBackColor = true;
NatureCheck.CheckedChanged += NatureCheck_CheckedChanged;
//
// Nature
//
Nature.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
Nature.AutoCompleteSource = AutoCompleteSource.ListItems;
Nature.Enabled = false;
Nature.FormattingEnabled = true;
Nature.Location = new Point(104, 111);
Nature.Name = "Nature";
Nature.Size = new Size(178, 23);
Nature.TabIndex = 2;
//
// StarCheck
//
StarCheck.AutoSize = true;
StarCheck.Location = new Point(15, 142);
StarCheck.Name = "StarCheck";
StarCheck.Size = new Size(51, 19);
StarCheck.TabIndex = 5;
StarCheck.Text = "Stars";
StarCheck.UseVisualStyleBackColor = true;
StarCheck.CheckedChanged += StarCheck_CheckedChanged;
//
// Stars
//
Stars.Enabled = false;
Stars.FormattingEnabled = true;
Stars.Items.AddRange(new object[] { "1", "2", "3", "4", "5", "6", "7" });
Stars.Location = new Point(104, 140);
Stars.Name = "Stars";
Stars.Size = new Size(119, 23);
Stars.TabIndex = 4;
//
// ShinyCheck
//
ShinyCheck.AutoSize = true;
ShinyCheck.Location = new Point(15, 285);
ShinyCheck.Name = "ShinyCheck";
ShinyCheck.Size = new Size(60, 19);
ShinyCheck.TabIndex = 6;
ShinyCheck.Text = "Shiny?";
ShinyCheck.UseVisualStyleBackColor = true;
ShinyCheck.CheckedChanged += ShinyCheck_CheckedChanged;
//
// Add
//
Add.Location = new Point(12, 440);
Add.Name = "Add";
Add.Size = new Size(132, 23);
Add.TabIndex = 9;
Add.Text = "Add Filter";
Add.UseVisualStyleBackColor = true;
Add.Click += Add_Filter_Click;
//
// PerfectIVFilterGroup
//
PerfectIVFilterGroup.Controls.Add(SpeComp);
PerfectIVFilterGroup.Controls.Add(SpaComp);
PerfectIVFilterGroup.Controls.Add(SpdComp);
PerfectIVFilterGroup.Controls.Add(DefComp);
PerfectIVFilterGroup.Controls.Add(AtkComp);
PerfectIVFilterGroup.Controls.Add(HPComp);
PerfectIVFilterGroup.Controls.Add(IVSPE);
PerfectIVFilterGroup.Controls.Add(IVSPD);
PerfectIVFilterGroup.Controls.Add(IVSPA);
PerfectIVFilterGroup.Controls.Add(IVDEF);
PerfectIVFilterGroup.Controls.Add(IVATK);
PerfectIVFilterGroup.Controls.Add(IVHP);
PerfectIVFilterGroup.Controls.Add(Spe);
PerfectIVFilterGroup.Controls.Add(SpD);
PerfectIVFilterGroup.Controls.Add(SpA);
PerfectIVFilterGroup.Controls.Add(Def);
PerfectIVFilterGroup.Controls.Add(Atk);
PerfectIVFilterGroup.Controls.Add(HP);
PerfectIVFilterGroup.Location = new Point(12, 310);
PerfectIVFilterGroup.Name = "PerfectIVFilterGroup";
PerfectIVFilterGroup.Size = new Size(270, 124);
PerfectIVFilterGroup.TabIndex = 10;
PerfectIVFilterGroup.TabStop = false;
PerfectIVFilterGroup.Text = "IV Filters";
//
// SpeComp
//
SpeComp.DropDownStyle = ComboBoxStyle.DropDownList;
SpeComp.Enabled = false;
SpeComp.FormattingEnabled = true;
SpeComp.Items.AddRange(new object[] { "=", ">", ">=", "<=", "<" });
SpeComp.Location = new Point(228, 54);
SpeComp.Name = "SpeComp";
SpeComp.Size = new Size(39, 23);
SpeComp.TabIndex = 17;
//
// SpaComp
//
SpaComp.DropDownStyle = ComboBoxStyle.DropDownList;
SpaComp.Enabled = false;
SpaComp.FormattingEnabled = true;
SpaComp.Items.AddRange(new object[] { "=", ">", ">=", "<=", "<" });
SpaComp.Location = new Point(138, 54);
SpaComp.Name = "SpaComp";
SpaComp.Size = new Size(39, 23);
SpaComp.TabIndex = 15;
//
// SpdComp
//
SpdComp.DropDownStyle = ComboBoxStyle.DropDownList;
SpdComp.Enabled = false;
SpdComp.FormattingEnabled = true;
SpdComp.Items.AddRange(new object[] { "=", ">", ">=", "<=", "<" });
SpdComp.Location = new Point(183, 54);
SpdComp.Name = "SpdComp";
SpdComp.Size = new Size(39, 23);
SpdComp.TabIndex = 16;
//
// DefComp
//
DefComp.DropDownStyle = ComboBoxStyle.DropDownList;
DefComp.Enabled = false;
DefComp.FormattingEnabled = true;
DefComp.Items.AddRange(new object[] { "=", ">", ">=", "<=", "<" });
DefComp.Location = new Point(93, 54);
DefComp.Name = "DefComp";
DefComp.Size = new Size(39, 23);
DefComp.TabIndex = 14;
//
// AtkComp
//
AtkComp.DropDownStyle = ComboBoxStyle.DropDownList;
AtkComp.Enabled = false;
AtkComp.FormattingEnabled = true;
AtkComp.Items.AddRange(new object[] { "=", ">", ">=", "<=", "<" });
AtkComp.Location = new Point(48, 54);
AtkComp.Name = "AtkComp";
AtkComp.Size = new Size(39, 23);
AtkComp.TabIndex = 13;
//
// HPComp
//
HPComp.DropDownStyle = ComboBoxStyle.DropDownList;
HPComp.Enabled = false;
HPComp.FormattingEnabled = true;
HPComp.Items.AddRange(new object[] { "=", ">", ">=", "<=", "<" });
HPComp.Location = new Point(3, 54);
HPComp.Name = "HPComp";
HPComp.Size = new Size(39, 23);
HPComp.TabIndex = 12;
//
// IVSPE
//
IVSPE.Enabled = false;
IVSPE.Location = new Point(228, 22);
IVSPE.Maximum = new decimal(new int[] { 31, 0, 0, 0 });
IVSPE.Name = "IVSPE";
IVSPE.Size = new Size(39, 23);
IVSPE.TabIndex = 11;
IVSPE.Value = new decimal(new int[] { 31, 0, 0, 0 });
//
// IVSPD
//
IVSPD.Enabled = false;
IVSPD.Location = new Point(183, 22);
IVSPD.Maximum = new decimal(new int[] { 31, 0, 0, 0 });
IVSPD.Name = "IVSPD";
IVSPD.Size = new Size(39, 23);
IVSPD.TabIndex = 10;
IVSPD.Value = new decimal(new int[] { 31, 0, 0, 0 });
//
// IVSPA
//
IVSPA.Enabled = false;
IVSPA.Location = new Point(138, 22);
IVSPA.Maximum = new decimal(new int[] { 31, 0, 0, 0 });
IVSPA.Name = "IVSPA";
IVSPA.Size = new Size(39, 23);
IVSPA.TabIndex = 9;
IVSPA.Value = new decimal(new int[] { 31, 0, 0, 0 });
//
// IVDEF
//
IVDEF.Enabled = false;
IVDEF.Location = new Point(93, 22);
IVDEF.Maximum = new decimal(new int[] { 31, 0, 0, 0 });
IVDEF.Name = "IVDEF";
IVDEF.Size = new Size(39, 23);
IVDEF.TabIndex = 8;
IVDEF.Value = new decimal(new int[] { 31, 0, 0, 0 });
//
// IVATK
//
IVATK.Enabled = false;
IVATK.Location = new Point(48, 22);
IVATK.Maximum = new decimal(new int[] { 31, 0, 0, 0 });
IVATK.Name = "IVATK";
IVATK.Size = new Size(39, 23);
IVATK.TabIndex = 7;
IVATK.Value = new decimal(new int[] { 31, 0, 0, 0 });
//
// IVHP
//
IVHP.Enabled = false;
IVHP.Location = new Point(3, 22);
IVHP.Maximum = new decimal(new int[] { 31, 0, 0, 0 });
IVHP.Name = "IVHP";
IVHP.Size = new Size(39, 23);
IVHP.TabIndex = 6;
IVHP.Value = new decimal(new int[] { 31, 0, 0, 0 });
//
// Spe
//
Spe.AutoSize = true;
Spe.CheckAlign = ContentAlignment.TopCenter;
Spe.Location = new Point(233, 83);
Spe.Name = "Spe";
Spe.Size = new Size(30, 33);
Spe.TabIndex = 5;
Spe.Text = "Spe";
Spe.TextAlign = ContentAlignment.MiddleCenter;
Spe.UseVisualStyleBackColor = true;
Spe.CheckedChanged += Spe_CheckedChanged;
//
// SpD
//
SpD.AutoSize = true;
SpD.CheckAlign = ContentAlignment.TopCenter;
SpD.Location = new Point(187, 83);
SpD.Name = "SpD";
SpD.Size = new Size(32, 33);
SpD.TabIndex = 4;
SpD.Text = "SpD";
SpD.TextAlign = ContentAlignment.MiddleCenter;
SpD.UseVisualStyleBackColor = true;
SpD.CheckedChanged += SpD_CheckedChanged;
//
// SpA
//
SpA.AutoSize = true;
SpA.CheckAlign = ContentAlignment.TopCenter;
SpA.Location = new Point(142, 83);
SpA.Name = "SpA";
SpA.Size = new Size(32, 33);
SpA.TabIndex = 3;
SpA.Text = "SpA";
SpA.TextAlign = ContentAlignment.MiddleCenter;
SpA.UseVisualStyleBackColor = true;
SpA.CheckedChanged += SpA_CheckedChanged;
//
// Def
//
Def.AutoSize = true;
Def.CheckAlign = ContentAlignment.TopCenter;
Def.Location = new Point(99, 83);
Def.Name = "Def";
Def.Size = new Size(29, 33);
Def.TabIndex = 2;
Def.Text = "Def";
Def.TextAlign = ContentAlignment.MiddleCenter;
Def.UseVisualStyleBackColor = true;
Def.CheckedChanged += Def_CheckedChanged;
//
// Atk
//
Atk.AutoSize = true;
Atk.CheckAlign = ContentAlignment.TopCenter;
Atk.Location = new Point(54, 84);
Atk.Name = "Atk";
Atk.Size = new Size(29, 33);
Atk.TabIndex = 1;
Atk.Text = "Atk";
Atk.TextAlign = ContentAlignment.MiddleCenter;
Atk.UseVisualStyleBackColor = true;
Atk.CheckedChanged += Atk_CheckedChanged;
//
// HP
//
HP.AutoSize = true;
HP.CheckAlign = ContentAlignment.TopCenter;
HP.Location = new Point(10, 84);
HP.Name = "HP";
HP.Size = new Size(27, 33);
HP.TabIndex = 0;
HP.Text = "HP";
HP.TextAlign = ContentAlignment.MiddleCenter;
HP.UseVisualStyleBackColor = true;
HP.CheckedChanged += HP_CheckedChanged;
//
// TeraCheck
//
TeraCheck.AutoSize = true;
TeraCheck.Location = new Point(15, 171);
TeraCheck.Name = "TeraCheck";
TeraCheck.Size = new Size(74, 19);
TeraCheck.TabIndex = 18;
TeraCheck.Text = "Tera Type";
TeraCheck.UseVisualStyleBackColor = true;
TeraCheck.CheckedChanged += TeraCheck_CheckedChanged;
//
// TeraType
//
TeraType.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
TeraType.AutoCompleteSource = AutoCompleteSource.ListItems;
TeraType.Enabled = false;
TeraType.FormattingEnabled = true;
TeraType.Items.AddRange(new object[] { "1", "2", "3", "4", "5", "6", "7" });
TeraType.Location = new Point(104, 169);
TeraType.Name = "TeraType";
TeraType.Size = new Size(178, 23);
TeraType.TabIndex = 17;
//
// ActiveFilters
//
ActiveFilters.FormattingEnabled = true;
ActiveFilters.Location = new Point(305, 23);
ActiveFilters.Name = "ActiveFilters";
ActiveFilters.Size = new Size(185, 256);
ActiveFilters.TabIndex = 20;
ActiveFilters.ItemCheck += ActiveFilters_ItemCheck;
ActiveFilters.DrawItem += ActiveFilters_DrawItem;
ActiveFilters.SelectedIndexChanged += ActiveFilters_SelectedIndexChanged;
//
// FilterName
//
FilterName.BorderStyle = BorderStyle.FixedSingle;
FilterName.Location = new Point(57, 23);
FilterName.Name = "FilterName";
FilterName.Size = new Size(225, 23);
FilterName.TabIndex = 21;
FilterName.TextChanged += FilterName_TextChanged;
//
// label1
//
label1.AutoSize = true;
label1.Location = new Point(12, 26);
label1.Name = "label1";
label1.Size = new Size(39, 15);
label1.TabIndex = 22;
label1.Text = "Name";
//
// Remove
//
Remove.Location = new Point(150, 439);
Remove.Name = "Remove";
Remove.Size = new Size(132, 23);
Remove.TabIndex = 23;
Remove.Text = "Remove Filter";
Remove.UseVisualStyleBackColor = true;
Remove.Click += Remove_Click;
//
// StarsComp
//
StarsComp.DropDownStyle = ComboBoxStyle.DropDownList;
StarsComp.Enabled = false;
StarsComp.FormattingEnabled = true;
StarsComp.Items.AddRange(new object[] { "=", ">", ">=", "<=", "<" });
StarsComp.Location = new Point(229, 140);
StarsComp.Name = "StarsComp";
StarsComp.Size = new Size(53, 23);
StarsComp.TabIndex = 18;
//
// RewardsComp
//
RewardsComp.DropDownStyle = ComboBoxStyle.DropDownList;
RewardsComp.Enabled = false;
RewardsComp.FormattingEnabled = true;
RewardsComp.IntegralHeight = false;
RewardsComp.Items.AddRange(new object[] { "=", ">", ">=", "<=", "<" });
RewardsComp.Location = new Point(229, 256);
RewardsComp.Name = "RewardsComp";
RewardsComp.Size = new Size(53, 23);
RewardsComp.TabIndex = 27;
//
// CheckRewards
//
CheckRewards.AutoSize = true;
CheckRewards.Location = new Point(15, 229);
CheckRewards.Name = "CheckRewards";
CheckRewards.Size = new Size(70, 19);
CheckRewards.TabIndex = 26;
CheckRewards.Text = "Rewards";
CheckRewards.UseVisualStyleBackColor = true;
CheckRewards.CheckedChanged += CheckRewards_CheckedChanged;
//
// Rewards
//
Rewards.Enabled = false;
Rewards.Location = new Point(104, 227);
Rewards.Name = "Rewards";
Rewards.Size = new Size(153, 23);
Rewards.TabIndex = 28;
Rewards.Text = "645,795,1606,1904,1905,1906,1907,1908";
//
// label2
//
label2.AutoSize = true;
label2.Location = new Point(14, 259);
label2.Name = "label2";
label2.Size = new Size(82, 15);
label2.TabIndex = 29;
label2.Text = "Reward Count";
//
// RewardsCount
//
RewardsCount.Enabled = false;
RewardsCount.Location = new Point(104, 256);
RewardsCount.Maximum = new decimal(new int[] { 12, 0, 0, 0 });
RewardsCount.Name = "RewardsCount";
RewardsCount.Size = new Size(119, 23);
RewardsCount.TabIndex = 30;
//
// ButtonOpenRewardsList
//
ButtonOpenRewardsList.Location = new Point(263, 227);
ButtonOpenRewardsList.Name = "ButtonOpenRewardsList";
ButtonOpenRewardsList.Size = new Size(19, 23);
ButtonOpenRewardsList.TabIndex = 31;
ButtonOpenRewardsList.Text = "?";
ButtonOpenRewardsList.UseVisualStyleBackColor = true;
ButtonOpenRewardsList.Click += ButtonOpenRewardsList_Click;
//
// GenderCheck
//
GenderCheck.AutoSize = true;
GenderCheck.Location = new Point(15, 200);
GenderCheck.Name = "GenderCheck";
GenderCheck.Size = new Size(64, 19);
GenderCheck.TabIndex = 33;
GenderCheck.Text = "Gender";
GenderCheck.UseVisualStyleBackColor = true;
GenderCheck.CheckedChanged += GenderCheck_CheckedChanged;
//
// Gender
//
Gender.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
Gender.AutoCompleteSource = AutoCompleteSource.ListItems;
Gender.Enabled = false;
Gender.FormattingEnabled = true;
Gender.Items.AddRange(new object[] { "Male", "Female", "Genderless" });
Gender.Location = new Point(104, 198);
Gender.Name = "Gender";
Gender.Size = new Size(178, 23);
Gender.TabIndex = 32;
//
// LabelBatchFilters
//
LabelBatchFilters.AutoSize = true;
LabelBatchFilters.Location = new Point(305, 285);
LabelBatchFilters.Name = "LabelBatchFilters";
LabelBatchFilters.Size = new Size(71, 15);
LabelBatchFilters.TabIndex = 34;
LabelBatchFilters.Text = "Batch Filters";
//
// BatchFilters
//
BatchFilters.BorderStyle = BorderStyle.FixedSingle;
BatchFilters.Location = new Point(305, 305);
BatchFilters.Multiline = true;
BatchFilters.Name = "BatchFilters";
BatchFilters.Size = new Size(185, 157);
BatchFilters.TabIndex = 35;
//
// SquareCheck
//
SquareCheck.AutoSize = true;
SquareCheck.Location = new Point(104, 285);
SquareCheck.Name = "SquareCheck";
SquareCheck.Size = new Size(69, 19);
SquareCheck.TabIndex = 36;
SquareCheck.Text = "XOR = 0";
Tooltip.SetToolTip(SquareCheck, "If checked, only stop on \"Square\" shinies.\r\nThere is no display difference for these in SV, but they will appear\r\nas Square shiny in SwSh or any future game that supports them.");
SquareCheck.UseVisualStyleBackColor = true;
//
// ECCheck
//
ECCheck.AutoSize = true;
ECCheck.Location = new Point(188, 285);
ECCheck.Name = "ECCheck";
ECCheck.Size = new Size(94, 19);
ECCheck.TabIndex = 37;
ECCheck.Text = "EC % 100 = 0";
Tooltip.SetToolTip(ECCheck, resources.GetString("ECCheck.ToolTip"));
ECCheck.UseVisualStyleBackColor = true;
//
// FilterSettings
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(502, 474);
Controls.Add(ECCheck);
Controls.Add(SquareCheck);
Controls.Add(BatchFilters);
Controls.Add(LabelBatchFilters);
Controls.Add(GenderCheck);
Controls.Add(Gender);
Controls.Add(ButtonOpenRewardsList);
Controls.Add(RewardsCount);
Controls.Add(label2);
Controls.Add(Rewards);
Controls.Add(RewardsComp);
Controls.Add(CheckRewards);
Controls.Add(StarsComp);
Controls.Add(Remove);
Controls.Add(label1);
Controls.Add(FilterName);
Controls.Add(ActiveFilters);
Controls.Add(TeraCheck);
Controls.Add(TeraType);
Controls.Add(PerfectIVFilterGroup);
Controls.Add(Add);
Controls.Add(ShinyCheck);
Controls.Add(StarCheck);
Controls.Add(Stars);
Controls.Add(NatureCheck);
Controls.Add(Nature);
Controls.Add(FormCheck);
Controls.Add(Form);
Controls.Add(SpeciesCheck);
Controls.Add(Species);
FormBorderStyle = FormBorderStyle.FixedDialog;
MaximizeBox = false;
MinimizeBox = false;
Name = "FilterSettings";
StartPosition = FormStartPosition.CenterParent;
Text = "FilterSettings";
FormClosing += FilterSettings_FormClosing;
((System.ComponentModel.ISupportInitialize)Form).EndInit();
PerfectIVFilterGroup.ResumeLayout(false);
PerfectIVFilterGroup.PerformLayout();
((System.ComponentModel.ISupportInitialize)IVSPE).EndInit();
((System.ComponentModel.ISupportInitialize)IVSPD).EndInit();
((System.ComponentModel.ISupportInitialize)IVSPA).EndInit();
((System.ComponentModel.ISupportInitialize)IVDEF).EndInit();
((System.ComponentModel.ISupportInitialize)IVATK).EndInit();
((System.ComponentModel.ISupportInitialize)IVHP).EndInit();
((System.ComponentModel.ISupportInitialize)RewardsCount).EndInit();
ResumeLayout(false);
PerformLayout();
}
#endregion
private ComboBox Species;
private CheckBox SpeciesCheck;
private NumericUpDown Form;
private CheckBox FormCheck;
private CheckBox NatureCheck;
private ComboBox Nature;
private CheckBox StarCheck;
private ComboBox Stars;
private CheckBox ShinyCheck;
private Button Add;
private GroupBox PerfectIVFilterGroup;
private CheckBox Spe;
private CheckBox SpD;
private CheckBox SpA;
private CheckBox Def;
private CheckBox Atk;
private CheckBox HP;
private NumericUpDown IVSPE;
private NumericUpDown IVSPD;
private NumericUpDown IVSPA;
private NumericUpDown IVDEF;
private NumericUpDown IVATK;
private NumericUpDown IVHP;
private CheckBox TeraCheck;
private ComboBox TeraType;
private CheckedListBox ActiveFilters;
private TextBox FilterName;
private Label label1;
private Button Remove;
private ComboBox HPComp;
private ComboBox SpeComp;
private ComboBox SpaComp;
private ComboBox SpdComp;
private ComboBox DefComp;
private ComboBox AtkComp;
private ComboBox StarsComp;
private ComboBox RewardsComp;
private CheckBox CheckRewards;
private TextBox Rewards;
private Label label2;
private NumericUpDown RewardsCount;
private Button ButtonOpenRewardsList;
private CheckBox GenderCheck;
private ComboBox Gender;
private Label LabelBatchFilters;
private TextBox BatchFilters;
private CheckBox SquareCheck;
private ToolTip Tooltip;
private CheckBox ECCheck;
}
}
================================================
FILE: RaidCrawler.WinForms/SubForms/FilterSettings.cs
================================================
using PKHeX.Core;
using RaidCrawler.Core.Structures;
using System.Text.Json;
namespace RaidCrawler.WinForms.SubForms;
public partial class FilterSettings : Form
{
private readonly List filters;
private readonly BindingSource bs = [];
public FilterSettings(ref List filters)
{
InitializeComponent();
this.filters = filters;
Species.DataSource = Enum.GetValues()
.Where(z => z != PKHeX.Core.Species.MAX_COUNT)
.ToArray();
Nature.DataSource = Enum.GetValues();
TeraType.DataSource = Enum.GetValues()
.Where(z => z != MoveType.Any)
.ToArray();
Stars.SelectedIndex = 0;
StarsComp.SelectedIndex = 0;
HPComp.SelectedIndex = 0;
AtkComp.SelectedIndex = 0;
DefComp.SelectedIndex = 0;
SpaComp.SelectedIndex = 0;
SpdComp.SelectedIndex = 0;
SpeComp.SelectedIndex = 0;
ResetActiveFilters();
if (ActiveFilters.Items.Count > 0)
ActiveFilters.SelectedIndex = 0;
if (ActiveFilters.SelectedIndex == -1)
Remove.Enabled = false;
}
public void ResetActiveFilters()
{
if (bs.DataSource == null)
{
bs.DataSource = filters;
ActiveFilters.DataSource = bs;
ActiveFilters.DisplayMember = "Name";
}
else
{
bs.ResetBindings(false);
}
for (int i = 0; i < filters.Count; i++)
ActiveFilters.SetItemChecked(i, filters[i].Enabled);
}
public void SelectFilter(RaidFilter filter)
{
FilterName.Text = filter.Name;
Species.SelectedIndex = filter.Species ?? 0;
Form.Value = filter.Form ?? 0;
Nature.SelectedIndex = filter.Nature ?? 0;
Stars.SelectedIndex = filter.Stars != null ? (int)filter.Stars - 1 : 0;
StarsComp.SelectedIndex = filter.StarsComp;
TeraType.SelectedIndex = filter.TeraType ?? 0;
Gender.SelectedIndex = filter.Gender ?? 0;
SpeciesCheck.Checked = filter.Species != null;
FormCheck.Checked = filter.Form != null;
NatureCheck.Checked = filter.Nature != null;
StarCheck.Checked = filter.Stars != null;
TeraCheck.Checked = filter.TeraType != null;
GenderCheck.Checked = filter.Gender != null;
ShinyCheck.Checked = filter.Shiny;
SquareCheck.Checked = filter.Square;
ECCheck.Checked = filter.RareEC;
CheckRewards.Checked = filter is { RewardItems: not null, RewardsCount: > 0 };
Rewards.Text = filter.RewardItems != null
? string.Join(",", filter.RewardItems.Select(x => x.ToString()).ToArray())
: "645,795,1606,1904,1905,1906,1907,1908";
RewardsComp.SelectedIndex = filter.RewardsComp;
RewardsCount.Value = filter.RewardsCount;
BatchFilters.Text = filter.BatchFilters != null
? string.Join(Environment.NewLine, filter.BatchFilters)
: string.Empty;
var ivbin = filter.IVBin;
HP.Checked = (ivbin & 1) == 1;
Atk.Checked = ((ivbin >> 1) & 1) == 1;
Def.Checked = ((ivbin >> 2) & 1) == 1;
SpA.Checked = ((ivbin >> 3) & 1) == 1;
SpD.Checked = ((ivbin >> 4) & 1) == 1;
Spe.Checked = ((ivbin >> 5) & 1) == 1;
var ivvals = filter.IVVals;
IVHP.Value = ivvals & 31;
IVATK.Value = (ivvals >> 5) & 31;
IVDEF.Value = (ivvals >> 10) & 31;
IVSPA.Value = (ivvals >> 15) & 31;
IVSPD.Value = (ivvals >> 20) & 31;
IVSPE.Value = (ivvals >> 25) & 31;
var ivcomp = filter.IVComps;
HPComp.SelectedIndex = (ivcomp & 7);
AtkComp.SelectedIndex = (ivcomp >> 3) & 7;
DefComp.SelectedIndex = (ivcomp >> 6) & 7;
SpaComp.SelectedIndex = (ivcomp >> 9) & 7;
SpdComp.SelectedIndex = (ivcomp >> 12) & 7;
SpeComp.SelectedIndex = (ivcomp >> 15) & 7;
IVHP.Enabled = HP.Checked;
IVATK.Enabled = Atk.Checked;
IVDEF.Enabled = Def.Checked;
IVSPA.Enabled = SpA.Checked;
IVSPD.Enabled = SpD.Checked;
IVSPE.Enabled = Spe.Checked;
HPComp.Enabled = HP.Checked;
AtkComp.Enabled = Atk.Checked;
DefComp.Enabled = Def.Checked;
SpaComp.Enabled = SpA.Checked;
SpdComp.Enabled = SpD.Checked;
SpeComp.Enabled = Spe.Checked;
Species.Enabled = SpeciesCheck.Checked;
Nature.Enabled = NatureCheck.Checked;
Stars.Enabled = StarCheck.Checked;
StarsComp.Enabled = StarCheck.Checked;
Rewards.Enabled = CheckRewards.Checked;
ButtonOpenRewardsList.Enabled = CheckRewards.Checked;
RewardsCount.Enabled = CheckRewards.Checked;
RewardsComp.Enabled = CheckRewards.Checked;
TeraType.Enabled = TeraCheck.Checked;
Gender.Enabled = GenderCheck.Checked;
}
private void Add_Filter_Click(object sender, EventArgs e)
{
if (string.IsNullOrWhiteSpace(FilterName.Text))
{
MessageBox.Show("Name is a required field!");
return;
}
RaidFilter filter = new();
var ivbin =
ToInt(HP.Checked) << 0
| ToInt(Atk.Checked) << 1
| ToInt(Def.Checked) << 2
| ToInt(SpA.Checked) << 3
| ToInt(SpD.Checked) << 4
| ToInt(Spe.Checked) << 5;
var ivcomps =
HPComp.SelectedIndex << 0
| AtkComp.SelectedIndex << 3
| DefComp.SelectedIndex << 6
| SpaComp.SelectedIndex << 9
| SpdComp.SelectedIndex << 12
| SpeComp.SelectedIndex << 15;
var ivvals =
(int)IVHP.Value << 0
| (int)IVATK.Value << 5
| (int)IVDEF.Value << 10
| (int)IVSPA.Value << 15
| (int)IVSPD.Value << 20
| (int)IVSPE.Value << 25;
filter.Name = FilterName.Text.Trim();
filter.Species = SpeciesCheck.Checked ? Species.SelectedIndex : null;
filter.Form = FormCheck.Checked ? (int)Form.Value : null;
filter.Nature = NatureCheck.Checked ? Nature.SelectedIndex : null;
filter.Stars = StarCheck.Checked ? Stars.SelectedIndex + 1 : null;
filter.StarsComp = StarsComp.SelectedIndex;
filter.TeraType = TeraCheck.Checked ? TeraType.SelectedIndex : null;
filter.Gender = GenderCheck.Checked ? Gender.SelectedIndex : null;
filter.Shiny = ShinyCheck.Checked;
filter.Square = SquareCheck.Checked;
filter.RareEC = ECCheck.Checked;
filter.IVBin = ivbin;
filter.IVVals = ivvals;
filter.IVComps = ivcomps;
filter.RewardItems = CheckRewards.Checked
? Rewards.Text
.Split(',')
.Where(z => int.TryParse(z.Trim(), out _))
.Select(z => int.Parse(z.Trim()))
.ToArray()
: null;
filter.RewardsCount = (int)RewardsCount.Value;
filter.RewardsComp = RewardsComp.SelectedIndex;
filter.BatchFilters = string.IsNullOrWhiteSpace(BatchFilters.Text) ? null : BatchFilters.Text.Split(Environment.NewLine);
filter.Enabled = true;
if (filter.IsFilterSet())
{
for (int i = 0; i < ActiveFilters.Items.Count; i++)
{
var f = filters[i];
if (f.Name != filter.Name)
continue;
filters.RemoveAt(i);
break;
}
filters.Add(filter);
ResetActiveFilters();
ActiveFilters.SelectedIndex = ActiveFilters.Items.Count - 1;
}
else
{
MessageBox.Show("You have not set any stop conditions. No filter will be added.");
}
}
private static int ToInt(bool b) => b ? 1 : 0;
private void SpeciesCheck_CheckedChanged(object sender, EventArgs e)
{
Species.Enabled = SpeciesCheck.Checked;
}
private void FormCheck_CheckedChanged(object sender, EventArgs e)
{
Form.Enabled = FormCheck.Checked;
}
private void NatureCheck_CheckedChanged(object sender, EventArgs e)
{
Nature.Enabled = NatureCheck.Checked;
}
private void StarCheck_CheckedChanged(object sender, EventArgs e)
{
Stars.Enabled = StarCheck.Checked;
StarsComp.Enabled = StarCheck.Checked;
}
private void TeraCheck_CheckedChanged(object sender, EventArgs e)
{
TeraType.Enabled = TeraCheck.Checked;
}
private void GenderCheck_CheckedChanged(object sender, EventArgs e)
{
Gender.Enabled = GenderCheck.Checked;
}
private void HP_CheckedChanged(object sender, EventArgs e)
{
IVHP.Enabled = HP.Checked;
HPComp.Enabled = HP.Checked;
}
private void Atk_CheckedChanged(object sender, EventArgs e)
{
IVATK.Enabled = Atk.Checked;
AtkComp.Enabled = Atk.Checked;
}
private void Def_CheckedChanged(object sender, EventArgs e)
{
IVDEF.Enabled = Def.Checked;
DefComp.Enabled = Def.Checked;
}
private void SpA_CheckedChanged(object sender, EventArgs e)
{
IVSPA.Enabled = SpA.Checked;
SpaComp.Enabled = SpA.Checked;
}
private void SpD_CheckedChanged(object sender, EventArgs e)
{
IVSPD.Enabled = SpD.Checked;
SpdComp.Enabled = SpD.Checked;
}
private void Spe_CheckedChanged(object sender, EventArgs e)
{
IVSPE.Enabled = Spe.Checked;
SpeComp.Enabled = Spe.Checked;
}
private void FilterSettings_FormClosing(object sender, EventArgs e)
{
HashSet indexset = new(ActiveFilters.CheckedIndices.Cast());
for (int i = 0; i < filters.Count; i++)
filters[i].Enabled = indexset.Contains(i);
string output = JsonSerializer.Serialize(filters);
using StreamWriter sw =
new(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "filters.json"));
sw.Write(output);
}
private void Remove_Click(object sender, EventArgs e)
{
if (ActiveFilters.Items.Count == 0 || ActiveFilters.SelectedIndex == -1)
return;
var idx = ActiveFilters.SelectedIndex;
filters.RemoveAt(idx);
ResetActiveFilters();
}
private void ActiveFilters_SelectedIndexChanged(object sender, EventArgs e)
{
Remove.Enabled = ActiveFilters.SelectedIndex >= 0;
if (ActiveFilters.SelectedIndex < 0)
return;
SelectFilter(filters[ActiveFilters.SelectedIndex]);
}
private void ActiveFilters_ItemCheck(object sender, ItemCheckEventArgs e)
{
filters[e.Index].Enabled = e.NewValue == CheckState.Checked;
}
private void FilterName_TextChanged(object sender, EventArgs e)
{
if (ActiveFilters.SelectedIndex > -1 && FilterName.Text == filters[ActiveFilters.SelectedIndex].Name)
Add.Text = "Update Filter";
else
Add.Text = "Add Filter";
}
private void CheckRewards_CheckedChanged(object sender, EventArgs e)
{
Rewards.Enabled = CheckRewards.Checked;
ButtonOpenRewardsList.Enabled = CheckRewards.Checked;
RewardsComp.Enabled = CheckRewards.Checked;
RewardsCount.Enabled = CheckRewards.Checked;
}
private void ButtonOpenRewardsList_Click(object sender, EventArgs e)
{
List IDs = Rewards.Text.Split(',').Select(int.Parse).ToList();
using ItemIDs form = new(IDs);
if (form.ShowDialog() != DialogResult.OK)
return;
List s = [];
if (form.CheckAbilityCapsule.Checked)
s.Add(645);
if (form.CheckBottleCap.Checked)
s.Add(795);
if (form.CheckAbilityPatch.Checked)
s.Add(1606);
if (form.CheckSweet.Checked)
s.Add(1904);
if (form.CheckSalty.Checked)
s.Add(1905);
if (form.CheckSour.Checked)
s.Add(1906);
if (form.CheckBitter.Checked)
s.Add(1907);
if (form.CheckSpicy.Checked)
s.Add(1908);
Rewards.Text = string.Join(",", s);
}
private void ActiveFilters_DrawItem(object sender, DrawItemEventArgs e)
{
e.DrawBackground();
ListBox lb = (ListBox)sender;
Graphics g = e.Graphics;
RaidFilter filter = (RaidFilter)lb.Items[e.Index];
var highlight = (e.State & DrawItemState.Selected) == DrawItemState.Selected;
var color = highlight ? ColorTranslator.FromHtml("#000078d7") : Color.White;
var brush = new SolidBrush(color);
g.FillRectangle(brush, e.Bounds);
var textColor = filter.Enabled ? e.ForeColor : Color.Gray;
var textBrush = new SolidBrush(textColor);
var pt = new PointF(e.Bounds.X, e.Bounds.Y);
g.DrawString(filter.Name, new Font(Name = "Segoe UI", 9), textBrush, pt);
e.DrawFocusRectangle();
}
private void ShinyCheck_CheckedChanged(object sender, EventArgs e)
{
SquareCheck.Enabled = ShinyCheck.Checked;
if (!ShinyCheck.Checked)
SquareCheck.Checked = false;
}
}
================================================
FILE: RaidCrawler.WinForms/SubForms/FilterSettings.resx
================================================
text/microsoft-resx
2.0
System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
17, 17
If checked, only stop on results where the remainder of the
Encryption Constant (EC) divided by 100 is 0. This will result
in Dunsparce evolving into 3-Segment form, and Tandemaus
evolving into Family of Three form.
================================================
FILE: RaidCrawler.WinForms/SubForms/ItemIDs.Designer.cs
================================================
namespace RaidCrawler.WinForms.SubForms
{
partial class ItemIDs
{
///
/// Required designer variable.
///
private System.ComponentModel.IContainer components = null;
///
/// Clean up any resources being used.
///
/// true if managed resources should be disposed; otherwise, false.
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.CheckAbilityPatch = new System.Windows.Forms.CheckBox();
this.PicPatch = new System.Windows.Forms.PictureBox();
this.PicSweet = new System.Windows.Forms.PictureBox();
this.PicSour = new System.Windows.Forms.PictureBox();
this.PicSpicy = new System.Windows.Forms.PictureBox();
this.CheckSweet = new System.Windows.Forms.CheckBox();
this.CheckSour = new System.Windows.Forms.CheckBox();
this.CheckSpicy = new System.Windows.Forms.CheckBox();
this.CheckBottleCap = new System.Windows.Forms.CheckBox();
this.CheckBitter = new System.Windows.Forms.CheckBox();
this.CheckSalty = new System.Windows.Forms.CheckBox();
this.PicCap = new System.Windows.Forms.PictureBox();
this.PicBitter = new System.Windows.Forms.PictureBox();
this.PicSalty = new System.Windows.Forms.PictureBox();
this.PicCapsule = new System.Windows.Forms.PictureBox();
this.CheckAbilityCapsule = new System.Windows.Forms.CheckBox();
((System.ComponentModel.ISupportInitialize)(this.PicPatch)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.PicSweet)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.PicSour)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.PicSpicy)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.PicCap)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.PicBitter)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.PicSalty)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.PicCapsule)).BeginInit();
this.SuspendLayout();
//
// button1
//
this.button1.DialogResult = System.Windows.Forms.DialogResult.OK;
this.button1.Location = new System.Drawing.Point(12, 136);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(274, 35);
this.button1.TabIndex = 0;
this.button1.Text = "Confirm";
this.button1.UseVisualStyleBackColor = true;
//
// CheckAbilityPatch
//
this.CheckAbilityPatch.AutoSize = true;
this.CheckAbilityPatch.Location = new System.Drawing.Point(43, 16);
this.CheckAbilityPatch.Name = "CheckAbilityPatch";
this.CheckAbilityPatch.Size = new System.Drawing.Size(93, 19);
this.CheckAbilityPatch.TabIndex = 1;
this.CheckAbilityPatch.Text = "Ability Patch";
this.CheckAbilityPatch.UseVisualStyleBackColor = true;
//
// PicPatch
//
this.PicPatch.Image = global::RaidCrawler.WinForms.Properties.Resources.item_1606_hires;
this.PicPatch.Location = new System.Drawing.Point(12, 12);
this.PicPatch.Name = "PicPatch";
this.PicPatch.Size = new System.Drawing.Size(25, 25);
this.PicPatch.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.PicPatch.TabIndex = 2;
this.PicPatch.TabStop = false;
//
// PicSweet
//
this.PicSweet.Image = global::RaidCrawler.WinForms.Properties.Resources.item_1904;
this.PicSweet.Location = new System.Drawing.Point(12, 43);
this.PicSweet.Name = "PicSweet";
this.PicSweet.Size = new System.Drawing.Size(25, 25);
this.PicSweet.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.PicSweet.TabIndex = 3;
this.PicSweet.TabStop = false;
//
// PicSour
//
this.PicSour.Image = global::RaidCrawler.WinForms.Properties.Resources.item_1906;
this.PicSour.Location = new System.Drawing.Point(12, 74);
this.PicSour.Name = "PicSour";
this.PicSour.Size = new System.Drawing.Size(25, 25);
this.PicSour.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.PicSour.TabIndex = 4;
this.PicSour.TabStop = false;
//
// PicSpicy
//
this.PicSpicy.Image = global::RaidCrawler.WinForms.Properties.Resources.item_1908;
this.PicSpicy.Location = new System.Drawing.Point(12, 105);
this.PicSpicy.Name = "PicSpicy";
this.PicSpicy.Size = new System.Drawing.Size(25, 25);
this.PicSpicy.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.PicSpicy.TabIndex = 5;
this.PicSpicy.TabStop = false;
//
// CheckSweet
//
this.CheckSweet.AutoSize = true;
this.CheckSweet.Location = new System.Drawing.Point(43, 46);
this.CheckSweet.Name = "CheckSweet";
this.CheckSweet.Size = new System.Drawing.Size(92, 19);
this.CheckSweet.TabIndex = 6;
this.CheckSweet.Text = "Sweet Herba";
this.CheckSweet.UseVisualStyleBackColor = true;
//
// CheckSour
//
this.CheckSour.AutoSize = true;
this.CheckSour.Location = new System.Drawing.Point(43, 77);
this.CheckSour.Name = "CheckSour";
this.CheckSour.Size = new System.Drawing.Size(85, 19);
this.CheckSour.TabIndex = 7;
this.CheckSour.Text = "Sour Herba";
this.CheckSour.UseVisualStyleBackColor = true;
//
// CheckSpicy
//
this.CheckSpicy.AutoSize = true;
this.CheckSpicy.Location = new System.Drawing.Point(43, 108);
this.CheckSpicy.Name = "CheckSpicy";
this.CheckSpicy.Size = new System.Drawing.Size(89, 19);
this.CheckSpicy.TabIndex = 8;
this.CheckSpicy.Text = "Spicy Herba";
this.CheckSpicy.UseVisualStyleBackColor = true;
//
// CheckBottleCap
//
this.CheckBottleCap.AutoSize = true;
this.CheckBottleCap.Location = new System.Drawing.Point(181, 108);
this.CheckBottleCap.Name = "CheckBottleCap";
this.CheckBottleCap.Size = new System.Drawing.Size(81, 19);
this.CheckBottleCap.TabIndex = 16;
this.CheckBottleCap.Text = "Bottle Cap";
this.CheckBottleCap.UseVisualStyleBackColor = true;
//
// CheckBitter
//
this.CheckBitter.AutoSize = true;
this.CheckBitter.Location = new System.Drawing.Point(181, 77);
this.CheckBitter.Name = "CheckBitter";
this.CheckBitter.Size = new System.Drawing.Size(89, 19);
this.CheckBitter.TabIndex = 15;
this.CheckBitter.Text = "Bitter Herba";
this.CheckBitter.UseVisualStyleBackColor = true;
//
// CheckSalty
//
this.CheckSalty.AutoSize = true;
this.CheckSalty.Location = new System.Drawing.Point(181, 46);
this.CheckSalty.Name = "CheckSalty";
this.CheckSalty.Size = new System.Drawing.Size(86, 19);
this.CheckSalty.TabIndex = 14;
this.CheckSalty.Text = "Salty Herba";
this.CheckSalty.UseVisualStyleBackColor = true;
//
// PicCap
//
this.PicCap.Image = global::RaidCrawler.WinForms.Properties.Resources.item_0795_hires;
this.PicCap.Location = new System.Drawing.Point(150, 105);
this.PicCap.Name = "PicCap";
this.PicCap.Size = new System.Drawing.Size(25, 25);
this.PicCap.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.PicCap.TabIndex = 13;
this.PicCap.TabStop = false;
//
// PicBitter
//
this.PicBitter.Image = global::RaidCrawler.WinForms.Properties.Resources.item_1907;
this.PicBitter.Location = new System.Drawing.Point(150, 74);
this.PicBitter.Name = "PicBitter";
this.PicBitter.Size = new System.Drawing.Size(25, 25);
this.PicBitter.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.PicBitter.TabIndex = 12;
this.PicBitter.TabStop = false;
//
// PicSalty
//
this.PicSalty.Image = global::RaidCrawler.WinForms.Properties.Resources.item_1905;
this.PicSalty.Location = new System.Drawing.Point(150, 43);
this.PicSalty.Name = "PicSalty";
this.PicSalty.Size = new System.Drawing.Size(25, 25);
this.PicSalty.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.PicSalty.TabIndex = 11;
this.PicSalty.TabStop = false;
//
// PicCapsule
//
this.PicCapsule.Image = global::RaidCrawler.WinForms.Properties.Resources.item_0645_hires;
this.PicCapsule.Location = new System.Drawing.Point(150, 12);
this.PicCapsule.Name = "PicCapsule";
this.PicCapsule.Size = new System.Drawing.Size(25, 25);
this.PicCapsule.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.PicCapsule.TabIndex = 10;
this.PicCapsule.TabStop = false;
//
// CheckAbilityCapsule
//
this.CheckAbilityCapsule.AutoSize = true;
this.CheckAbilityCapsule.Location = new System.Drawing.Point(181, 16);
this.CheckAbilityCapsule.Name = "CheckAbilityCapsule";
this.CheckAbilityCapsule.Size = new System.Drawing.Size(105, 19);
this.CheckAbilityCapsule.TabIndex = 9;
this.CheckAbilityCapsule.Text = "Ability Capsule";
this.CheckAbilityCapsule.UseVisualStyleBackColor = true;
//
// ItemIDs
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(298, 183);
this.Controls.Add(this.CheckBottleCap);
this.Controls.Add(this.CheckBitter);
this.Controls.Add(this.CheckSalty);
this.Controls.Add(this.PicCap);
this.Controls.Add(this.PicBitter);
this.Controls.Add(this.PicSalty);
this.Controls.Add(this.PicCapsule);
this.Controls.Add(this.CheckAbilityCapsule);
this.Controls.Add(this.CheckSpicy);
this.Controls.Add(this.CheckSour);
this.Controls.Add(this.CheckSweet);
this.Controls.Add(this.PicSpicy);
this.Controls.Add(this.PicSour);
this.Controls.Add(this.PicSweet);
this.Controls.Add(this.PicPatch);
this.Controls.Add(this.CheckAbilityPatch);
this.Controls.Add(this.button1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.Name = "ItemIDs";
this.Text = "ItemIDs";
((System.ComponentModel.ISupportInitialize)(this.PicPatch)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.PicSweet)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.PicSour)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.PicSpicy)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.PicCap)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.PicBitter)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.PicSalty)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.PicCapsule)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private Button button1;
private PictureBox PicPatch;
private PictureBox PicSweet;
private PictureBox PicSour;
private PictureBox PicSpicy;
private PictureBox PicCap;
private PictureBox PicBitter;
private PictureBox PicSalty;
private PictureBox PicCapsule;
public CheckBox CheckAbilityPatch;
public CheckBox CheckAbilityCapsule;
public CheckBox CheckSweet;
public CheckBox CheckSour;
public CheckBox CheckSalty;
public CheckBox CheckBitter;
public CheckBox CheckSpicy;
public CheckBox CheckBottleCap;
}
}
================================================
FILE: RaidCrawler.WinForms/SubForms/ItemIDs.cs
================================================
namespace RaidCrawler.WinForms.SubForms;
public partial class ItemIDs : Form
{
public ItemIDs(List IDs)
{
InitializeComponent();
foreach (int ID in IDs)
{
switch (ID)
{
case 645:
CheckAbilityCapsule.Checked = true;
break;
case 795:
CheckBottleCap.Checked = true;
break;
case 1606:
CheckAbilityPatch.Checked = true;
break;
case 1904:
CheckSweet.Checked = true;
break;
case 1905:
CheckSalty.Checked = true;
break;
case 1906:
CheckSour.Checked = true;
break;
case 1907:
CheckBitter.Checked = true;
break;
case 1908:
CheckSpicy.Checked = true;
break;
}
}
PicCapsule.Image = (Image?)
PKHeX.Drawing.PokeSprite.Properties.Resources.ResourceManager.GetObject(
"aitem_645"
);
PicCap.Image = (Image?)
PKHeX.Drawing.PokeSprite.Properties.Resources.ResourceManager.GetObject(
"aitem_795"
);
PicPatch.Image = (Image?)
PKHeX.Drawing.PokeSprite.Properties.Resources.ResourceManager.GetObject(
"aitem_1606"
);
}
}
================================================
FILE: RaidCrawler.WinForms/SubForms/ItemIDs.resx
================================================
text/microsoft-resx
2.0
System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
================================================
FILE: RaidCrawler.WinForms/SubForms/MapView.Designer.cs
================================================
namespace RaidCrawler.WinForms.SubForms
{
partial class MapView
{
///
/// Required designer variable.
///
private System.ComponentModel.IContainer components = null;
///
/// Clean up any resources being used.
///
/// true if managed resources should be disposed; otherwise, false.
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
private void InitializeComponent()
{
Map = new PictureBox();
((System.ComponentModel.ISupportInitialize)Map).BeginInit();
SuspendLayout();
//
// Map
//
Map.Location = new Point(0, 0);
Map.Name = "Map";
Map.Size = new Size(512, 512);
Map.TabIndex = 0;
Map.TabStop = false;
//
// MapView
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(512, 512);
Controls.Add(Map);
FormBorderStyle = FormBorderStyle.FixedToolWindow;
Name = "MapView";
StartPosition = FormStartPosition.CenterParent;
Text = "Raid Location";
((System.ComponentModel.ISupportInitialize)Map).EndInit();
ResumeLayout(false);
}
#endregion
private PictureBox Map;
}
}
================================================
FILE: RaidCrawler.WinForms/SubForms/MapView.cs
================================================
namespace RaidCrawler.WinForms.SubForms;
public partial class MapView : Form
{
public MapView(Image map)
{
InitializeComponent();
Map.Image = map;
}
}
================================================
FILE: RaidCrawler.WinForms/SubForms/MapView.resx
================================================
text/microsoft-resx
2.0
System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
================================================
FILE: RaidCrawler.WinForms/SubForms/RaidBlockViewer.Designer.cs
================================================
namespace RaidCrawler.WinForms.SubForms
{
partial class RaidBlockViewer
{
///
/// Required designer variable.
///
private System.ComponentModel.IContainer components = null;
///
/// Clean up any resources being used.
///
/// true if managed resources should be disposed; otherwise, false.
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RaidBlockViewer));
this.RAM = new System.Windows.Forms.TextBox();
this.AbsoluteAddress = new System.Windows.Forms.TextBox();
this.LabelAbsoluteAddress = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// RAM
//
this.RAM.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.RAM.Font = new System.Drawing.Font("Consolas", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
this.RAM.Location = new System.Drawing.Point(12, 12);
this.RAM.Multiline = true;
this.RAM.Name = "RAM";
this.RAM.Size = new System.Drawing.Size(342, 342);
this.RAM.TabIndex = 0;
this.RAM.Text = "00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF";
//
// AbsoluteAddress
//
this.AbsoluteAddress.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.AbsoluteAddress.Font = new System.Drawing.Font("Consolas", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
this.AbsoluteAddress.Location = new System.Drawing.Point(235, 360);
this.AbsoluteAddress.Name = "AbsoluteAddress";
this.AbsoluteAddress.ReadOnly = true;
this.AbsoluteAddress.Size = new System.Drawing.Size(119, 22);
this.AbsoluteAddress.TabIndex = 1;
this.AbsoluteAddress.Text = "0123456789ABCDEF";
//
// LabelAbsoluteAddress
//
this.LabelAbsoluteAddress.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.LabelAbsoluteAddress.AutoSize = true;
this.LabelAbsoluteAddress.Location = new System.Drawing.Point(69, 362);
this.LabelAbsoluteAddress.Name = "LabelAbsoluteAddress";
this.LabelAbsoluteAddress.Size = new System.Drawing.Size(160, 15);
this.LabelAbsoluteAddress.TabIndex = 2;
this.LabelAbsoluteAddress.Text = "Raid Block Absolute Address:";
//
// RaidBlockViewer
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(367, 391);
this.Controls.Add(this.LabelAbsoluteAddress);
this.Controls.Add(this.AbsoluteAddress);
this.Controls.Add(this.RAM);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "RaidBlockViewer";
this.Text = "RaidBlockViewer";
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private TextBox RAM;
private TextBox AbsoluteAddress;
private Label LabelAbsoluteAddress;
}
}
================================================
FILE: RaidCrawler.WinForms/SubForms/RaidBlockViewer.cs
================================================
namespace RaidCrawler.WinForms.SubForms;
public partial class RaidBlockViewer : Form
{
public RaidBlockViewer(byte[] data, ulong offset)
{
InitializeComponent();
AbsoluteAddress.Text = $"{offset:X8}";
RAM.Text = string.Join(" ", data.Select(bytes => $"{bytes:X2}"));
}
}
================================================
FILE: RaidCrawler.WinForms/SubForms/RaidBlockViewer.resx
================================================
text/microsoft-resx
2.0
System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAAMMOAADDDgAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUhLQAAAAAAVF1mFHyD
iT1zeoE5UFdgHycwOg0CCBAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIG
CgMXISwKS1BZGHZ9gzF4f4VCVl5nIjtFTgNCTFUAAAAAAAAAAAAAAAAAAAAAAAAAAABYYGgAnKClAIOI
jhTLzdCX6Ovr5OTn59/P0tS+uby/nqWprYCVmJ5liI6UUXuBiERvdn47aXF5OWlxeThudX06eoGIQ4iO
lFCYnKJgqayxebu/wpnS1Na65ujp2ufp6eS7vsGvanF4MNbU1wBaY2sAAAAAAAAAAAAAAAAAAAAAAF9n
bgD///8A19jbS/r5+vTp1+T/5c/f//Tq8f/59vn/+Pj5/PX29vbv8vHt6evs5uXo6ODk5+fe5Ofn3uXo
6N/p6+vl7/Lx7fX39/X4+Pn7+ff5//Tq8f/kz9//6dfk//b29vqqr7N1AAAAAlpjawAAAAAAAAAAAAAA
AAAAAAAAYGhuAP///wDs7e5g/Pr7/bR6pv+YSIT/o1yS/7F0ov++jLL/y6PB/9Oxy//exNj/483e/+TN
3v/kzd7/5M3e/97E2P/TsMr/y6LB/76Msv+xdKL/o1yR/5hIg/+0eqb/+vn6/8fJzYEAAAABWWFpAAAA
AAAAAAAAAAAAAAAAAABYYGcA////APDw8VH9+/z6tX2m/5NAfv+UQX//k0B+/5NAfv+TQH7/lUOA/5dG
gv+XRoL/lkWB/5ZFgf+XRoL/lkaC/5VCgP+TQH7/k0B+/5NAfv+UQX//k0B+/7V8p//6+fr9xcfKcv//
/wBYYGgAAAAAAAAAAAAAAAAAAAAAAF1lbQD///8A7O3tQ/38/fS7h67/kj59/5VCf/+VQ4D/lUOA/5VD
gP+VQ4D/lEKA/6Rekv+9irD/vYqw/6Nekv+UQn//lUOA/5VDgP+VQ4D/lUOA/5VCf/+SPn3/u4au//n5
+fq8wMJj////AFlhaQAAAAAAAAAAAAAAAAAAAAAAbHF5APn5+QDl5eY1/f797dGuyf+jXJL/nVGK/5hJ
hP+WRYH/lUOA/5RAf/+ydqP/7uHr//Lo8P/y6O//7uHq/7J2o/+TQH7/lUOA/5ZEgf+YSIP/nE+I/6JY
j//RrMj/9/j49q+zt1b///8AWWFpAAAAAAAAAAAAAAAAAAAAAABaX2kA8fHyAOHi5Cj9/f3m+vb5//Lo
8P/s3ej/5M/e/9zB1f/Wts7/0q/J/+/i6//dxNf/pF6T/6Rek//dw9f/7uHr/9GtyP/Us8z/2r7T/+PN
3f/q2ub/8ebu//r2+f/29vfwp6uvReTk5gD///8A////AAAAAAAAAAAAAAAAAHp9hQDk5eYA2tvdHvz9
/dvew9f/uIKr/8aau//RrMj/2bvR/9/G2f/o1uP/+/j6/7V9qP+SPn3/kj59/7V9qP/7+Pr/6Nbj/9/H
2f/avtP/07HL/8ievv+6ha3/38bZ//L09OicoaU5xMbJAH6EiwAAAAAAAAAAAAAAAAAAAAAAjI+VANTX
2ADMz9AV+/38ztq+0/+UQn//k0B+/5RCf/+WRIH/lkWB/6Nbkf/v4uz/yqHA/5ZEgf+WRIH/yqHA/+/i
7P+iW5H/lkWB/5ZEgf+UQn//k0B+/5RCf//bvtT/7/Hx35CUmS2hpaoAV19nAAAAAAAAAAAAAAAAAAAA
AAAAAAAAv8LGAMHEyAv7/fy/4svc/5dHg/+VQ4D/lUOA/5VDgP+VQoD/lUOA/8ecvP/27/T/2r/T/9q/
0//27/X/x529/5VDgP+VQoD/lUOA/5VDgP+VQ4D/l0eD/+LL3P/t7+/UfoKIIoKHjQCPl58AAAAAAAAA
AAAAAAAAAAAAAAAAAACws7YAoqapBvn7+rHm0uH/mkuG/5VCgP+VQ4D/lUKA/5lKhv+YSYT/mUmE/76M
sv/fxtn/38bZ/76Msv+ZSYT/mEiE/5lKhf+VQoD/lUOA/5VCgP+aS4b/5tLh/+jq6shvdXwYb3R7AImR
mQAAAAAAAAAAAAAAAAAAAAAAAAAAAKOmqQBYW2AD9/j3oe3f6f+eU4v/lEJ//5VDgP+WRYL/zabE/76M
sv+TQH7/lEF//5dGgv+XRoL/lEF//5NAfv++jLH/zabD/5ZFgv+VQ4D/lEJ//55Ti//u3+r/3+LjvFdc
ZRJqb3cAX2VqAAAAAAAAAAAAAAAAAAAAAAAAAAAAeH6EAP///wD2+PeO8+nw/6JZj/+UQn//lEF//7N4
pf/69vn/38fZ/5hIhP+VQ4D/lUOA/5VDgP+VQ4D/mEiE/9/H2f/69vn/s3il/5RBf/+UQn//olmP//Pp
8P/b3t+sNj9JDFpiagB+gIgAAAAAAAAAAAAAAAAAAAAAAAAAAABgZW4A////APb393317fP/pmCV/5NA
fv+eU4z/5dLh//////z17fP/p2OW/5RBf/+VQ4D/lUOA/5RBf/+nYpb/9e3z//////3l0uD/nlOM/5NA
fv+mX5P/9e3z/9bZ25sABxUGTVZeAJygqQAAAAAAAAAAAAAAAAAAAAAAAAAAAHN3fwD///8A8fHxa/n1
+P+tbp7/lEF//8qiwP/9/f308/T0pf79/vLAkLT/k0B+/5VDgP+VQ4D/k0B+/8CQtP/8/Pz27Oztrf79
/vHKocD/lEF//65unv/49Pf/zc/SiwAAAANZYWkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAV15mAP//
/wDv8PBU/Pv8+7N5pf+tbZ3/9e70//X29qjc3t8l////0NvA1P+XRoL/lUOA/5VDgP+XRoL/3MDV//f5
+Ny+wcMw////nfXu9P+tbZ3/tHqm//r5+v7Exsl1AAAAAFlgaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AABgZm4A////AO/v8DT+/v7q4Mja/+jX5P/8/fze3+LjM////wD9/v6Z8OXu/6JZkP+UQn//lEF//6JZ
j//x5u7/6+3tqzlBSgn7+/sr////2ejX5P/gyNr/+vv778THyUn///8AWmJqAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAACwuNgD///8A2NrbBvz8/Hr////h/v7+1vHx81sAEBwB////APf4+Fr7+fv7tn6o/5NA
fv+TQH7/tn6p//v5+v3X2dtxAAAAAdDZ3AD6/v5U/v//1f///+L19fWBr7K2Cenq7ABeZWwAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4+fkA9vb2Bfn6+iH3+Pgb29veAr29vwD///8A7u/xKP//
/+LQrcf/lEKA/5VCgP/Rrcj/+fv66r/CxTn///8Av8PGAPT39wL6+/sa9/j4Id/g4Abx8fEAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOvr
7ADk5OUI/v//sera5v+cUIn/nFCJ/+ra5v/x8/O/jpOYE6iqrgCEjJQAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAjo+RAP///wD4+fpq+vf6/rJ2o/+ydqP/+vf5/9/h4oAAAAACVFlhAIiPlwAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAA+fn7APb2+CL////Y59Xj/+fV4//6+/veyMvNMP///wBYXmcAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADp6eoAHR0lAPz8/F7////b/v7+3PHy82Q2QkwC////AGFp
cQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOPj5gAAAAAA9PT1A/v7+x/5+fkf0dLVBAAA
AACvsbYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAA//////////////////////gP+A/wAAAP8AAAB/AAAAfwAAAP8AAAD/AA
AA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/4AAAP+AAAD/gAAA/4AAAf+BAAH/gQBB/8MAw///AP///4
D///+B////wf///8P/////////////////8=
================================================
FILE: RaidCrawler.WinForms/SubForms/RewardsView.Designer.cs
================================================
namespace RaidCrawler.WinForms.SubForms
{
partial class RewardsView
{
///
/// Required designer variable.
///
private System.ComponentModel.IContainer components = null;
///
/// Clean up any resources being used.
///
/// true if managed resources should be disposed; otherwise, false.
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
private void InitializeComponent()
{
this.SuspendLayout();
//
// RewardsView
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(275, 32);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
this.Name = "RewardsView";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "RewardsView";
this.ResumeLayout(false);
}
#endregion
}
}
================================================
FILE: RaidCrawler.WinForms/SubForms/RewardsView.cs
================================================
using PKHeX.Drawing;
using RaidCrawler.Core.Structures;
namespace RaidCrawler.WinForms.SubForms;
public partial class RewardsView : Form
{
public RewardsView(IReadOnlyList itemStrings, IReadOnlyList moveStrings, IReadOnlyList<(int, int, int)> rewards)
{
InitializeComponent();
var rare = PKHeX.Drawing.PokeSprite.Properties.Resources.rare_icon;
var pictures = new PictureBox[rewards.Count];
var labels = new Label[rewards.Count];
for (int i = 0; i < rewards.Count; i++)
{
var pb = pictures[i] = new PictureBox
{
Size = new Size(24, 24),
Location = new Point(12, (i * 36) + 12),
SizeMode = PictureBoxSizeMode.CenterImage,
};
var label = labels[i] = new Label();
var reward = rewards[i];
var item = reward.Item1 switch
{
10000 => "Material",
20000 => "Tera Shard",
_ => Rewards.IsTM(reward.Item1)
? Rewards.GetNameTM(reward.Item1, itemStrings, moveStrings, Rewards.TMIndexes)
: itemStrings[reward.Item1],
};
var subject = reward.Item3 switch
{
1 => "(Host)",
2 => "(Client)",
3 => "(Once)",
_ => string.Empty,
};
var img = GetItem(rewards, i);
if (img != null && Rewards.RareRewards.Contains(reward.Item1))
img = ImageUtil.LayerImage(img, rare, 0, 0, 0.7);
pb.Image = img;
label.Text = $"{item} x{reward.Item2} {subject}".TrimEnd();
label.Location = new Point(60, 12 + (i * (pb.Size.Height + 12)));
label.Size = new Size(ClientSize.Width - 60 - 10, label.Height);
Controls.Add(pb);
Controls.Add(label);
}
ClientSize = ClientSize with { Height = 12 + (rewards.Count * (pictures[0].Size.Height + 12)) };
}
private static Image? GetItem(IReadOnlyList<(int, int, int)> rewards, int i)
{
var (rc, item) = GetItemResourceName(rewards[i].Item1);
var manager = rc
? Properties.Resources.ResourceManager
: PKHeX.Drawing.PokeSprite.Properties.Resources.ResourceManager;
return (Image?)manager.GetObject(item);
}
private static (bool rc, string item) GetItemResourceName(int id) => id switch
{
// Handling for sprites that pkhex doesn't have
1904 => (true, "item_1904"),
1905 => (true, "item_1905"),
1906 => (true, "item_1906"),
1907 => (true, "item_1907"),
1908 => (true, "item_1908"),
(>= 1956 and <= 2159) or (>= 2438 and <= 2478) => (true, "material"),
10000 => (true, "material"),
// pkhex can give us the sprites
20000 => (false, "aitem_1862"),
_ => (false, Rewards.IsTM(id) ? "aitem_tm" : $"aitem_{id}"),
};
}
================================================
FILE: RaidCrawler.WinForms/SubForms/RewardsView.resx
================================================
text/microsoft-resx
2.0
System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
================================================
FILE: RaidCrawler.WinForms/SubForms/TeraRaidView.Designer.cs
================================================
namespace RaidCrawler.WinForms.SubForms
{
partial class TeraRaidView
{
///
/// Required designer variable.
///
private System.ComponentModel.IContainer components = null;
///
/// Clean up any resources being used.
///
/// true if managed resources should be disposed; otherwise, false.
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TeraRaidView));
Map = new PictureBox();
Area = new TextBox();
picBoxPokemon = new PictureBox();
Difficulty = new Label();
Species = new Label();
Shiny = new Label();
Gender = new Label();
TeraType = new PictureBox();
Ability = new Label();
Nature = new Label();
groupBox1 = new GroupBox();
label1 = new Label();
labelAbility = new Label();
groupBox2 = new GroupBox();
labelSpeed = new Label();
SPEED = new Label();
labelSpD = new Label();
SPD = new Label();
labelSpA = new Label();
SPA = new Label();
labelDef = new Label();
DEF = new Label();
labelAtk = new Label();
ATK = new Label();
labelHP = new Label();
HP = new Label();
groupBox3 = new GroupBox();
Move8 = new Label();
Move6 = new Label();
Move4 = new Label();
Move7 = new Label();
Move5 = new Label();
Move3 = new Label();
Move1 = new Label();
Move2 = new Label();
picShinyAlert = new PictureBox();
pictureBox1 = new PictureBox();
picBottleCap = new PictureBox();
picSaltyHerba = new PictureBox();
picSpicyHerba = new PictureBox();
picSourHerba = new PictureBox();
picSweetHerba = new PictureBox();
picAbilityPatch = new PictureBox();
labelAbilityPatch = new Label();
textAbilityPatch = new Label();
labelSweetHerba = new Label();
textSweetHerba = new Label();
labelSaltyHerba = new Label();
textSaltyHerba = new Label();
labelBottleCap = new Label();
textBottleCap = new Label();
labelSourHerba = new Label();
textSourHerba = new Label();
labelSpicyHerba = new Label();
textSpicyHerba = new Label();
textSearchTime = new Label();
picAbilityCapsule = new PictureBox();
picBitterHerba = new PictureBox();
labelBitterHerba = new Label();
textBitterHerba = new Label();
labelAbilityCapsule = new Label();
textAbilityCapsule = new Label();
DaySkips = new Label();
((System.ComponentModel.ISupportInitialize)Map).BeginInit();
((System.ComponentModel.ISupportInitialize)picBoxPokemon).BeginInit();
((System.ComponentModel.ISupportInitialize)TeraType).BeginInit();
groupBox1.SuspendLayout();
groupBox2.SuspendLayout();
groupBox3.SuspendLayout();
((System.ComponentModel.ISupportInitialize)picShinyAlert).BeginInit();
((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit();
((System.ComponentModel.ISupportInitialize)picBottleCap).BeginInit();
((System.ComponentModel.ISupportInitialize)picSaltyHerba).BeginInit();
((System.ComponentModel.ISupportInitialize)picSpicyHerba).BeginInit();
((System.ComponentModel.ISupportInitialize)picSourHerba).BeginInit();
((System.ComponentModel.ISupportInitialize)picSweetHerba).BeginInit();
((System.ComponentModel.ISupportInitialize)picAbilityPatch).BeginInit();
((System.ComponentModel.ISupportInitialize)picAbilityCapsule).BeginInit();
((System.ComponentModel.ISupportInitialize)picBitterHerba).BeginInit();
SuspendLayout();
//
// Map
//
Map.Location = new Point(564, 12);
Map.Name = "Map";
Map.Size = new Size(384, 384);
Map.SizeMode = PictureBoxSizeMode.StretchImage;
Map.TabIndex = 64;
Map.TabStop = false;
//
// Area
//
Area.BackColor = Color.FromArgb(0, 5, 25);
Area.BorderStyle = BorderStyle.None;
Area.Font = new Font("Segoe UI", 14F, FontStyle.Regular, GraphicsUnit.Point);
Area.ForeColor = SystemColors.GradientInactiveCaption;
Area.Location = new Point(564, 12);
Area.Name = "Area";
Area.PlaceholderText = "Area";
Area.Size = new Size(384, 25);
Area.TabIndex = 65;
Area.TextAlign = HorizontalAlignment.Center;
//
// picBoxPokemon
//
picBoxPokemon.Location = new Point(396, 12);
picBoxPokemon.Name = "picBoxPokemon";
picBoxPokemon.Size = new Size(128, 128);
picBoxPokemon.SizeMode = PictureBoxSizeMode.Zoom;
picBoxPokemon.TabIndex = 112;
picBoxPokemon.TabStop = false;
//
// Difficulty
//
Difficulty.BackColor = Color.FromArgb(0, 5, 25);
Difficulty.Font = new Font("Segoe UI Emoji", 16F, FontStyle.Bold, GraphicsUnit.Point);
Difficulty.ForeColor = Color.LemonChiffon;
Difficulty.Location = new Point(64, 143);
Difficulty.Name = "Difficulty";
Difficulty.Size = new Size(244, 29);
Difficulty.TabIndex = 114;
Difficulty.Text = "⭐⭐⭐⭐⭐⭐⭐";
Difficulty.TextAlign = ContentAlignment.BottomCenter;
//
// Species
//
Species.BackColor = Color.FromArgb(0, 5, 25);
Species.Font = new Font("Segoe UI", 32F, FontStyle.Bold, GraphicsUnit.Point);
Species.ForeColor = SystemColors.ControlLightLight;
Species.Location = new Point(12, 32);
Species.Name = "Species";
Species.Size = new Size(348, 57);
Species.TabIndex = 115;
Species.Text = "Species";
Species.TextAlign = ContentAlignment.BottomCenter;
//
// Shiny
//
Shiny.AutoSize = true;
Shiny.Font = new Font("Consolas", 16F, FontStyle.Bold, GraphicsUnit.Point);
Shiny.ForeColor = Color.Gold;
Shiny.Location = new Point(110, 20);
Shiny.Name = "Shiny";
Shiny.Size = new Size(148, 26);
Shiny.TabIndex = 116;
Shiny.Text = "✨ Shiny ✨";
Shiny.TextAlign = ContentAlignment.MiddleCenter;
Shiny.Visible = false;
//
// Gender
//
Gender.BackColor = Color.FromArgb(0, 5, 25);
Gender.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
Gender.ForeColor = SystemColors.ActiveCaption;
Gender.Location = new Point(406, 146);
Gender.Name = "Gender";
Gender.Size = new Size(109, 22);
Gender.TabIndex = 118;
Gender.Text = "Gender";
Gender.TextAlign = ContentAlignment.BottomCenter;
//
// TeraType
//
TeraType.Location = new Point(86, 92);
TeraType.Name = "TeraType";
TeraType.Size = new Size(200, 48);
TeraType.SizeMode = PictureBoxSizeMode.StretchImage;
TeraType.TabIndex = 120;
TeraType.TabStop = false;
//
// Ability
//
Ability.BackColor = Color.FromArgb(0, 5, 25);
Ability.Font = new Font("Segoe UI", 14F, FontStyle.Bold, GraphicsUnit.Point);
Ability.ForeColor = SystemColors.ActiveCaption;
Ability.Location = new Point(72, 22);
Ability.Name = "Ability";
Ability.Size = new Size(200, 25);
Ability.TabIndex = 121;
Ability.Text = "Ability";
//
// Nature
//
Nature.BackColor = Color.FromArgb(0, 5, 25);
Nature.Font = new Font("Segoe UI", 14F, FontStyle.Bold, GraphicsUnit.Point);
Nature.ForeColor = SystemColors.ActiveCaption;
Nature.Location = new Point(328, 22);
Nature.Name = "Nature";
Nature.Size = new Size(200, 25);
Nature.TabIndex = 122;
Nature.Text = "Nature";
//
// groupBox1
//
groupBox1.Controls.Add(label1);
groupBox1.Controls.Add(labelAbility);
groupBox1.Controls.Add(Ability);
groupBox1.Controls.Add(Nature);
groupBox1.ForeColor = Color.DarkGray;
groupBox1.Location = new Point(12, 191);
groupBox1.Name = "groupBox1";
groupBox1.Size = new Size(546, 65);
groupBox1.TabIndex = 123;
groupBox1.TabStop = false;
groupBox1.Text = "Details";
//
// label1
//
label1.AutoSize = true;
label1.ForeColor = Color.Silver;
label1.Location = new Point(278, 29);
label1.Name = "label1";
label1.Size = new Size(46, 15);
label1.TabIndex = 124;
label1.Text = "Nature:";
label1.TextAlign = ContentAlignment.MiddleRight;
//
// labelAbility
//
labelAbility.AutoSize = true;
labelAbility.ForeColor = Color.Silver;
labelAbility.Location = new Point(22, 29);
labelAbility.Name = "labelAbility";
labelAbility.Size = new Size(44, 15);
labelAbility.TabIndex = 123;
labelAbility.Text = "Ability:";
labelAbility.TextAlign = ContentAlignment.MiddleRight;
//
// groupBox2
//
groupBox2.Controls.Add(labelSpeed);
groupBox2.Controls.Add(SPEED);
groupBox2.Controls.Add(labelSpD);
groupBox2.Controls.Add(SPD);
groupBox2.Controls.Add(labelSpA);
groupBox2.Controls.Add(SPA);
groupBox2.Controls.Add(labelDef);
groupBox2.Controls.Add(DEF);
groupBox2.Controls.Add(labelAtk);
groupBox2.Controls.Add(ATK);
groupBox2.Controls.Add(labelHP);
groupBox2.Controls.Add(HP);
groupBox2.ForeColor = Color.DarkGray;
groupBox2.Location = new Point(12, 262);
groupBox2.Name = "groupBox2";
groupBox2.Size = new Size(546, 65);
groupBox2.TabIndex = 124;
groupBox2.TabStop = false;
groupBox2.Text = "IVs";
//
// labelSpeed
//
labelSpeed.AutoSize = true;
labelSpeed.ForeColor = Color.Silver;
labelSpeed.Location = new Point(407, 29);
labelSpeed.Name = "labelSpeed";
labelSpeed.Size = new Size(42, 15);
labelSpeed.TabIndex = 133;
labelSpeed.Text = "Speed:";
labelSpeed.TextAlign = ContentAlignment.MiddleRight;
//
// SPEED
//
SPEED.BackColor = Color.FromArgb(0, 5, 25);
SPEED.Font = new Font("Segoe UI", 14F, FontStyle.Bold, GraphicsUnit.Point);
SPEED.ForeColor = Color.White;
SPEED.Location = new Point(449, 22);
SPEED.Name = "SPEED";
SPEED.Size = new Size(36, 25);
SPEED.TabIndex = 132;
SPEED.Text = "00";
SPEED.TextAlign = ContentAlignment.BottomCenter;
//
// labelSpD
//
labelSpD.AutoSize = true;
labelSpD.ForeColor = Color.Silver;
labelSpD.Location = new Point(336, 29);
labelSpD.Name = "labelSpD";
labelSpD.Size = new Size(31, 15);
labelSpD.TabIndex = 131;
labelSpD.Text = "SpD:";
labelSpD.TextAlign = ContentAlignment.MiddleRight;
//
// SPD
//
SPD.BackColor = Color.FromArgb(0, 5, 25);
SPD.Font = new Font("Segoe UI", 14F, FontStyle.Bold, GraphicsUnit.Point);
SPD.ForeColor = Color.White;
SPD.Location = new Point(367, 22);
SPD.Name = "SPD";
SPD.Size = new Size(36, 25);
SPD.TabIndex = 130;
SPD.Text = "00";
SPD.TextAlign = ContentAlignment.BottomCenter;
//
// labelSpA
//
labelSpA.AutoSize = true;
labelSpA.ForeColor = Color.Silver;
labelSpA.Location = new Point(265, 29);
labelSpA.Name = "labelSpA";
labelSpA.Size = new Size(31, 15);
labelSpA.TabIndex = 129;
labelSpA.Text = "SpA:";
labelSpA.TextAlign = ContentAlignment.MiddleRight;
//
// SPA
//
SPA.BackColor = Color.FromArgb(0, 5, 25);
SPA.Font = new Font("Segoe UI", 14F, FontStyle.Bold, GraphicsUnit.Point);
SPA.ForeColor = Color.White;
SPA.Location = new Point(297, 22);
SPA.Name = "SPA";
SPA.Size = new Size(36, 25);
SPA.TabIndex = 128;
SPA.Text = "00";
SPA.TextAlign = ContentAlignment.BottomCenter;
//
// labelDef
//
labelDef.AutoSize = true;
labelDef.ForeColor = Color.Silver;
labelDef.Location = new Point(197, 29);
labelDef.Name = "labelDef";
labelDef.Size = new Size(28, 15);
labelDef.TabIndex = 127;
labelDef.Text = "Def:";
labelDef.TextAlign = ContentAlignment.MiddleRight;
//
// DEF
//
DEF.BackColor = Color.FromArgb(0, 5, 25);
DEF.Font = new Font("Segoe UI", 14F, FontStyle.Bold, GraphicsUnit.Point);
DEF.ForeColor = Color.White;
DEF.Location = new Point(226, 22);
DEF.Name = "DEF";
DEF.Size = new Size(36, 25);
DEF.TabIndex = 126;
DEF.Text = "00";
DEF.TextAlign = ContentAlignment.BottomCenter;
//
// labelAtk
//
labelAtk.AutoSize = true;
labelAtk.ForeColor = Color.Silver;
labelAtk.Location = new Point(129, 29);
labelAtk.Name = "labelAtk";
labelAtk.Size = new Size(28, 15);
labelAtk.TabIndex = 125;
labelAtk.Text = "Atk:";
labelAtk.TextAlign = ContentAlignment.MiddleRight;
//
// ATK
//
ATK.BackColor = Color.FromArgb(0, 5, 25);
ATK.Font = new Font("Segoe UI", 14F, FontStyle.Bold, GraphicsUnit.Point);
ATK.ForeColor = Color.White;
ATK.Location = new Point(158, 22);
ATK.Name = "ATK";
ATK.Size = new Size(36, 25);
ATK.TabIndex = 124;
ATK.Text = "00";
ATK.TextAlign = ContentAlignment.BottomCenter;
//
// labelHP
//
labelHP.AutoSize = true;
labelHP.ForeColor = Color.Silver;
labelHP.Location = new Point(63, 29);
labelHP.Name = "labelHP";
labelHP.Size = new Size(26, 15);
labelHP.TabIndex = 123;
labelHP.Text = "HP:";
labelHP.TextAlign = ContentAlignment.MiddleRight;
//
// HP
//
HP.BackColor = Color.FromArgb(0, 5, 25);
HP.Font = new Font("Segoe UI", 14F, FontStyle.Bold, GraphicsUnit.Point);
HP.ForeColor = Color.White;
HP.Location = new Point(90, 22);
HP.Name = "HP";
HP.Size = new Size(36, 25);
HP.TabIndex = 121;
HP.Text = "00";
HP.TextAlign = ContentAlignment.BottomCenter;
//
// groupBox3
//
groupBox3.Controls.Add(Move8);
groupBox3.Controls.Add(Move6);
groupBox3.Controls.Add(Move4);
groupBox3.Controls.Add(Move7);
groupBox3.Controls.Add(Move5);
groupBox3.Controls.Add(Move3);
groupBox3.Controls.Add(Move1);
groupBox3.Controls.Add(Move2);
groupBox3.ForeColor = Color.DarkGray;
groupBox3.Location = new Point(12, 333);
groupBox3.Name = "groupBox3";
groupBox3.Size = new Size(546, 157);
groupBox3.TabIndex = 125;
groupBox3.TabStop = false;
groupBox3.Text = "Raid Moveset";
//
// Move8
//
Move8.BackColor = Color.FromArgb(0, 5, 25);
Move8.Font = new Font("Segoe UI", 14F, FontStyle.Bold, GraphicsUnit.Point);
Move8.ForeColor = Color.LightSlateGray;
Move8.Location = new Point(278, 115);
Move8.Name = "Move8";
Move8.Size = new Size(200, 25);
Move8.TabIndex = 128;
Move8.Text = "Move8";
//
// Move6
//
Move6.BackColor = Color.FromArgb(0, 5, 25);
Move6.Font = new Font("Segoe UI", 14F, FontStyle.Bold, GraphicsUnit.Point);
Move6.ForeColor = Color.LightSlateGray;
Move6.Location = new Point(278, 84);
Move6.Name = "Move6";
Move6.Size = new Size(200, 25);
Move6.TabIndex = 127;
Move6.Text = "Move6";
//
// Move4
//
Move4.BackColor = Color.FromArgb(0, 5, 25);
Move4.Font = new Font("Segoe UI", 14F, FontStyle.Bold, GraphicsUnit.Point);
Move4.ForeColor = SystemColors.ActiveCaption;
Move4.Location = new Point(278, 53);
Move4.Name = "Move4";
Move4.Size = new Size(200, 25);
Move4.TabIndex = 126;
Move4.Text = "Move4";
//
// Move7
//
Move7.BackColor = Color.FromArgb(0, 5, 25);
Move7.Font = new Font("Segoe UI", 14F, FontStyle.Bold, GraphicsUnit.Point);
Move7.ForeColor = Color.LightSlateGray;
Move7.Location = new Point(22, 115);
Move7.Name = "Move7";
Move7.Size = new Size(200, 25);
Move7.TabIndex = 125;
Move7.Text = "Move7";
//
// Move5
//
Move5.BackColor = Color.FromArgb(0, 5, 25);
Move5.Font = new Font("Segoe UI", 14F, FontStyle.Bold, GraphicsUnit.Point);
Move5.ForeColor = Color.LightSlateGray;
Move5.Location = new Point(22, 84);
Move5.Name = "Move5";
Move5.Size = new Size(200, 25);
Move5.TabIndex = 124;
Move5.Text = "Move5";
//
// Move3
//
Move3.BackColor = Color.FromArgb(0, 5, 25);
Move3.Font = new Font("Segoe UI", 14F, FontStyle.Bold, GraphicsUnit.Point);
Move3.ForeColor = SystemColors.ActiveCaption;
Move3.Location = new Point(22, 53);
Move3.Name = "Move3";
Move3.Size = new Size(200, 25);
Move3.TabIndex = 123;
Move3.Text = "Move3";
//
// Move1
//
Move1.BackColor = Color.FromArgb(0, 5, 25);
Move1.Font = new Font("Segoe UI", 14F, FontStyle.Bold, GraphicsUnit.Point);
Move1.ForeColor = SystemColors.ActiveCaption;
Move1.Location = new Point(22, 22);
Move1.Name = "Move1";
Move1.Size = new Size(200, 25);
Move1.TabIndex = 121;
Move1.Text = "Move1";
//
// Move2
//
Move2.BackColor = Color.FromArgb(0, 5, 25);
Move2.Font = new Font("Segoe UI", 14F, FontStyle.Bold, GraphicsUnit.Point);
Move2.ForeColor = SystemColors.ActiveCaption;
Move2.Location = new Point(278, 22);
Move2.Name = "Move2";
Move2.Size = new Size(200, 25);
Move2.TabIndex = 122;
Move2.Text = "Move2";
//
// picShinyAlert
//
picShinyAlert.BackColor = Color.Transparent;
picShinyAlert.Enabled = false;
picShinyAlert.Image = (Image)resources.GetObject("picShinyAlert.Image");
picShinyAlert.Location = new Point(300, 92);
picShinyAlert.Name = "picShinyAlert";
picShinyAlert.Size = new Size(79, 77);
picShinyAlert.SizeMode = PictureBoxSizeMode.Zoom;
picShinyAlert.TabIndex = 160;
picShinyAlert.TabStop = false;
//
// pictureBox1
//
pictureBox1.BackColor = Color.Transparent;
pictureBox1.Location = new Point(12, 501);
pictureBox1.Name = "pictureBox1";
pictureBox1.Size = new Size(546, 27);
pictureBox1.TabIndex = 126;
pictureBox1.TabStop = false;
//
// picBottleCap
//
picBottleCap.Image = Properties.Resources.item_0795_hires;
picBottleCap.Location = new Point(560, 448);
picBottleCap.Name = "picBottleCap";
picBottleCap.Size = new Size(48, 48);
picBottleCap.SizeMode = PictureBoxSizeMode.StretchImage;
picBottleCap.TabIndex = 138;
picBottleCap.TabStop = false;
//
// picSaltyHerba
//
picSaltyHerba.Image = Properties.Resources.item_1905_hires;
picSaltyHerba.Location = new Point(857, 402);
picSaltyHerba.Name = "picSaltyHerba";
picSaltyHerba.Size = new Size(48, 48);
picSaltyHerba.SizeMode = PictureBoxSizeMode.StretchImage;
picSaltyHerba.TabIndex = 137;
picSaltyHerba.TabStop = false;
//
// picSpicyHerba
//
picSpicyHerba.Image = Properties.Resources.item_1908_hires;
picSpicyHerba.Location = new Point(857, 448);
picSpicyHerba.Name = "picSpicyHerba";
picSpicyHerba.Size = new Size(48, 48);
picSpicyHerba.SizeMode = PictureBoxSizeMode.StretchImage;
picSpicyHerba.TabIndex = 131;
picSpicyHerba.TabStop = false;
//
// picSourHerba
//
picSourHerba.Image = Properties.Resources.item_1906_hires;
picSourHerba.Location = new Point(759, 448);
picSourHerba.Name = "picSourHerba";
picSourHerba.Size = new Size(48, 48);
picSourHerba.SizeMode = PictureBoxSizeMode.StretchImage;
picSourHerba.TabIndex = 130;
picSourHerba.TabStop = false;
//
// picSweetHerba
//
picSweetHerba.Image = Properties.Resources.item_1904_hires;
picSweetHerba.Location = new Point(759, 402);
picSweetHerba.Name = "picSweetHerba";
picSweetHerba.Size = new Size(48, 48);
picSweetHerba.SizeMode = PictureBoxSizeMode.StretchImage;
picSweetHerba.TabIndex = 129;
picSweetHerba.TabStop = false;
//
// picAbilityPatch
//
picAbilityPatch.Image = Properties.Resources.item_1606_hires;
picAbilityPatch.Location = new Point(560, 402);
picAbilityPatch.Name = "picAbilityPatch";
picAbilityPatch.Size = new Size(48, 48);
picAbilityPatch.SizeMode = PictureBoxSizeMode.StretchImage;
picAbilityPatch.TabIndex = 128;
picAbilityPatch.TabStop = false;
//
// labelAbilityPatch
//
labelAbilityPatch.AutoSize = true;
labelAbilityPatch.ForeColor = Color.Silver;
labelAbilityPatch.Location = new Point(614, 404);
labelAbilityPatch.Name = "labelAbilityPatch";
labelAbilityPatch.Size = new Size(37, 15);
labelAbilityPatch.TabIndex = 135;
labelAbilityPatch.Text = "Patch";
labelAbilityPatch.TextAlign = ContentAlignment.MiddleRight;
//
// textAbilityPatch
//
textAbilityPatch.BackColor = Color.FromArgb(0, 5, 25);
textAbilityPatch.Font = new Font("Segoe UI", 14F, FontStyle.Bold, GraphicsUnit.Point);
textAbilityPatch.ForeColor = Color.White;
textAbilityPatch.Location = new Point(616, 419);
textAbilityPatch.Name = "textAbilityPatch";
textAbilityPatch.Size = new Size(34, 25);
textAbilityPatch.TabIndex = 134;
textAbilityPatch.Text = "00";
textAbilityPatch.TextAlign = ContentAlignment.BottomCenter;
textAbilityPatch.TextChanged += Rewards_TextChanged;
//
// labelSweetHerba
//
labelSweetHerba.AutoSize = true;
labelSweetHerba.ForeColor = Color.Silver;
labelSweetHerba.Location = new Point(813, 404);
labelSweetHerba.Name = "labelSweetHerba";
labelSweetHerba.Size = new Size(38, 15);
labelSweetHerba.TabIndex = 143;
labelSweetHerba.Text = "Sweet";
labelSweetHerba.TextAlign = ContentAlignment.MiddleRight;
//
// textSweetHerba
//
textSweetHerba.BackColor = Color.FromArgb(0, 5, 25);
textSweetHerba.Font = new Font("Segoe UI", 14F, FontStyle.Bold, GraphicsUnit.Point);
textSweetHerba.ForeColor = Color.White;
textSweetHerba.Location = new Point(817, 419);
textSweetHerba.Name = "textSweetHerba";
textSweetHerba.Size = new Size(34, 25);
textSweetHerba.TabIndex = 142;
textSweetHerba.Text = "00";
textSweetHerba.TextAlign = ContentAlignment.BottomCenter;
textSweetHerba.TextChanged += Rewards_TextChanged;
//
// labelSaltyHerba
//
labelSaltyHerba.AutoSize = true;
labelSaltyHerba.ForeColor = Color.Silver;
labelSaltyHerba.Location = new Point(910, 404);
labelSaltyHerba.Name = "labelSaltyHerba";
labelSaltyHerba.Size = new Size(32, 15);
labelSaltyHerba.TabIndex = 145;
labelSaltyHerba.Text = "Salty";
labelSaltyHerba.TextAlign = ContentAlignment.MiddleRight;
//
// textSaltyHerba
//
textSaltyHerba.BackColor = Color.FromArgb(0, 5, 25);
textSaltyHerba.Font = new Font("Segoe UI", 14F, FontStyle.Bold, GraphicsUnit.Point);
textSaltyHerba.ForeColor = Color.White;
textSaltyHerba.Location = new Point(911, 419);
textSaltyHerba.Name = "textSaltyHerba";
textSaltyHerba.Size = new Size(37, 25);
textSaltyHerba.TabIndex = 144;
textSaltyHerba.Text = "00";
textSaltyHerba.TextAlign = ContentAlignment.BottomCenter;
textSaltyHerba.TextChanged += Rewards_TextChanged;
//
// labelBottleCap
//
labelBottleCap.AutoSize = true;
labelBottleCap.ForeColor = Color.Silver;
labelBottleCap.Location = new Point(618, 452);
labelBottleCap.Name = "labelBottleCap";
labelBottleCap.Size = new Size(28, 15);
labelBottleCap.TabIndex = 147;
labelBottleCap.Text = "Cap";
labelBottleCap.TextAlign = ContentAlignment.MiddleRight;
//
// textBottleCap
//
textBottleCap.BackColor = Color.FromArgb(0, 5, 25);
textBottleCap.Font = new Font("Segoe UI", 14F, FontStyle.Bold, GraphicsUnit.Point);
textBottleCap.ForeColor = Color.White;
textBottleCap.Location = new Point(614, 467);
textBottleCap.Name = "textBottleCap";
textBottleCap.Size = new Size(36, 25);
textBottleCap.TabIndex = 146;
textBottleCap.Text = "00";
textBottleCap.TextAlign = ContentAlignment.BottomCenter;
textBottleCap.TextChanged += Rewards_TextChanged;
//
// labelSourHerba
//
labelSourHerba.AutoSize = true;
labelSourHerba.ForeColor = Color.Silver;
labelSourHerba.Location = new Point(817, 452);
labelSourHerba.Name = "labelSourHerba";
labelSourHerba.Size = new Size(31, 15);
labelSourHerba.TabIndex = 149;
labelSourHerba.Text = "Sour";
labelSourHerba.TextAlign = ContentAlignment.MiddleRight;
//
// textSourHerba
//
textSourHerba.BackColor = Color.FromArgb(0, 5, 25);
textSourHerba.Font = new Font("Segoe UI", 14F, FontStyle.Bold, GraphicsUnit.Point);
textSourHerba.ForeColor = Color.White;
textSourHerba.Location = new Point(817, 467);
textSourHerba.Name = "textSourHerba";
textSourHerba.Size = new Size(34, 25);
textSourHerba.TabIndex = 148;
textSourHerba.Text = "00";
textSourHerba.TextAlign = ContentAlignment.BottomCenter;
textSourHerba.TextChanged += Rewards_TextChanged;
//
// labelSpicyHerba
//
labelSpicyHerba.AutoSize = true;
labelSpicyHerba.ForeColor = Color.Silver;
labelSpicyHerba.Location = new Point(908, 450);
labelSpicyHerba.Name = "labelSpicyHerba";
labelSpicyHerba.Size = new Size(35, 15);
labelSpicyHerba.TabIndex = 151;
labelSpicyHerba.Text = "Spicy";
labelSpicyHerba.TextAlign = ContentAlignment.MiddleRight;
//
// textSpicyHerba
//
textSpicyHerba.BackColor = Color.FromArgb(0, 5, 25);
textSpicyHerba.Font = new Font("Segoe UI", 14F, FontStyle.Bold, GraphicsUnit.Point);
textSpicyHerba.ForeColor = Color.White;
textSpicyHerba.Location = new Point(911, 467);
textSpicyHerba.Name = "textSpicyHerba";
textSpicyHerba.Size = new Size(37, 25);
textSpicyHerba.TabIndex = 150;
textSpicyHerba.Text = "00";
textSpicyHerba.TextAlign = ContentAlignment.BottomCenter;
textSpicyHerba.TextChanged += Rewards_TextChanged;
//
// textSearchTime
//
textSearchTime.BackColor = Color.FromArgb(0, 5, 25);
textSearchTime.Font = new Font("Segoe UI", 12F, FontStyle.Bold, GraphicsUnit.Point);
textSearchTime.ForeColor = Color.LightSlateGray;
textSearchTime.Location = new Point(840, 501);
textSearchTime.Name = "textSearchTime";
textSearchTime.Size = new Size(102, 25);
textSearchTime.TabIndex = 153;
textSearchTime.Text = "00:00:00:00";
textSearchTime.TextAlign = ContentAlignment.BottomCenter;
//
// picAbilityCapsule
//
picAbilityCapsule.Image = Properties.Resources.item_0645_hires;
picAbilityCapsule.Location = new Point(656, 402);
picAbilityCapsule.Name = "picAbilityCapsule";
picAbilityCapsule.Size = new Size(48, 48);
picAbilityCapsule.SizeMode = PictureBoxSizeMode.StretchImage;
picAbilityCapsule.TabIndex = 154;
picAbilityCapsule.TabStop = false;
//
// picBitterHerba
//
picBitterHerba.Image = Properties.Resources.item_1907_hires;
picBitterHerba.Location = new Point(656, 448);
picBitterHerba.Name = "picBitterHerba";
picBitterHerba.Size = new Size(48, 48);
picBitterHerba.SizeMode = PictureBoxSizeMode.StretchImage;
picBitterHerba.TabIndex = 155;
picBitterHerba.TabStop = false;
//
// labelBitterHerba
//
labelBitterHerba.AutoSize = true;
labelBitterHerba.ForeColor = Color.Silver;
labelBitterHerba.Location = new Point(713, 452);
labelBitterHerba.Name = "labelBitterHerba";
labelBitterHerba.Size = new Size(35, 15);
labelBitterHerba.TabIndex = 159;
labelBitterHerba.Text = "Bitter";
labelBitterHerba.TextAlign = ContentAlignment.MiddleRight;
//
// textBitterHerba
//
textBitterHerba.BackColor = Color.FromArgb(0, 5, 25);
textBitterHerba.Font = new Font("Segoe UI", 14F, FontStyle.Bold, GraphicsUnit.Point);
textBitterHerba.ForeColor = Color.White;
textBitterHerba.Location = new Point(714, 467);
textBitterHerba.Name = "textBitterHerba";
textBitterHerba.Size = new Size(39, 25);
textBitterHerba.TabIndex = 158;
textBitterHerba.Text = "00";
textBitterHerba.TextAlign = ContentAlignment.BottomCenter;
//
// labelAbilityCapsule
//
labelAbilityCapsule.AutoSize = true;
labelAbilityCapsule.ForeColor = Color.Silver;
labelAbilityCapsule.Location = new Point(707, 404);
labelAbilityCapsule.Name = "labelAbilityCapsule";
labelAbilityCapsule.Size = new Size(49, 15);
labelAbilityCapsule.TabIndex = 157;
labelAbilityCapsule.Text = "Capsule";
labelAbilityCapsule.TextAlign = ContentAlignment.MiddleRight;
//
// textAbilityCapsule
//
textAbilityCapsule.BackColor = Color.FromArgb(0, 5, 25);
textAbilityCapsule.Font = new Font("Segoe UI", 14F, FontStyle.Bold, GraphicsUnit.Point);
textAbilityCapsule.ForeColor = Color.White;
textAbilityCapsule.Location = new Point(715, 419);
textAbilityCapsule.Name = "textAbilityCapsule";
textAbilityCapsule.Size = new Size(38, 25);
textAbilityCapsule.TabIndex = 156;
textAbilityCapsule.Text = "00";
textAbilityCapsule.TextAlign = ContentAlignment.BottomCenter;
//
// DaySkips
//
DaySkips.Anchor = AnchorStyles.None;
DaySkips.AutoSize = true;
DaySkips.BackColor = Color.Transparent;
DaySkips.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
DaySkips.ForeColor = Color.LightSlateGray;
DaySkips.Location = new Point(618, 509);
DaySkips.Name = "DaySkips";
DaySkips.Size = new Size(141, 15);
DaySkips.TabIndex = 161;
DaySkips.Text = "Day Skip Successes 0 / 0";
DaySkips.TextAlign = ContentAlignment.MiddleCenter;
//
// TeraRaidView
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
BackColor = Color.FromArgb(0, 5, 25);
ClientSize = new Size(960, 540);
Controls.Add(DaySkips);
Controls.Add(labelBitterHerba);
Controls.Add(textBitterHerba);
Controls.Add(labelAbilityCapsule);
Controls.Add(textAbilityCapsule);
Controls.Add(picBitterHerba);
Controls.Add(picAbilityCapsule);
Controls.Add(textSearchTime);
Controls.Add(labelSpicyHerba);
Controls.Add(textSpicyHerba);
Controls.Add(labelSourHerba);
Controls.Add(textSourHerba);
Controls.Add(labelBottleCap);
Controls.Add(textBottleCap);
Controls.Add(labelSaltyHerba);
Controls.Add(textSaltyHerba);
Controls.Add(labelSweetHerba);
Controls.Add(textSweetHerba);
Controls.Add(labelAbilityPatch);
Controls.Add(textAbilityPatch);
Controls.Add(picBottleCap);
Controls.Add(picSaltyHerba);
Controls.Add(picSpicyHerba);
Controls.Add(picSourHerba);
Controls.Add(picSweetHerba);
Controls.Add(picAbilityPatch);
Controls.Add(pictureBox1);
Controls.Add(groupBox3);
Controls.Add(groupBox2);
Controls.Add(groupBox1);
Controls.Add(TeraType);
Controls.Add(Gender);
Controls.Add(Shiny);
Controls.Add(Species);
Controls.Add(Difficulty);
Controls.Add(picBoxPokemon);
Controls.Add(Area);
Controls.Add(Map);
Controls.Add(picShinyAlert);
ForeColor = SystemColors.ActiveCaptionText;
FormBorderStyle = FormBorderStyle.None;
Icon = (Icon)resources.GetObject("$this.Icon");
Name = "TeraRaidView";
Text = "TeraRaidView";
DoubleClick += TeraRaidView_DoubleClick;
MouseDown += TeraRaidView_MouseDown;
MouseMove += TeraRaidView_MouseMove;
MouseUp += TeraRaidView_MouseUp;
((System.ComponentModel.ISupportInitialize)Map).EndInit();
((System.ComponentModel.ISupportInitialize)picBoxPokemon).EndInit();
((System.ComponentModel.ISupportInitialize)TeraType).EndInit();
groupBox1.ResumeLayout(false);
groupBox1.PerformLayout();
groupBox2.ResumeLayout(false);
groupBox2.PerformLayout();
groupBox3.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)picShinyAlert).EndInit();
((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit();
((System.ComponentModel.ISupportInitialize)picBottleCap).EndInit();
((System.ComponentModel.ISupportInitialize)picSaltyHerba).EndInit();
((System.ComponentModel.ISupportInitialize)picSpicyHerba).EndInit();
((System.ComponentModel.ISupportInitialize)picSourHerba).EndInit();
((System.ComponentModel.ISupportInitialize)picSweetHerba).EndInit();
((System.ComponentModel.ISupportInitialize)picAbilityPatch).EndInit();
((System.ComponentModel.ISupportInitialize)picAbilityCapsule).EndInit();
((System.ComponentModel.ISupportInitialize)picBitterHerba).EndInit();
ResumeLayout(false);
PerformLayout();
}
#endregion
public TextBox Area;
public Label Difficulty;
public Label Species;
public PictureBox picBoxPokemon;
public Label Gender;
public PictureBox TeraType;
public Label Ability;
public Label Nature;
private GroupBox groupBox1;
private Label label1;
private Label labelAbility;
public PictureBox Map;
private GroupBox groupBox2;
private Label labelHP;
public Label HP;
private GroupBox groupBox3;
public Label Move1;
public Label Move2;
private Label labelSpeed;
public Label SPEED;
private Label labelSpD;
public Label SPD;
private Label labelSpA;
public Label SPA;
private Label labelDef;
public Label DEF;
private Label labelAtk;
public Label ATK;
public Label Move8;
public Label Move6;
public Label Move4;
public Label Move7;
public Label Move5;
public Label Move3;
private PictureBox pictureBox1;
public Label textAbilityPatch;
public Label textSweetHerba;
public Label textSaltyHerba;
public Label textBottleCap;
public Label textSourHerba;
public Label textSpicyHerba;
public Label textSearchTime;
public Label textBitterHerba;
public Label textAbilityCapsule;
public PictureBox picBottleCap;
public PictureBox picSaltyHerba;
public PictureBox picSpicyHerba;
public PictureBox picSourHerba;
public PictureBox picSweetHerba;
public PictureBox picAbilityPatch;
public Label labelAbilityPatch;
public Label labelSweetHerba;
public Label labelSaltyHerba;
public Label labelBottleCap;
public Label labelSourHerba;
public Label labelSpicyHerba;
public PictureBox picAbilityCapsule;
public PictureBox picBitterHerba;
public Label labelBitterHerba;
public Label labelAbilityCapsule;
public PictureBox picShinyAlert;
public Label Shiny;
public Label DaySkips;
}
}
================================================
FILE: RaidCrawler.WinForms/SubForms/TeraRaidView.cs
================================================
namespace RaidCrawler.WinForms.SubForms;
public partial class TeraRaidView : Form
{
private readonly object _lock = new();
// Drag and Drop
private bool drag;
private Point start = new(0, 0);
// Progress Bar
private readonly int pbWidth, pbHeight;
private readonly Bitmap bmp;
private double pbComplete, pbUnit;
private Graphics? g;
public TeraRaidView()
{
InitializeComponent();
StartPosition = FormStartPosition.Manual;
Location = new Point(0, 0);
pbWidth = pictureBox1.Width;
pbHeight = pictureBox1.Height;
pbComplete = -1;
bmp = new Bitmap(pbWidth, pbHeight);
}
public void UpdateProgressBar(int steps)
{
lock (_lock)
{
Invoke(() =>
{
if (pbComplete <= 0)
{
pbComplete = pbWidth;
// ReSharper disable once PossibleLossOfFraction
pbUnit = pbWidth / (steps - 1);
}
g = Graphics.FromImage(bmp);
g.Clear(Color.LightSkyBlue);
//draw progressbar
pbComplete -= pbUnit;
g.FillRegion(
Brushes.CornflowerBlue,
new Region(new RectangleF(0, 0, (float)pbComplete, pbHeight))
);
//load bitmap in picturebox picboxPB
pictureBox1.Image = bmp;
if (!(pbComplete <= 0))
return;
g.FillRectangle(new SolidBrush(Color.FromArgb(0, 5, 25)), new RectangleF(0, 0, pbWidth, pbHeight));
pictureBox1.Image = bmp;
g.Dispose();
pbComplete = -1;
});
}
}
public void ResetProgressBar()
{
lock (_lock)
{
Invoke(() =>
{
pbComplete = -1;
g = Graphics.FromImage(bmp);
g.Clear(Color.LightSkyBlue);
g.FillRectangle(
new SolidBrush(Color.FromArgb(0, 5, 25)),
new RectangleF(0, 0, pbWidth, pbHeight)
);
pictureBox1.Image = bmp;
g.Dispose();
pbComplete = -1;
});
}
}
private void TeraRaidView_MouseDown(object sender, MouseEventArgs e)
{
drag = true;
start = new Point(e.X, e.Y);
}
private void TeraRaidView_MouseMove(object sender, MouseEventArgs e)
{
if (!drag)
return;
Point p = PointToScreen(e.Location);
Location = new Point(p.X - start.X, p.Y - start.Y);
}
private void Rewards_TextChanged(object sender, EventArgs e)
{
ForeColor = Color.DarkGray;
if (!int.TryParse(Text, out int value)) return;
if (value > 0)
ForeColor = Color.White;
if (value > 2)
BackColor = Color.ForestGreen;
}
private void TeraRaidView_MouseUp(object sender, MouseEventArgs e) => drag = false;
private void TeraRaidView_DoubleClick(object sender, EventArgs e) => Close();
}
================================================
FILE: RaidCrawler.WinForms/SubForms/TeraRaidView.resx
================================================
text/microsoft-resx
2.0
System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
True
R0lGODlhAAIAAvcAAP/pC//aAv/cC//dFP/eG//gA//sBP/0BP//B///C//jFP/pFv/iHf/rH//zFf//
Fv/yGv/+HP/fI//fKf/iJP/pJf/hK//tLf/zJv//I///LP/iNP/jOv/vOf/1Mv//NP/2O///PP/kQ//q
Qv/kSv/zRP//RP//S//nVf/oVv/nWf/oW///U///XP//ZP//a///dP//fP//hP//jP//lP//m///o///
q///s///u///w///y///1P//3P//5P//7P//8//////aA//cDP/sBf/1BP/6Bv/zD//kFf/rFP/iHP/r
HP/0Ff//Ff/zHP//HP/fIv/fK//hJP/rJP/hLP/sLP/0Jf/yKv//K//iNf/tNf/qOv/xNP/0O///O//p
Q//mTP/qS//yQ///Q//zTf//TP/nVP/rVP/pXP//VP/zWf/rYv//Y///e///k///pP//rP//tP//vP//
0///2////v/bBP/kBv/qBv/iC//qDP/7B//1Cv/+Df/qFP/jHP/qHf/yFP//FP/0G///Hf/jJP/rI//i
LP/rLP/yLP/jNf/rM//jO//qO//yNP//M//zPP/lQ//qRP/sS//0Q//zSv/sVP/nW//rXP/xU//yXP//
W//sY//ua//yY//zbP/vcf/0c//0ev/2hP//g//3iP//i///6///8f//+P/cDf/eGv/rBv/jDP/sCv/8
Bv/0C//9C//jFf/pFP/zEf/iK//rK//zJP/rPP/zNP/zO//rRP/rTP/zQ//zTP/nWv/yU//0bP/0e//2
g//+g//3if/+jP/+k///2f/qBf/rDP/1Bf/qHP/zE//zIv/jNP/rNP/+PP/yRP/yVP/yW//sYv/yZP/0
a//+a//vc//+fP/1g//+i//+lP//wf//0v/qC//0Bf/8B//1C//7C//0Gv/+Hf/jI//qJP/yK//rO//y
O//nVv/za//vcP/+dP/7DP/0FP/+FP/zHf//Hv/yI//+TP/qXP/ta//vcv/+c//9e///vf//wP/pTgAA
ACH/C0ltYWdlTWFnaWNrDmdhbW1hPTAuNDU0NTQ1ACH5BAkDAAAAIf4gQ3JlYXRlZCB3aXRoIGV6Z2lm
LmNvbSBHSUYgbWFrZXIALAAAAAAAAgACAAL/hI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2
jef6zvf+DwwKh8Si8YhMKpfMpvMJjUqn1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8
vv8PGCg4SFhoeIiYqLjI2Oj4CBkpOUlZaXmJmam5ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ub
q7vL2+v7CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19jZ2tvc3d7f0NHi4+Tl5ufo6err7O3u7+Dh8vP09f
b3+Pn6+/z9/v/w8woMCBBAsaPIgwocKFDBs6fAgxosSJFCtavIgxo8aN/xw7evwIMqTIkSRLmjyJMqXK
lSxbunwJM6bMmTRr2ryJM6fOnTx7+vwJNKjQoUSLGj2KNKnSpUybOn0KNarUqVSrWr2KNavWrVy7ev0K
NqzYsWTLmj2LNq3atWzbun0LN67cuXTr2r2LN6/evXz7+v0LOLDgwYQLGz6MOLHixYwbO34MObLkyZQr
W76MObPmzZw7e/4MOrTo0aRLmz6NOrXq1axbu34NO7bs2bRr276NO7fu3bx7+/4NPLjw4cSLGz+OPLny
5cybO38OPbr06dSrW7+OPbv27dy7e/8OPrz48eTLmz+PPr369ezbu38PP778+fTr27+PP7/+/fz7+///
D2CAAg5IYIEGHohgggouyGCDDj4IYYQSTkhhhRZeiGGGGm7IYYcefghiiCKOSGKJJp6IYooqrshiiy6+
CGOMMs5IY4023ohjjjruyGOPPv4IZJBCDklkkUYeiWSSSi7JZJNOPglllFJOSWWVVl6JZZZabslll15+
CWaYYo5JZplmnolmmmquyWabbr4JZ5xyzklnnXbeiWeeeu7JZ59+/glooIIOSmihhh6KaKKKLspoo44+
Cmmkkk5KaaWWXopppppuymmnnn4Kaqiijkpqqaaeimqqqq7KaquuvgprrLLOSmuttt6Ka6667sprr77+
Cmywwg5LbLHGHotsssoTLstss84+C2200k5LbbXWXmtaAQAh+QQJAwAAACwAAAAAAAIAAgAH/4AAgoOE
hYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr/A
wcLDxMXGx8jJysvMzc7P0NHS09TV1tfY2drb3N3e3+Dh4uPk5ebn6Onq6+zt7u/w8fLz9PX29/j5+vv8
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
u+AIT7jCF87whjv84RCPuMQnTvGKW/ziGM+4xjfO8Y57/OMgD7nIR07ykpv85ChPucpXzvKWu/zlMI+5
zGdO85rb/OY4z7nOd87znvv850APutCHTvSiG/3oSE+60pfO9KY7/elQj7rUp071qlv96ljPuta3zvWu
e/3rYA+72MdO9rKb/exoT7va1872trv97XCPu9znTve62/3ueM+73vfO9777/e+AD7zgB0/4q8Ib/vCI
T7ziF8/4xjv+8ZCPvOQnT/nKW/7ymM+85jfP+c57/vOgD73oR0/60pv+9KhPvepXz/rWu/71sI+97GdP
+9rb/va4z73ud8/73vv+98APvvCHT/ziG//4yE++8pfP/OY7//nQj770p0/96lv/+tjPvva3z/3ue//7
4A+/+MdP/vKb//zoT7/618/+9rv//fCPv/znT//62//++M+//vfP//773+SBAAAh+QQJAwAAACwAAAAA
AAIAAgAH/4AAgoOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0
tba3uLm6u7y9vr/AwcLDxMXGx8jJysvMzc7P0NHS09TV1tfY2drb3N3e3+Dh4uPk5ebn6Onq6+zt7u/w
8fLz9PX29/j5+vv8/f7/AAMKHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmT
KFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1
q9evYMOKHUu2rNmzaNOqXcu2rdu3cP/jyp1Lt67du3jz6t3Lt6/fv4ADCx5MuLDhw4gTK17MuLHjx5Aj
S55MubLly5gza97MubPnz6BDix5NurTp06hTq17NurXr17Bjy55Nu7bt27hz697Nu7fv38CDCx9OvLjx
48iTK1/OvLnz59CjS59Ovbr169iza9/Ovbv37+DDix9Pvrz58+jTq1/Pvr379/Djy59Pv779+/jz68c9
YMD+ef41MsSAQwgCxX/lEECAIQQWOMgACxIyxAADDoAEAVNQgeA4BPQH4SAVTuihh4IM2EQSEybxxAde
fCDFhuFAOOKCHibRxI1NIMEEhRMm0ESFTXgxhhdeYHEgjN50CKH/kgM0wQSONz7xRBM84jjhEB+MoSWR
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
TI3UQg00Sws7ZmMogmJtfn7maI7mq/IloI4JovQjQpDrQ/AzvqLqsLMrH9ACB3hVTjcwm44qjAJ3tY4J
69rYuW7qvs49ZTMlCZAARTDUmIhrsV4yR0T/68t+CXtECLm+BLzu69yZAEZQBEXQBGxCR6YCNY2I7NKI
49/eCUKgYRJt2eReNv2S7kVgBJBufSyMPUlFLBRD7/X+Cc+O1D8zO9au7gD/KzyJeoXWhR7qJpGd8KKw
8AnA66Cr7kWwl1KyBIMgjDhYBqi3BSgn5Rq/Cc9OBB2PoLlOBCCf7kZg0oMAd3FS6K7N8i2fCQvP8MVr
0rpe0s9eCMVWWHf886MQ9G7NIEeP9HBuxUxfCk6PCEjNCNZS9aQQ9JjA5lyvCQsf9r2Q62R/9mif9mq/
9mzf9m7/9nAf93I/93Rf93Z/93if93q/93zf937/94Af+II/+IRf+IZ///iIn/iKv/iM3/iO//iQH/mS
P/mUX/mWf/mYn/mav/mc3/me//mgH/qiP/qkX/qmf/qon/qqv/qs3/qu//qwH/uyP/u0X/u2f/u4n/u6
v/u83/u+//vAH/zCP/zEX/zGf/zIn/zKv/zM3/zO//zQH/3SP/3UX/3Wf/3Yn/3av/3c3/3e//3gH/7i
P/7kX/7mf/7on/7qv/7s3/7u//7wH//yP//0X//2f//4n//6v//83//+////////////////////////
/////////////////////////////////////////////////////////////////////////////0X/
////////////////////////////////////////////////////////////////////////////////
/////38LgQAAIfkECQMAAAAsAAAAAAACAAIACP8AAQgcSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rc
yLGjx48gQ4ocSbKkyZMoU6pcybKly5cwY8qcSbOmzZs4c+rcybOnz59AgwodSrSo0aNIkypdyrSp06dQ
o0qdSrWq1atYs2rdyrWr169gw4odS7as2bNo06pdy7at27dw48qdS7eu3bt48+rdy7ev37+AAwseTLiw
4cOIEytezLix48eQI0ueTLmy5cuYM2vezLmz58+gQ4seTbq06dOoU6tezbq169ewY8ueTbu27du4c+ve
zbu379/AgwsfTry48ePIkytfzry58+fQo0ufTr269evYs2vfzr279+/gw4v/H0++vPnz6NOrX8++vfv3
8OPLn0+/vv37+PPr38+/v///AAYo4IAEFmjggQgmqOCCDDbo4IMQRijhhBRWaOGFGGao4YYcdujhhyCG
KOKIJJZo4okopqjiiiy26OKLMMYo44w01mjjjTjmqOOOPPbo449ABinkkEQWaeSRSCap5JJMNunkk1BG
KeWUVFZp5ZVYZqnlllx26eWXYIYp5phkllnlEAM0NERBaZo52ABDxJlQnHIOhKaberVZUJxw1glAn2je
aWefBBFAAJ5yETCAoQQFyieaAwAaqJ2PFirBpYi+tWikkQrUZ6R+CCLqIJKuKRCddApEgAQaPDLBoZmy
/xWpopv+OUAgghAiqqh+lOrpo5GuWUirj2hQSCORxKqWoYsqqmiou4qqqx+owvlntXxqEEIIj4RQRhqb
mHCIsmhtyqyhCugarajBBkstrbRGmkEIJpiQxgttvLBJGocQ8IezhjJKblfxbjqAAtKqu+sQeeAqagYa
lPGCJ2mYsC2995KiMQz79huwvwP8OzDB5m667q669tGHICoLAnEaMMQc8wsvwECKKaa4YUobbGzi8ccC
j7xVyZHmGi0hSBPi8MorE/KICfjK3EbOObuhMyn69hsy0EJPdci4bJqrqNEJJ02IH9CyLKq2NcPQxtRV
W221KRwrAnTQXSuV7ECKfP9t0LmROqyw2YOgnXbTj2zi9s1Uyz03KW2kYbgfgKCtZ95HRaK5QIcoMoHf
AzXLadoom3022g7vqsEmGt/sONU4b2xCBmYLgnlSmmve99efg+3srEWrizTtwyNduB95hLrytmngjPPc
rztPCgxlPJL05bcHpYgiZXTfvSO8e+75nwArinDSGaSvvtmAKOA+H4KEAC7rjtfguM7OmwJ5GtYTgn32
PpmAIkzwLe+ZwHOHEOAEHgE44PkLEOqLYPqS5j4F5IEQIdjEC25WgxrY4IM26KD98he7NpigVf8DIE8G
6L3upSENjejcBCZgrxBIwGDO+sMfAGGIHkJwfcQjhAX/Q/YtGLhBBze4gQ2SmMQOQi92MKAZxyagwqBE
woUF7N4Be1eGfZVBA79blB/+YAge8tAQETSbAgRSCImR4gY72IEOdjCHOdCBDjoIIeywRjNT2IAUZQBb
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
g1qJSrUcr++Ts6B8y4VkyER8xra0AwebQKvhEutYNO6ChKdcS8BMqq50sDrzyaBMx3U8xAPoSq3AJIWB
q0AjCEZBlsCszL5qy0GAy6BMRsU8RLrMigEohAVTo0oAkY+IhGt7K8tczaXSijmjMyErxd7pg848xD34
PmtbGOnbjhcoAzViTeDkq/8OQzK7zEyUpM3aPMTeq5np0LoRCk7o5KuuHALDHAR2xIPaXM6wiASf8M2K
ik7wFMy29EmuZMxTG4tI+A5GCU/2tCjG7KcDdArGNIvJtMn2vM8aes/zlE/tJAtRwk8AfSPzDAsLKwsE
CVAEbaOuTFAGXbIFbVAIvbD+jFAKrVALvVAMzVAN3VAO7VAP/VAQDVERHVESLVETPVEUTVEVXVEWbVEX
fVEYjVEZnVEarVEbvVEczVEd3VEe7VEf/VEgDVIhHVIiLVIjPVIkTVIlXVImbVInfVIojVIpnVIqrVIr
vVIszVIt3VIu7VIv/VIwDVMxHVMyLVMzPVM0TVM1XVP/Nm1TN31TOI1TOZ1TOq1TO71TPM1TPd1TPu1T
P/1TQA1UQR1UQi1UQz1URE1URV1URm1UR31USI1USZ1USq1US71UTM1UTd1UTu1UT/1UUA1VUR1VUi1V
Uz1VVE1VVV1VVm1VV31VWI1VWZ1VWq1VW71VXM1VXd1VXu1VX/1VYA1WYR1WYi1WYz1WZE1WZV1WZm1W
Z31WaI1WaZ1Waq1Wa71WbM1Wbd1Wbu1Wb/1WcA1XcR1Xci1Xcz1XdE1XdV1Xdm1Xd31XeI1XeZ1Xeq1X
e71XfM1Xfd1Xfu1Xf/1XgA1YgR1Ygi1Ygz1YhE1YhV1Yhm1Yh31YiI1YiZ1Yiq1Yh4u9WIzNWI3dWI7t
WI/9WJANWZEdWZItWZM9WZRNWZVdWZZtWZd9WZiNWZmdWZqtWZu9WZzNWZ3dWZ7tWZ/9WaANWqEdWqIt
WqM9WqRNWqVdWqZtWqd9WqiNWqmdWqqtWqu9WqzNWq3dWq7tWq/9WrANW7EdW7ItW7M9W7RNW7VdW7Zt
2xQNCAAh+QQJAwAAACwAAAAAAAIAAgAI/wABCBxIsKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPH
jyBDihxJsqTJkyhTqlzJsqXLlzBjypxJs6bNmzhz6tzJs6fPn0CDCh1KtKjRo0iTKl3KtKnTp1CjSp1K
tarVq1izat3KtavXr2DDih1LtqzZs2jTql3Ltq3bt3Djyp1Lt67du3jz6t3Lt6/fv4ADCx5MuLDhw4gT
K17MuLHjx5AjS55MubLly5gza97MubPnz6BDix5NurTp06hTq17NurXr17Bjy55Nu7bt27hz697Nu7fv
38CDCx9OvLjx48iTK1/OvLnz59CjS59Ovbr169iza9/Ovbv37+DDi/8fT768+fPo06tfz769+/fw48uf
T7++/fv48+vfz7+///8ABijggAQWaOCBCCao4IIMNujggxBGKOGEFFZo4YUYZqjhhhx26OGHIIYo4ogk
lmjiiSimqOKKLLbo4oswxijjjDTWaOONOOao44489ujjj0AGKeSQRBZp5JFIJqnkkkw26eSTKKqiCpSh
TZmQlKoMQOVnWGZp5UBdfrklZ2FiOYCXUmqJkJpjJrYKQmWiGSacWR60yp1t/rXKAGwOdGaYf85pkKAE
3WlonnwNsCeeYPKZpqNdnnlQln8aZKgEq0ygCKJ5LaqoogLxyecsgpR6ZqBigplmnYVKkMgHipT/kcam
Axl6KKdsfeopn7KU6mupcaYarJ+3aBDCJmlssokithr6B6O4quXprk4IQsivTgT7paOiQsqnsWnAQAwb
yprQ7LPQRpuWrrqu4uu1vqIap6K3fFBGGSbUUkghqxi7CTEAv6BsGeg+i+6b6krLLp+/vusEILPIcqqU
tAgSC6UZfPACDBy/wMbH4hJjDDEwDNysrQmnNe2n1f56LSEQzxKxKq1U7CstWRqiARsc9xyDyCMHrGwa
mK7yh8F9plwWu3sO8G6phEQt89Q1W2w1sP2mEYPPIh9zzMhbI5sGvycrfVa7nzZsbdSCTC1zK7LA4mss
gsAyywAafMC1MV4b/wN2DMouezLCZl9Vi0Irf0oqvNau7YTbEcuiity0tOLlAMVu/DMxfX8N8NbklsGs
0YoSXjhVikxw+EF8TrunLE4wDnXUhFA9SyuWr/rnAH9ooDXQfPftN9gCb2JCIaWbfnpUtWi6ekGGLsw7
7384cUvsa9cOuSwEYSmLLIB8YILIXXv99fB+k+xxGiGUmu7ySEUSCUGpq05roStPe7QhhgDSf/W0g9yg
WiEzQ4gPaObrHN8WaIwYeIwNJsjA++BXFPnJTyDNU10tmgc9punqaH/oH//8B4jYEeJxt5uFQQYgi1mE
74Bes4ENakDDr9kQfTH4GBvKMIEJUhAojNCFCf9MgC9FZFARSNwg66LXNKONsH/++wMgAEG7mLFOFkP8
wAf+dYwayBAOYLSB+fzmORjosAy1eNYPi9ILWcmKfUbUlAaVuKZFGe1oJBzhFKdIiAw8jnsGkYUi0vCC
NJgABsGrARxwIAcc4AAOYjwfDB5ovKL5cI07iUQb75WGe6Vug0ashSJCcL8lGk0WUnziHsFHxdoBsiB/
MMHGJplIGyySkY+EQw2I4cAXCKwMGjiY0TAJFAu68V5lwMUGl6kIIooudXUEYQjzCMUpxg4QrySILcL1
MxzQkIZgdKQ44XCMXrIhDRrw48GKRsyeWDASjDgmvpZpP2cWUXWWot4URWj/CBB+D3wyQ4giNgGDGNhA
B42Ugxx0wNBw4sAGxpgkG0KQAVMNhBG7KCVCLtnOkIABAIxAIiPeGQlkdlJ09IwVMov4vIFIoBAbxOP/
jkYQyaVKIJEwwSZ4VgNHKlQHc5iDDnKpS14W0o98IggKlrqQW3UUJCS1ICNCYIIQjPSdnLyXMkG5izR4
1Y0mYARB5DfKEHxgf/18X6UK8gsUvHETx5ChLXEAVDmAEZLHUF/7HDWQtjI1IXdC11Oh+k4wyI8RVR2i
Lt5pgq8WURG4wIUvhtbJsEYVniEIQSKk+amCsIogv8DEL85wBmCkgQ0x2FzXjPFFiIIuA93Skl9/QVvA
/66CnYP9yGURS9WqWpUR8UzWV00QWVycllydhKdySTrKQhxNYk0bFGhp+ws2oIC0mtAEyDaX2mF4Ma8O
TAMgYssIFNB2qSjYqK0wlVuPGJakmR0iVeOrU3IhS1bKmuzHNuGLXbzzqiMFbggCKxCngomt1fUYJoCh
iWCEwhMFDZjmwDbJAX9KArUwAXrROz8AnEyYymtvRkg61d72dohl2OnAvLpT1DqQDbwAg39xIdXlKqJP
BhbITTUxS0wEQxgxGAbHhEEMYbzAEw/k2cZMsAhd9PZeYDBvW8GAxsEZLbA5FrFFSCpE+Xq5sS0WW7J4
lj7AxbjGzF2hWg0SCZ6lNv/IwyjGMIQhjGHk0BObAEYvdJEGv51UnmVA7y944claWBLEd5oAbrW8Zcx+
+V5D1OnGPBY4ngGPGC8ABi/8e9hOd7iDIS7IVVE7smHE2Rh2tvORO6mLXGzzBYBGJhhmywvHNk8Clkz0
IphsSUZXhBEExZd8U3zOe0V4ZPYVF/rUt2mS0viCdrLFIjR6UXgCm3Pn85upTR0M/vYiFyIMQVZNWgZf
LNWvYPBqsvC1COfedgLiLkMIyBZqXzckBHE9RiGHeNyP/cyLNTCGJs6wMYABDdMwbnZUE1IIyOICIcCV
HxcDru1tkywNvtBFIvo3i0JoEgyblPVoR34GYu+3DLb/MEQhJoBifJHN3hTRxTHCGNFkecygjIRkwGdZ
8OHFQBOaBsMZeEH090LbILZ4Ni4UsYhFRDbiwGVEnwFuDGGEgs6mzvS3DdFCQNIWE5jgBNgFbd6lnoEN
n4NBMptuT3xJAOa/NsZdxYhAODAUod4M+OcAZoxdskHTvtCEJ7JLWl744ugFwcUujJsGeBY34tZOAzEA
7sBgDD4YwfDFnjn+yl9wghOdAEUoQMEJ855BytdlA98wre6VIrOlcIdIJAw695k7Ugc7uLtCvTlGv5nZ
F8BAMhs8QfyNseGwBmEEjWncSVwoP+pQl/zXUutLTwxfExlPxBRVSBDQX53OoSj9/2hRgAnS/ssYgWv9
SsMa+4kwYvJfhCTugxrUuw81eF6rwTHYAAaiNxjzmrM1L/BeBDFSy7d4veBYzxZxzTRLHfMxwXBkW/c9
BsEJofB9dEZ6mGB65acsyCVmrhcJH9V+EcEIXURDtgQHOxBUyIAMQnV3cPAzC+Q1mKYsSPYCRJZ2MMAL
8lMGAaZcxeVfKTY0Pmhtu3ZaD/gxLxAMwIAL2ocQnYCBdCYMnXBeZ7Bg36ZuWhiCUUaCDSFKtaALfYeC
YLSC9Jd7MMhLHINa5eRLxzY8aXdmJfWDNLZ4ypUsQ8NYssIzEqWEmrALKZcQoDCFhNgJG0h+wAAMi2AL
YNZ6zv9ERIwQYyPohQexTKJkAmPoRYtEf0KlUAulAzXwZp5wdgLoSzK4bFtzBkanXAYYCc4XecrSC5HA
C9dlcw/ogZqwZ7bwBwiBCVIIfoY4WkCniNKGh/fFhWCQjJNIiQNhRKkzSJloAzhghrnnUI60S1szjGww
aRxziunDS6r4X9YGhIeVYr2wC7xAWmNWUJMUOMCgeeCGSn+gJVqiCLvgi4R4gcEgdmCXiL6wiLjggcJ3
jGWwC8qojMxIEHKkCLrwAicojWYoVEQ1TmAzeILHY5NUUKeohi8wdLtQgPKDjokIDP61C72AC/1XWh6o
kcjlC5q3iNj0LK1TCxjFBvkICp3/4AliN5JAZwu2wAvEh3kOpnbIZJDKiALLmJAAIEqbMIbSCFRBlXvi
NJUPxUtskF1gx43dqIaWN4psNlK8kF2EN2PPNoQ7xY7n1Au8sGeLwHUyqSgSkHS8gIPgFwo52Y8LtmBn
gJI+JpTBIDT3IoJRlowAYEFKKRC4EAPfRFc70Jho6ImQ2Ug2kEObAHTW1zE855eDdwaiFgm7UFpiCQxU
xgiLQFXGyIeh45m90Jao1C2rQJOf+QL6+HnNyAuJeIWYwAth55ehIDIvlgYHuYpidZjA0HfS+Il4R1e6
F5lyYAx4ll3E1zO+xAaYIHhLaJGcWW1Cx2CEFwmGFF9m6YbF/7YLu6ALtgAIRyMqq2AIkJWOOvkLllII
jICbYucJDiaUvWlUDyScAgZ7XogCfXdXkCRDiiROyIlQCmUDL2CdR8ZzMCZ292l5A5edICU/YMBgeXYv
xhNfLLZTvrQJ91KerCkLTaMosJmOZwCfljIQYecJfemXwUB9vuQx4hhEJjABSll6EWY+3ySNjrRIDPWY
duWcMQoD9gk6ZxCUFwgDmKcJ5ccLAnFVymhaY+ZbRISHOmRIBbmIR3MnrSMBToeiDoGUMIp5nTBpHkOj
hxVgQ+SfsTd226hsZNRFuBROctCYCEp3Gml5k/QLMHqBoWB55ReO8DQQuNALvqBTIJpZmf+lePoFokQE
iM9Voq+5COgIpQ1RdJ4ndrPFYzNKLmgWaS/FjPy4jTPqM6zlSF/ESLonRgGXWkZKfEHJm4G6mUN3EIqH
C0T0AYWAYdIWWcAnbMlkCyTqmg3nmZjKEEg5mAg5EGCwCTP6AofHiohVVYr2dsz4C2O2CWUHrTFgnJq4
SAvVSHn1N5M0eJ6gj2VqeaQFcZFlC+52W7+qeLuwCLlARIvQpU20CraAUejYEAeJlMlKELzAhwNIrfVl
AriGrQkpVp4nWhtIavknV/p3DHJWZgJ4eTAgDGVKfGfwaQcBXLbgpasAU053qLiQcrvWT/OonhIAWZ7Z
EMvarAaRki//kIq7oHwoNp0ToGgrd5gDwY+/cLOrFQN1NgzDo39/s6CC52D6SHwokI4yphDAFSqLUgtN
12RtaQgw+QcS0zqr4HAPxxBHuRCkdQaa0DGQym+zxAa5cK0T0KsMS4mb+guaAGQAo6RXB2d2JgxGKpb/
55eY0H9SuxCfxid/IEpNl7L8s4gz1ToNF1nUZhDLuhBCh7ZiuY3kgmLQ+oAfcK24tnJuCnfUhQmztAnp
WJ2yinm16qRDd4WCZ5+YN7MxBhF3UgjS1nT945NQxHUS87LTpi+Wm5QIUVrVmbmae1JKprYh0LO1kAtm
Nbmx93mYwDPH55mX+6Ky66JDh6LQaXly/0i8DFGyPsm7/vNEIPSaSaRGCSG+NQuagJtdyetVPZORApNY
Q7QIw8mMYLeB0ipS+7ubOimrLhpjZ1udo3WQ3ccJDQFTtlAL/CRCewQIuKsIzpVUF4G5Tgq4xXdOyfJm
HTNJhqRYVauUYYcJs8KQpCQQQkd+/Ru7E4qi7QoAkjiJoMcJKqoQ+7Iv/cQ/1TRFifvAJcqLFDGL3MnB
sRs4BMVLWyOdxmMCuhB1QAt2INVMIYVTytiuX8e9ZzuwLPxRnxfGDLHD/TTB6AlCMCVKRnRlQbuPDmFB
2xm/8UtqBreG91VVUgy0zRhWSIRTcCx0LNq/Z3sQYHDDYYwJC8HDIP+kR157NPsiASHQSaQkSmHXCZ3Q
EGhmQUR3xPILPA20Q5HmW3msxwCARKYspatYEKRVfr3YCcHQCWHMwIhzR+AjRWfsyOgySI4FDIbMEJ5m
bcUVWbugCZsAYd9Kg+0obCY2ynocUqcsi4WFeAIxwwBAU4UJepZ8yO5bK6e0R14rjzL5muoWOIesEIZ5
UZK7dMXlC5qDbcYwnaDsZb9FygJhyqbsnRYazQVRycGAwi13Btj8eelmAlKSEPOIR+gpj29SorWAXyom
ZTnsEPbMdCe7C57wZn7Th+cUyni8v3o80fEEovJjWfCkCx+QC4owUm72Mw4Egi4Mop00AUlTKNT/I01E
XBAN7aHIAgYQCxFqrL/B7JmBV1DIpkOQamJhVcKUaMqlLFIpndLbum4W9AGMala/AzRmJDZvBYIf4NEE
QT2ohErt+wtIxjFpAAz9i8gMUQu2wHTK94ry82wMhlrFk2e8EFL09VteHXtMd2IhMG0p3VgrLVFlID9U
nVlaJEsGR5lE2Ekd6tg8zTo1fdMHAXqDOGecuqmynBBI5HzFFdfWFnEjaXhEF2NR10yGBH0kaMoczW/K
EoBMHDZ/hi+MWgYsXUjp59h7KDCdxNNhBz2rINYKAXpYN2fCIFqxrNYJ4XzQp9oEgY7zg46GBX3NNETO
DXf2HGn45YARZnCf/2NfvlRZvvUCJCNmX+XY4bI+wIACYofDys1CDEHcR2tqVHjIYBfRolbEoQ1coXzd
2B1SKBanGtmNcPjdAn6MbOvBWojeaIks7N2/m+0QnTCFxo3Z1EVdINHc8tzcq91MZeCATfyGBR6nLa3V
+IKHC+7YaKc+5xRaYYffDWHJoyd6oICT900S0EdVodSzCYlE4qY5PhMy6JM+QD6dRGgC22RfKc5dZgSc
N34RsEy9yh0STOdkVJVBGqSUo9RYswSrRD2DvteNkwTPyLILiXBcuX1ai92OTq4RY0eYIaFBJ4blznuY
vYWE3Zha+Nc3JGO00mnkvWACpmpfyLIJqkV95/+0CBzxC74wKyLR1qM0T4bWPBnEQczo4UREUE0cA/mX
QJjmt/U75iBaBpi5X8qigxLVC3OLEbEyYCKRtboavPrivIpW515Y3ZHWuanVRbzeN0vIjph5vwT150pY
ig+UBrYwAHawEa+JPHGeu5GVtVhO6XTefht0YkN0luXj6RkZ7NsIonw45jqUhEQoC5az7BgRWzNNERuk
Oj2rOicb7+3+7j0rAe7O1z7e2mWAdnN6PiTz50lmPIOuQ+Ri6q2XC2diBzc1EerO7vS0Qfbu7j3rcLqg
C5E17xmEKfaO70ak70TEd0OOaeROWacV8CSf4rmg8Bqh7iVLEXN0az3bdA//jLXBnLI9K7eGkAEZsOrt
9FcE0TyhFMrCRkTfmj5w6Ia87Vh7qMReVVVvNG7Sy/CxdSfQpBG5K/O5kPW5gAuL0O6JkDcZ0Ef1tkbo
pZDMlGGtPURCHjQAQ/D8FWlU9Uu0jTw0kwFX2noSgO4rhMEJoe5fa6L4whGmbAvGYlYfoAE6kzdUffiE
sO6YJGj0Y8qXOPTaTd7ks9iEDpzTHV8UZTGqYAegHwt0Yy+UpQGtoPeh0i0rJDGsTz0s1LKKEsnJtBFs
7ZPi41taZFaM+gEZMF65VXZlX8/2jAuuhy/AddXezdg7/V5W7gSwEAuu8Pl2IPqiLwgZEMleZTGwoCaU
/9IKohJIjfxP4v89e1IIWrgIYw8R+7JBhV/VuY/YEoT68AOffrVhtBXhykieLNZJ5AkQuyL5YgODmDGE
xmKw4XWG10MwESN9+KAhFiw7du7AitXRIy0NZUwQiqVqwMkBJlOeBNDSpaw/smQCggkI0B+cf1aZSNMz
TRlFhmTKclnU6FGXhgoZMvQhxFOoUJ1+IMQS6VWsWbVu5drV61ewYcWOJVvW7Fm0adGiYNvW7S9OneT+
4uWS7RlNwICd4dsXGAzAMGIQg8EGzNVIiioKisWKVRGPHmG5oiUow0WVK1sNkGXVKE6mhmyOprlqQhmf
m3raKvQndKGWOWHGlEl7tv8hW7ltRX1K0WnvqqrUDide3Phx5MmVL2dutG1Et5iChQoFOBinX2+za+LO
He8L8Jv4HtY6wNXFO0U4dmQc6w6ryKpUykS5Eqlr3fltMZ0Qwuf/n3rpBZdFcGGktZxAw2k22gCxJZFE
cgnBhBAq0iADDH27MKXmOvTwQxBDFHHEtVAAo6cyfAEDhU6EiWGwF2EIpRNM3EIBE+8e4oUNNjbhhbyt
7FClFVUyWi+yOzbySCXaUNpsgKtcW2QRXXTBpUory9ikx01UA7CnMzA5Q5GlClkqNENccy1NQ3Jx082K
MJQTQw0+wHAAIUnUc08++/Tzz65MRO0/wV4k5kVhhKH/DoW+HIJoF0jT2GQXXLoSMiP5MnLlSFfuwDMy
WWYZSqbMsMJvkV58AcYT8FptlY0vefmlRpcKkcBMXF9jypZcdHmTogvlJIQQOZ0QUj5Ak1V2WWabPevE
/zYRjJhDqU00FE5+BEMgXLr1dhFKFTH1D5fkM/dYjY4UpE5B2qNlFkBEm0XU+rAaAL80Cnpx38BgeOG/
Ms74ZWCkbMU1V17fdLO3OTMYlhAnUrKDSOGctfhijDPuM5IvX9iX2hhCCeYMShlRpJZaJJBgSgILtCWr
VVYpNyNMi2xlFsouEgSqDNoVBBAIbZr3JPmgvIqzP8ooqFBqD43xp59kJTirW28t/8SWRRTOhaIKg3XY
4WFTyrRijcs2+2y0zzKhy2j1jVETMHA52daY/zCzwG4XgfkkmcuVRT4iW5GlFVheiYWQCU0wQQNBCNEg
EVtscoJelIhCarZF8n2B6cGofQG1MsAYeOqtrp4yazh/s1PYYcGW5VJM05Z9dtppz5fHtjd/wZdFakFQ
5YMLwbv3rAZYxfijbp5XplZcKeIVDUwoY3qRNKgzWOtt+ftvz4pCWpbMeWQaZFjLGB2TX7yqRZHTp9xa
Qwwflh9isc2t/X7881dWEc1f4LLLFxyEDbpgTfDM5DuUse9l9tLJKlwDm5bIZF6zaMWlOPIBxU1PUmxL
QwZN8P+BP6zEPkUpRMxWIZNaKG1z03pRT6RGOq6gDGuLUIQtfEORr81PfhIrEtn090MgBnE5jNiSq9gA
nhggBAZu0k0hamEIlB0MZVnBSa5Co6ZQiapINJvFhFDTpSP6bxPTU1wiOKMSlZDQTAkqhAoLtZCfiG5g
KPCKE2Voi1pYT4/xk1/8wBYcHwpRkIMkJFlU6CrwwMAYxzgGDHyVi0XgMYoqU9m4HmgmNBniFqGhyd8y
4pKdTG9LYRSjSBQngfo8yWgtcSKucmIIpQEmBv/qiehqtAkwMMIrEkAZyjJgPT62Todg61shjXlMZGJF
c1zSHDEYeYzPvSmSuJKAVpRywCf/KgU3EGKKTf5AwU+6pBbSG2UiC6MakYTgePVZZVKu5rvWKKUXRRSj
akQHjCNuQpdgaWVrbuEEJwhTh4RYBQSTeVCEFrIWPVFcCOoUghcskpFsKIMuFgG5AsYwN0vZD1MglAhO
3gQARSoKGHwhSlcBpkc/+aAIsVLQWuQGZfIcJRh7hAJSsmGfY6kaJed3k+4lVKhDzZ8ErrfHD+TLmcbY
BIUiuZ+u3FE3hoDcJjfpTXIdBX0o2IUGw+ivF6DTBBlo59EOSENbiAsMNu2R+Pr1gkggpRYT4Arwehq2
sRFVr3udncpuQSc9+mdLLypDCCyqTYNeRYYx1U0iNsmm0eDk/yg3wgQmeEG9DIZxpYUVRCAvZ7da4CIS
kNpFmEbJIzbsK0YwAJJLJjDXWnDFTHaNWabyxFfc5tZilLQVJX/5xS01NW/ZNIRc8ZgbRdQwNx9lSoK8
aTmXVJYTnMAEZqPyxZ9w1rNZiQQvfPEQTfTLXz/RhNtisIm4FmUC613vVlSWsglUsofb1W197TsiStr1
VhoIAXZ/EgICUSQRH8hNS3opw+Q+dbncTFMIT7IglzBiFyiY7nQxAQwy8saLijOBIOwAFjDwAhi80MS+
wooiX6hqVeDxxU4PPFfZAo+uLUHWfW18YxD1NL43dIr0fKK4KvW4JyEoEA2N3L4HQQ5NMf8xHkxm45IQ
h4kTnvAEjiwbCUbwRnoc1kBYdvEQYJQYBuJ5SIrNrGJg+MJAAOhWciUZ262st5pFoS+O7Xzn4VTkhhX6
jfTS2dAJbbCDAtLFgNz3USU393gOrE0Ii3mGG3GHyjmKSJajwmETpPcr3f1umEfs3TKn2cx68QWlIDUg
uZ1silpR2Yzx/GpYG6cWPOZx4p7iZy11qUu47sUj3wTS5uKEM7OByb0gyBdNYGLSYeYReiOCCy2bQBcR
8TKY95LmEY/4zCnWy4BS5YteUCrVNYwznGN9bnSbBWUDpnXiMPhFLqHWJ+nEUi4SYVEIhpDYbAxtpKlM
5U8TZFISgYr/LhjBiExTGyzdFXGaz+CLh4sY3N5VcRqA8W1Ro3rckrxKcneabpCHnCuvfZ9v+PyUQcWb
R/7riS8MqwsB+0ITfIngk4vicV4o2xPB4LkmvlvmNESk0k9hhNCFHpbRPuThejmDXh4SiUikChg2tbiK
Sy1uAyU3ub10iSJMJi6Rh13scp3AnsmouA229athLUMvDPsBextC5smmo0yu0hBgTHnnofCEtks9WqNH
IgSKiETgwaBpr3zZu3phfIp3wYhI8OS0/mND48ENKW8RaOuFmIDHtT520Id+1r4BHfUkFW9zhvXt9nas
IcJU2cru4iqz2rsweB4Mn//88UY/elqS/95wMJ/h8F6E98pxlwZwC2gXZuaW3Oqkda97PfTTD/voe+xn
cqo9MOD5L+uZUovXw34vR4mLQRZJGE/kpcyUagnvtbLArgAe+BD/kSKI35NygqdHaRaQL3StGi8prPWJ
voOjPgNMt7IDlnfzs9PbBN3ZHHQSiVzYpJbAi5njDtjDBACQC1AQhmEwhhoIwWPAvW0ZCMxrv97LikIA
O66APMWTuIc4OPtjwNNbufAQEAGpqf+jkA/ovK9jwQMMQjybNQ0glv4yJeBqlcJAkYbKhQUKk+5An+nq
BFDoQA8chmI4hhA0hpExGUboloPTpRRUQSDUii+EFB0JsTBMrl6gwf/82z8cxCcx2qwP0gDo+zghzEMb
kwA/ih5c0yAH9BexohAi6x1FsMAM5ITpsMJhaMRiyMIaiAFMyKXkyrrk4ica6oqDGy2BgDwvDMNauL+0
26xCSxXdaTaWcqhbgL4y1ENXxK2UIRZiWUDqQY0wGqPC4rNIshu8CLNkiwtGdMQsfKYu9Lo2g76vWEG9
2YowbEYZdEaTIb5BQZFeExDpWaHxwqzfIEA8fEVvHCqUkYCH4a8MqsXTS0VgsYUQUoQwszJM4IQqvMJH
fEQtPIZh8ITHMxkw/MGvMAQaqhS7QIo1hEaCnMEtkzb3wZIcLJQTk5QOohANmKv1usRvrMiEQpn/+Poa
CvlD/BsjQqQIoTgJXEi2RAyFK8RCSKyBYygGUEABLFOEVOs6fsIagKzAMzCKZvQ6Z9TJT0wuXVCcD0gg
9umVKuEJhmy2pmooPQKmRFgfi3zKY1qfcDTCcvSxH5MKoZiFgmq6yhKPdwSFRkTJYgjBECyGTsilljEL
4aGhfYqEMLnJlnjJnCxIZ8yak1mvmBrKXuEJj5klVOQwC1nKx6FIqCzMIIKt+CKEPjM9gIEKDRgNW2gI
HAmuWWkRsdRCG6iBYhgGTgAAGTwL4TEQXIAUMOiLuIQ6aOTGgVzD12Kv12IfdusvfTkxU+LBpfwlOzQZ
w9zNH5LKWOyNd8M///zLxQsZFp5IA77ABNTahHf0wJS0ARtYSVBoCcIsi7X0ll3Yi2QTPoHAsrn8Tmdk
r7uELZQhxzRYIYo6O4gUTA3wQd58T/whz1X4JT3rsWkcMocilrXRNUmhPDZItk7AwhqATjjQzGGYTrWw
G5rchV5AvvBziBIcSJ58xmYEAPHES/LcjbUBDP+pzYYKTOtxSvgcUdoR0QFwHOvZMwYkxAzAoOUEILDi
kXcMhbEk0M0EhU4Yjj+IqV7xhZ5oR02oMl5AvKNITd1sTddkr1mbEFLySEzrGj2aMxKd0tpRBdxMUVr7
IIrIBS1pKwA8xVaZjmHAzEc8UOxQC9PRBR/1Ev8MrLIzINIiJUgLnStFQNK5qpMPUJrl9FCltJ7iolJA
pR0UBZt2mYV1wVOnyLX/2xJ/OSJhcBpqWcnNFAZQGBhO2AUp3Yo/7bopgUlc8DH+bFMh7UachMaWcE3Y
agmVydPTctKGAkrrCVRZnZ3OIBoRms+HEqxFdUD9MwboRAgt3MIYgIEMPIOa1FSjyA28scr/646dE5Nc
0gqeZEHENDdVHSfgctUnvZBZ7da0qRx2WoXrMQRdyDUb9J8YsAEcwAGVDNZjOJQx0wS9q4uuKITXwRRD
wNNA2yD+/LdgEFIsM0MvdK3XwopQPEKRuL4nzQBvbdiyIRqTUAXuMR6mgAn/GwpEyoOBGsABOZADdhVB
YyAMNqisIE221sIKpQAAmrGDWdDX4+TXntCE6RAZTxA+Ui3VsODDYLo+qNhUh/1ZZzmJzpiP+sCJX8oA
yTuiGoADjtUBOcjM6ITXd0w/KhMTrkiTlljZpqAIUOXPNJDZUIiBYQgFMYG6XThZo2hFrmgc+ZEF3LSQ
sgJauU0WW90Mk6jVAaCTX1qfMiAGpsUBHQhcHIDOd12Id5S0INXA0oGgjGiFm0lRLzqi8kENT4CBYSCG
sU0/R5G9AkQLQHgYQRAbcQWmuJ1b0+UToa2PouEbcjSBNuzbdZWDwBXcqH0BnZM02NsKNXEJjbiDVrgF
/0QNAbXTtSMSW4TgO/WDlIBFixPFK1ACpg87Xentk5XYnrtFCcFaztSCg46d3R142ncVE76AiIeQLabg
3SS5A0DYs9MzJ8BwJpUUhhfouxHrxJsFiwFwgtAtq1WQgFWosekNYBFJiaFFCZVYBS5dph55gRqQ3cDd
AQjWATh4AblhjVrIqnptjaLo3XzVs+w9IlmC32MwhmGwvbwAhgi9X6+wA+QRYBcGFFs1YLxtI3gromPo
Xh2A4B3QARuAgTTYBTIpqH7EWt5thTtAVIroUnPqnIRQCL7rkR+JhDV7YSrOnzPinifJjBTCP9QihqbV
gTnYYRw4FP8ZE1vxCrvRYP+XSBJAOKqKMFf3NYhnKmHA2AQVsd8qzmPa4QwRYie+6S8uLggbeGAIloOQ
HVZYyaiu0CYMBoAkAV49q5P9XDt9kajNPJSa/ZFO1GNORps+LiuUKITj1LWIkgMdloNj4Jc0sKiNSiyU
3Q8M1oiWBZbrmWT0dMAkcteQ7bsUC7Hl7WRgvhiUKJ4/sAVbDKN0FdxINDFWxqPZ6l9TuRpDKCY2xtM9
0gAwSiRGJYYBhYPMHGEYyAtWgYEWe8ZgPmfZOY1ADAy/hYNGMjETwJom6q1G/owrQt9ZuIVOEiEl9pgA
wkxvhs4aOORC8eFP/ER0TmiNyRfxOkUQbioiyw8zcSD/FcQNIu7d9E0SmlkFViWljeVYjw3obq4BeNWn
Ca1QhU7pZUEBSemX/wGjTXAfiZ7oTLVni86qjEgSVkgSI84IPVob1DIG7nXgwJXdjnXnGJlWlFZppv4T
tsBYAGQbtokkBYMnaEZZpdgPmcFondZoVejghyqDwoMBG2Baot5hpx1clSQGAzlotW1quBaR7ECBReXX
LikDBWvlEtIK/GAKKMnp9K0gAGiF0bUQiji4NDgGsyZqpzXqpyWGXthJFY5rymaOuWbp1JDqDmIsZ+6t
mj4Kjmouo6AZcboePasFxL7h2V3tHC5qVDYBpa5s2Zbruf6FrxsUAAwBq8GVmPls/5uG5XombQDwujxa
Sp1MA7/dgTlYbh1e7tmVAzhIA2ecber+EDoyCpXRBUHTBf9tje6uZ5X9bXWErjtYWQBgLJMxbZ00AY3F
AeVGhjlABvje4Y4dXJ36zOrObxHx7nHqCUW4lf4tqJg5CvMGgGKmklwwhFko797FlGKuiOizBesJw0jQ
2EFe7vh2buiOzhGW7snWbxA3jgA3E0UwAQca8QCvaZpJklloEyyZnPLWaMCehT+4BdQ+OB8MQ41tYB3+
Xhzw5nYFZ30KcSJvDgn4g+6WgAno3yMvoSZX8RWfhUS4tRDIgE5J35x2DN8NJCzrchCsgQfecIEO8kYK
Kzgtcv80R1MnL6gkjxnvpmiXgFiZuAWogEhaeJ6dvvKMvgOBjISICsHZHVzozEwyJwbwgMs0T3S16G27
cXMHopskL4r5/JoWtTWHioVXwPOdvgNXuPLoPYrzdCYbMOpBJ/RneiZDZwNFX3W0AHAnxwlKEnAnLwqd
pRMMmpDeEIRML4L3SBI9/3Sj0JdjGHXoHlARPPVTJ4Y0SB9Wb3axOHKVuWpa79+9BqWG+Q2pIATG4PVN
53TfDaei+IUz+GfuLdBTT4hzXwgTcHZ2Bwskl/arqKSiIBY5IUfHxBDGSN+d3ukCd4mBYQMtZFoOH+EX
SSQy9hIT+PB2X3h5D4tZuHZcXx3/OREEI+bplQV3ABiYNIiBYXdnhBhWRMKyTyUj6Vt4kycOFqb3egem
eseQCpqYixfuCOOY4AIrJfwX6PvUEBjYk+95s8iIE20YoZ/4WIj5xpV5bvQ6P0ckNnjJO3xrn496rqCZ
oPcjq48fXed1o8eUcCJArWMEOWwVk/56qS/7scAUJxj6hmGMXS+CrQf3H/TC43aVxAhDs797sKB6q1f5
iW/7IlCPiyepm4s+z/M4Xh17vE98S8EUQBh6vo+Fv4/8v2eFo2dGnVR6T2CDFqtOxe98Akf7h3ECQAio
OSEJyZf8fucKnpTukvd817cXicGUqu8Zyl9xWGBwjNfEwlf4/9f3/JU1CXrHE3CPebFgRajvfeS/+Px1
AsHf4NT/CgJEfunHisBv/tHOfbCw++nf/ut/fgI3C97nfsW/ePEv/w7xfvNP/+LAfvVvf7UAdvePf/mf
f/qvf/u/f/zPf/3ff/7vf///////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////F/////////////////////////83poAAACH5BAkDAAAALAAA
AAAAAgACAAj/AAEIHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmy
pcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1q9evYMOK
HUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r9+/gAMLHky4sOHDiBMrXsy4sePHkCNLnky5suXL
mDNr3sy5s+fPoEOLHk26tOnTqFOrXs26tevXsGPLnk27tu3buHPr3s27t+/fwIMLH068uPHjyJMrX868
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
vvOt733zu9/+/jfAAy7wgRO84AY/OMITrvCFM7zhDn84xCMu8YlTvOIWvzjGM67xjXO84x7/OMhDLvKR
k1y8AQEAIfkECQMAAAAsAAAAAAACAAIACP8AAQgcSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGj
x48gQ4ocSbKkyZMoU6pcybKly5cwY8qcSbOmzZs4c+rcybOnz59AgwodSrSo0aNIkypdyrSp06dQo0qd
SrWq1atYs2rdyrWr169gw4odS7as2bNo06pdy7at27dw48qdS7eu3bt48+rdy7ev37+AAwseTLiw4cOI
EytezLix48eQI0ueTLmy5cuYM2vezLmz58+gQ4seTbq06dOoU6tezbq169ewY8ueTbu27du4c+vezbu3
79/AgwsfTry48ePIkytfzry58+fQo0ufTr269evYs2vfzr279+/gw4v/H0++vPnz6NOrX8++vfv38OPL
n0+/vv37+PPr38+/v///AAYo4IAEFmjggQgmqOCCDDbo4IMQRijhhBRWaOGFGGao4YYcdujhhyCGKOKI
JJbY2wCqmHidKiyqWB2LMLooHYyqoCjjcTS2COMAPLI4wI045ohijjUCadyQRCZpJHE0otijkisRsORl
T+6YZIsaESClQloS8OOUlFlZ45UxZtTlIes8U5CWf3QJ5mI8IoQkkXP6mOJBNjak5SEnbHLCOV0Gyuab
ifGo5UFk0kkjokUyRACfm2zCwjNdykLAHwMcSihimXZqkJCyzNJKK2IuWpCddyoEaaQsRCNoplp+/7lp
YV7GKisATaoyy667ygLlp0jmidAYkRZ7ApvIZjrrYYZ2uiWPA/AqLa+5JuTkmDVKcI4EBEwgwY9gFFss
C4C22eUffyxbWKfOdspEE/A2YY45zLQira+NJoTqOeiMccIJLPz77y/suICNCywUS2mlbqo7GKzNdhpv
vObsCg6vspC6kJC3YGHwuABvgo022mAj7hiCWqqpw3/Z6vIAsshLcTnTziKLLBtbOQA6WLDwzjsHb2Iw
Nu+QbLK40ZQrKMstG+olxANMHG/NorZiLbY+DvAHFtG48PPXRJNcMqvGQgPo0kzrVWuzL4caKo8372ov
xnIGWyOPEmCBxQk/a/8DdNFiHy0uq2Yju2XadrEb69Nrt5surtLaa/Wpde6Yqd6PEP212CS7ILQLng9+
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
oofhnyRWIn5RoiVmImzVoSZ2oid+IiiGoiiOIimWoimeIiqmoiquIiu2oiu+IizGoizOIi3Woi3eIi7m
oi7uIi/2oi/+IjAGozAOIzEWozEeIzImozIuIzM2ozM+IzRGozROIzVWozVeIzZmozZuIzd2ozd+IziG
oziOIzmWozmeIzqmozquIzu2ozu+IzzGozzOIz3Woz3e/yM+5qM+7iM/9qM//iNABqRADiRBFqRBHiRC
JqRCLiRDNqRDPiRERqRETiRFVqRFXiRGZqRGbiRHdqRHfiRIhqRIjiRJlqRJniRKpqRKriRLtqRLviRM
xqRMziRN1qRN3iRO5qRO7iRP9qRP/iRQBqVQDiVRFqVRHiVSJqVSLiVTNqVTPiVURqVUTiVVVqVVXiVW
ZqVWbiVXdqVXfiVYhqVYjiVZlqVZniVapqVariVbtqVbviVcxqVcziVd1qVd3iVe5qVe7iVf9qVf/iVg
BqZgDiZhFqZhHiZiJqZiLiZjNqZjPiZkRqZkTiZlVqZlXiZmZqZmbiZndqZnfiZohkmmaI4maZamaZ4m
aqamaq4ma7ama74mbMambM4mbdambd4mbuambu4mb/amb/4mcAancA4ncRancR4ncianci4nczancz6n
TQYEACH5BAkDAAAALAAAAAAAAgACAAj/AAEIHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8eP
IEOKHEmypMmTKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1
qtWrWLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq3cu3r9+/gAMLHky4sOHDiBMr
Xsy4sePHkCNLnky5suXLmDNr3sy5s+fPoEOLHk26tOnTqFOrXs26tevXsGPLnk27tu3buHPr3s27t+/f
wIMLH068uPHjyJMrX868ufPn0KNLn069uvXr2LNr3869u/fv4MOL/x9Pvrz58+jTq1/Pvr379/Djy59P
v779+/jz69/Pv7///wAGKOCABBZo4IEIJqjgggw26OCDEEYY3gCqSLgehRVamJ4qHGaoYXkYqjLAh+V1
yOGIJG5nYogrcphidibGyKKLL2IX440x1ngdizPi6BIBBOhYWosyntghiigBCaSQpB0pIo5QbqQkAJFE
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
J2gMhaJgAT1QjVqqn6+lJiMAhXIeZ/5pTXOOpw8RQHRGZ+VYTnTSQxTuENUVUGJORUQywhgop33O53Fa
JXnup+jMAz2s53QexX9GZ+YQpI9d2nDKJ0zkZ0s0aFXOp7Hwp4RazwDk5nmuZ3QygyrcwQEcwHvyGqUp
aIN+54i2Jnjq54SmqMaoAjNg6IVmAD0MAFh0aIcmQ5tRGoLGZ7Hkp306aEQuaIOqqJB2TNW46IDC6POA
RTLQ/yjDfehVOCiQvsSILueQVmm22IF5vuiAMsOHqt+leYWU+iiKWimZUgpYIBWMvmgGcGmCuiAB6ShX
RCkQlimdXqkqHOmRRmeSuqV7oqNrGMtx1qmgqlGFpik9+GeaYg6ckmZBgul3DiqkSgr0+KcSyGjVMMOA
WqpK+NhsjGikfuqjdCbVDQCmyuhT8KlrBCqoruqk8FrmIAmVsqqsGkm5zaqtslSb3qqu+pOf7qqvNhOq
/qqwDiuxFquxHiuyJquyLiuzNquzPiu0Rqu0Tiu1Vqu1Xiu2Zqu2biu3dqu3fiu4hqu4jiu5lqu5niu6
pqu6riu7tqu7viu8xqu8ziu91v+rvd4rvuarvu4rv/arv/4rwAaswA4swRaswR4swiaswi4swzaswz4s
xEasxE4sxVasxV4sxmasxm4sx3asx34syIasyI4syZasyZ4syqasyq4sy7asy74szMaszM4szdaszd4s
zuaszu4sz/asz/4s0Aat0A4t0Rat0R4t0iat0i4t0zat0z4t1Eat1E4t1Vat1V4t1mat1m4t13at134t
2Iat2I4t2Zat2Z4t2qat2q4t27at274t3Mat3M4t3dat3d4t3uat3u4t3/at3/4t4Aau4A4u4Rau4R4u
4iau4i4u4zau4z4u5Eau5E4u5Vau5V4u5mau5m4u53au535jLuiGruiOLumWrumeLuqmruquLuu2ruu+
LuzGruzOLu3Wru3eLu7mru7uLu/2ru/+LvAGr/AOL/EWr/EeL/Imr/IuL/M2r/M+L/RGr/ROL/VWr/Ve
L/Zmr/ZuL/d2r/f+UEAAACH5BAkDAEsALAAAAAAAAgAChv/bBf/cDf/dFP/eG//lBv/qBf/jDP/pC//0
BP/yDP/8DP/iFP/pFP/iHP/qHP/0E//+E//zHP//Hv/fI//fKf/jJP/qJP/iLP/rK//yJf//I//yLP//
K//iNP/sNP/jO//rPP/yNP//M//yO//+PP/lQ//rRP/mTP/rS//zQ///Qv/zTP/+TP/nVv/rVP/nWv/q
XP/xVP//VP/yW///W//tYv/ta//yY///ZP/za//+a//vcf/0c//+dP/0ev/9e//2hP/+g//3if/+i//+
k///nP//o///rP//tP//vf//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/
gEuCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7
vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3
+Pn6+/z9/v8AAwocSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU6pcybKl
y5cwY8qcSbOmzZs4c+rcybOnz59AgwodSrSo0aNIkypdyrSp06dQo0qdSrWq1atYs2rdyrWr169gw4od
S7as2bNo06pdy7at27dw/+PKnUu3rt27ePPq3cu3r9+/gPEJCBC4b4AAAgrrPXxYMV7GjB3XhRxZclzG
gxFXtoyW8uHMlAdz7gxa8+fSmEeXxczaM+vErgaonul5sADUqFkN2C17NkzXkDOXhq1qgIAGu33HBB4a
cqkTJwod591b+cvaCwwEbyxqwAQVMmiooG6cN3HrLTELWLDgAIMFAJyP+k6jPgsKu6cPaIAc/UvbARjA
HgPvAVhKB/WFJ8N4+wlQHm/+iWRcIowJSCCB7G0mygkJJjjBbvwht0ByEYLkICKfBTDghQwIyJ0jhEny
Qgv11ShDB+SNiFx1JW6U33mDQLYAixhqF6Mjtx1pyP8AHRBSQw0vvCCDgjRM+SF5DpLYY0bG3TZhIYxl
R+R7C7zYyGlK3haCCii8AAMMUUIpZYf2dYDffjtmyeOWFHlZHpBCGiDgkAwcUGYkrtkmQAgytCknlFC2
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
CQMASgAsAAAAAAACAAKG/9sF/9wN/90U/94b/+QG/+oF/+ML/+kM//QM//0K/+IU/+kU/+Mc/+oc//cU
//0U//Md//8e/98j/98p/+Mk/+ok/+Es/+sr//Mk//8j//Is//8r/+I0/+w0/+M7/+s8//I0//8z//I7
//48/+VD/+tE/+ZM/+xM//RE//5C//NM//5M/+dW/+tU/+db/+pc//FT//9U//Jc//9b/+1i/+5r//Jk
//9k//Nr//5r/+9x//R0//10//V7//17//aD//2E//eI//6L//6U//+c//+j//+s//+0//+8///AAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/+ASoKDhIWGh4iJiouMjY6PkJGS
k5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3O
z9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/wADChxIsKDBgwgT
KlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzBjypxJs6bNmzhz6tzJs6fP
n0CDCh1KtKjRo0iTKl3KtKnTp1CjSp1KtarVq1izat3KtavXr2DDih1LtqzZs2jTql3Ltq3bt2//A8Cd
20lAAAF0816yG6Cv3r+S+goGTLiR4MOFEx86fLexYsWC+TLua/dx3siYJ0+2/FayZs+N784awHkn5cN8
QQ+ONaB1adMCVDPmK6u169c6NeuWm8qFIdu2cefErEDBAdB4U7FYTmiAAOCkheM8rGDBAgWxV6PiEKN7
CgrOBzCw/Vz69L4GqlvH7hjVhBUz4sfgIL61AvHPo5unSdmA9fUKaGcKCTHIN0MMrY0HHQP71STYf/8p
YIBfqLBQYHwH0vccA7GNd59+DZKUHCLoVafedROOWIoLLhR4YXcSJAidbQyGKFJ5iQhW3HUABkgKizWw
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
tmzbtm77tnAbt3I7t3Rbt3Z7t3ibt3q7t3zbt377t4AbuII7uIRbuIZ7uIibuIq7uIzbuI77uJAbuZI7
uZRbuZZ7uZibuZq7uZzbuZ77uaAbuqI7uqRbuqZ7uqibuqq7uqzbuq77urAbu7I7u7Rbu7Z7u7ibu7q7
u7zbu777u8AbvMI7vMRbvMZ7vMibvMq7vMzbvM77vNAbvdI7vdRbvdZ7vdibvdq7vdzbvd77veAbvuI7
vuRbvuZ7vuibvuprvYEAACH5BAkDAEgALAAAAAAAAgAChv/bBf/cDf/dFP/eG//kBv/pBf/jDP/pDv/x
C//8Cv/iFP/pE//jHP/qHP/yFP//E//yG///Hv/fI//fKf/iJP/qJP/hLP/rK//yJP//I//yLP//K//i
NP/rNP/jO//rPP/yNP//M//yO///PP/lQ//rRP/mTP/sTP/0RP/+Q//zTP//TP/nVv/rVP/nW//qXP/y
VP//Vf/yW///W//tYv/ua//yY///ZP/za//+a//vcf/0c//9dP/1e//8e//2gv/9hP/+jP//k///nP//
o///rP//s///vQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/
gEiCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7
vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3
+Pn6+/z9/v8AAwocSLCgwYMIEypcyLChw4cQI0qcSLGixYsYM2rcyLGjx48gQ4ocSbKkyZMoU6pcybKl
y5cwY8qcSbOmzZs4c+rcybOnz59AgwodSrSo0aNIkypdyrSp06dQo0qdSrWq1atYs2rdyrWr169gCwoI
ELbsrrFm09oKwJas2rew/9qihUtX1di2bOvqNXUXb4C5ewNv8ktYrlvBiCEZXlz4cOLHiRo37gu5sqK+
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
rlTxreqqCRAAqsO6pg2ArHE6oXT6D46xrvgaKNO6pouKrfSKEL2arwKrCQHQrsVKrfL6HtQ1sAw7aJq6
pm8xqITKfGvCpw17sZMQAA0QARCAfnHSABRbsc+KsevKOci3oiSbsjBylQmrsi77sjAbszI7szRbszZ7
szibszq7szzbsz77s0AbtEI7tERbtEZ7tEib/7RKu7RM27RO+7RQG7VSO7VUW7VWe7VYm7Vau7Vc27Ve
+7VgG7ZiO7ZkW7Zme7Zom7Zqu7Zs27Zu+7ZwG7dyO7d0W7d2e7d4m7d6u7d827d++7eAG7iCO7iEW7iG
e7iIm7iKu7iM27iO+7iQG7mSO7mUW7mWe7mYm7mau7mc27me+7mgG7qiO7qkW7qme7qom7qqu7qs27qu
+7qwG7uyO7u0W7u2e7u4m7u6u7u827u++7vAG7zCO7zEW7zGe7zIm7zKu7zM27zO+7zQG73SO73UW73W
e73Ym73au73c273e+73gG77iO77kW77me77om77qu77s277u+77wG7/yO0+/9Fu/9nu/+Ju/+ru//Nu/
/vu/ABzAAjzABFzABnzACJzACrzADNzADvzAEBzBEjzBFFzBFnzBGJzBGrzBHNzBHvzBIBzCIjzCJFzC
whsIACH5BAkDAEcALAAAAAAAAgAChv/bBP/cDP/dFP/eHP/kBv/pBv/jDP/qDP/1Cv/9C//jFP/pE//i
HP/qHP/zEv/+E//zG///Hv/fI//fKv/iJP/qJP/iLP/rK//yJP//I//yLP//K//iNP/rNP/jO//rPP/y
NP//NP/zO//+PP/lQ//rRP/mTP/sTP/zRP/+Qv/zS///S//nVv/rVP/nW//qXf/xVP//VP/yXP//W//t
Yv/ua//yY///Y//za//+a//vcv/0c//9dP/0e//8fP/2g//8hP/+jP//k///nP//ov//q///swAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/gEeCg4SFhoeIiYqL
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
dccVADAAFFoPGNAASQeNneCc5SmjNfhQQEEJKxCiMbCj12IaE3WiwBmXWNGEARABFEoPIOAW8GOjzceh
TVijf4Mw36AZItqjOyExDSqk2lmkTSgADZABv3MeooGkEaAyTTijzumcr3mezrIJPGGlK2Aa6BCfMsml
eNoKwRABSCqmG3AeG9CnGTAAaUqLHgOlAloMpvEB7BmfjfebeRqpocCiYlqpfmqpENCONdaEGeqkEHH/
EJlyGmkiqaSqChKQAX0qqGaKqgJQqEUHpa+xFRyipUFaqrZqChIAAZa6qxmgAK7KdwS4VHY6MhR1q8aK
PbqaqqnaqonKgc+pqI/aHnd6rNSaCZTKq2f6q0UHHwBmotX6rZ8woag6rpXKACb5KoEErurKLpYqqGJ6
rq6iJus6r69UqREQDA3Ap5narPPhrfRKrwLAp8x6OGqhrW4Cqf96q7bSqob6rAn7sKvhsBA7sRRbsRZ7
sRibsRq7sRzbsR77sSAbsiI7siRbsiZ7siibsiq7sizbsi77sjAbszI7szRbszZ7szibszq7szzbsz77
s0AbtEI7tERbtEZ7tEib/7RKu7RM27RO+7RQG7VSO7VUW7VWe7VYm7Vau7Vc27Ve+7VgG7ZiO7ZkW7Zm
e7Zom7Zqu7Zs27Zu+7ZwG7dyO7d0W7d2e7d4m7d6u7d827d++7eAG7iCO7iEW7iGe7iIm7iKu7iM27iO
+7iQG7mSO7mUW7mWe7mYm7mau7mc27me+7mgG7qiO7qkW7qme7qom7qqu7qs27qu+7qwG7uyO7u0W7u2
e7u4m7u6u7u827u++7vAG7zCO7zEW7zGe7zIm7zKu7zM27zO+7zQG73SO73UW73We73Ym73au73c273e
+73gG77iO77kW77me77om77qu77s277u+77wG7/yOxm/9Fu/9nu/+Ju/+ru//Nu//vu/ABzA4RsIACH5
BAkDAEYALAAAAAAAAgAChv/bBP/cDP/dFP/eG//jBf/jDf/pDf/0DP/9C//jFP/pE//jHP/qHP/1Ef/9
Ev/0Hf//Hv/fI//fKv/iJP/qJP/iLP/rK//yJf//I//yLP//K//iNP/rNP/jO//rPP/zNP//NP/zPP//
Pv/lQ//qRP/mS//rTP/zRP/+Q//zS///Sv/nVv/rVP/nXP/qXf/xVP//Vf/yXP//W//tYv/ua//yY///
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
aQsRQJRzKZJhyZTaMZEUUZW1k2WNuZmII5dF+ZVHSZkc0onnCJAcyZmoWQhzSZcJUJgekpmnmZqyOQmr
+Zl1KZobEpCzuZuy8ACQuZVyGZrLspi8WZyHsABFGSLAQAwDMIzK0pfGyZsD8ABHGZ3WWTcqeZ3auZ3c
2Z3e+Z3gGZ7iOZ7kWZ7meZ7omZ7quZ7s2Z7u+Z7wGZ/yOZ/0Wf+f9nmf+Jmf+rmf/Nmf/vmfABqgAjqg
BFqgBnqgCJqgCrqgDNqgDvqgEBqhEjqhFFqhFnqhGJqhGrqhHNqhHvqhIBqiIjqiJFqiJnqiKJqiKrqi
LNqiLvqiMBqjMjqjNFqjNnqjOJqjOrqjPNqjPvqjQBqkQjqkRFqkRnqkSJqkSrqkTNqkTvqkUBqlUjql
VFqlVnqlWJqlWrqlXNqlXvqlYBqmYjqmZFqmZnqmaJqmarqmbNqmbvqmcBqncjqndFqndnqneJqnerqn
fNqnfvqngBqogjqohFqohnqoiJqoirqojNqojvqokBqpkjqplFqplnqpmJqpmrqpnNqpnvo3qaAaqqI6
qqRaqqZ6qqiaqqq6qqzaqq76qrAaq7I6q7Raq7Z6q7iaq7q6q7zaq776q8AarO4ZCAAh+QQJAwBHACwA
AAAAAAIAAob/2wT/3Av/3RT/3hz/5AX/6wf/5A3/6gz/8gr//w3/4xT/6RT/4xz/6h3/9hD//RL/8xv/
/x7/3yP/3yn/4yT/6iT/4iz/6yv/8iX//yL/8Sz//yv/4jT/6jT/4zv/6jz/8jP//zL/8zz//z3/5UT/
6kT/5kr/60z/80T//kT/8kv//kz/51b/61T/51z/6lz/8VT//1X/8Vz//1z/7WL/7Wv/8mP//2P/82r/
/Wv/73D/83P//XT/9Hv//Xv/9oP//IT/94j//on//pP//5z//6T//6gAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/4BHgoOEhYaHiImKi4yNjo+QkZKTlJWWl5iZ
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
z772t8/97nv/++APv/jHT/7ym//86E+/+tfP/va7//3wj7/850//+tvZ//74z7/+98///vv//wAYgAI4
gARYgAZ4gAiYgAq4gAzYgA74gBAYgRI4gRRYgRZ4gRiYgRq4gRzYgR74gSAYgiI4giRYgiZ4giiYgiq4
gizYgi74gjAYgzI4gzRYgzZ4gziYgzq4gzzYgz74g0AYhEI4hERYhEZ4hEiYhEq4hEzYhE74hFAYhVI4
hVRYhVZ4hViYhVq4hVzYhV74hWAYhmI4hmRYhmZ4hmiYhmq4hmzYhm74hnAYh3I4h3RYh3Z4h3iYh3q4
h3zYh374h4AYiII4iIRYiOcUCAAh+QQJAwBBACwAAAAAAAIAAob/2wT/3Ar/3RT/3hz/5AX/6Qf/5Az/
6Q3/4xT/6RT/4xz/6Rz/9Rv//h7/3yP/3yr/4yT/6iX/4iz/7Cv/8iX//yL/8iz//yz/4jT/6jT/4zv/
6zz/8zL//zD/9Dz//jz/5UT/6kT/5kr/60v/9ET//UH/8Uz//kz/51b/7FT/51v/6lz/8FX//1T/8Vz/
/1v/7WL/7mv/8mP//2T/82v//Wv/73L/83P//HT/9Hv//Xz/9oP//YP//Ir//5P//53//6MAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAH/4BBgoOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3
uLm6u7y9vr/AwcLDxMXGx8jJysvMzc7P0NHS09TV1tfY2drb3N3e3+Dh4uPk5ebn6Onq6+zt7u/w8fLz
9PX29/j5+vv8/f7/AAMKHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOq
XMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0Kb4ACBA4nQoOQQIDAahq1QY1QdSt
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
xWTErYQ9ab0g19NczakCyZsdUiOA0Rd9AZi82rm9DS4AAiigDLt93OdpMqSd3NH9QtJ93dm93d393eE9
3uV93um93u393vE93/V93/m93/393wE+4AV+4Am+4A3+4BE+4RV+4Rm+4R3+4SE+4iV+4im+4i3+4jE+
4zV+4zm+4z3+40E+5EV+5Em+5E3+5FE+5VV+5Vm+5V3+5WE+5mV+5mm+5m3+5nE+53V+53m+533+54E+
6IV+6Im+6I3+6JE+6ZV+6Zm+6Z3+6aE+6qV+6qm+6q3+6rE+67V+67m+673+68E+7MV+7Mm+7M3+7NE+
7dV+7dm+7d3+7eFgPu7lfu7pvu7t/u7xPu/1fu/5vu/9/u8BP/AFf/AJv/AN//ARP/EVf/EZv/Ed//Eh
P/Ilf/Ipv/It//IxP/M1f/M5v/M9//NBP/RFf/RJv/RN//RRP/VVf/VZv/XvNQgAACH5BAkDAD0ALAAA
AAAAAgAChf/bA//cCv/dE//eHv/jBf/jDP/oCP/iFP/oE//jG//pHP/0Hv/5H//fI//fKv/jJP/pJf/h
LP/rLP/yI//+If/zLP/+K//iNP/qM//jO//qPP/zMv/9Nf/zPf/8O//lRP/pRP/nSv/qTP/yRf/7Qv/y
Tf/7TP/nVv/rU//nW//qXP/xU///U//xXP//Wv/sY//tav/zY///Zf/0a//9bf/vcf/yc//7cv/0fP/7
ev/2gv/9hP//iQAAAAAAAAAAAAb/wJ5wSCwaj8ikcslsOp/QqHRKrVqv2Kx2y+16v+CweEwum8/otHrN
brvf8Lh8Tq/b7/i8fs/v+/+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmq
q6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm
5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/wCnHTgQsOCuAwUMKrx1AAHBhRBjIUwYsaKrgYJUWNzIKoWK
FBxDmvqYAuSRCBdEqryU4sWLki+GfJgpAkSElTgllWxJ8sUJ/xEsgpZImbNoI5cwW54IETToB6NQFe1s
+fLECRNNTWSIytVQ0qpMm7IosbWrWUAfX7YsiUIsixBEz8rVA1PtS58n2rJw8XSu3ztJ1wr2qEIFi75/
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
tmM99mNBNmRFdmRJtmRN9mRRNmVVdmVZtmVd9mVhNmZldmZptmZt9mZxNmd1dmd5tmd99meBNmiFdmiJ
tmiN9miRNmmVdmmZtmmd9mmhNmqldmqptmqt9mqxNmu1dmu5tmu99mvBNmzFdmzJtmzN9mzRNm3Vdm3Z
tm3d9m3hNm7ldm7pf7Zu7fZu8TZv9XZv+bZv/fZvATdwBXdwCbdwDfdwETdxFXdxGbdxHfdxITdyJXdy
KbdyLfdyMTdzNXdzObdzPfdzQTd0RXd0Sbd0Tfd0UTd1VXd1Wbd1Xfd1YTd2ZXd2abd2bfd2cTd3dXd3
ebd3ffd3gTd4hXd4ibd4jbdogwAAIfkECQMAMwAsAAAAAAACAAKF/9sD/9wK/90U/94c/+IF/+MM/+IV
/+gQ/+Ic/+sd//Mf/98j/98p/+Mk/+kl/+Is/+os//Ml//sm//Iq//4q/+M0/+ky/+M7/+o8//Aw//E9
/+VE/+lE/+dK/+pM//JD//FN/+dX/+tT/+da/+pc//FU//lS//Jd/+xj/+1q//Nj//xi//Vs//lu/+9x
//J0//hx//N6//aCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABv/AmXBILBqP
yKRyyWw6n9CodEqtWq/YrHbL7Xq/4LB4TC6bz+i0es1uu9/wuHxOr9vv+Lx+z+/7/4CBgoOEhYaHiImK
i4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr/AwcLDxMXG
x8jJysvMzc7P0NHS09TV1tfY2drb3N3e3+Dh4uPk5ebn6Onq6+zt7u/w8fLz9PX29/j5+vuJBvz/xgr4
A0gQmIGBBRPyKqCwocOHECNKnJiFBAoSFDOiIkFiBMYiG0JW0EgyE8cRFz+S6OABhIcNJWNWOskRxYib
IUyYAHFBps//SDdt2uQYQoTODj+TNkIZVGhRnSZgKp2KCIXNmzdJ5NQJQirVr4KsBg1KQkQJqD3BqvVT
8ypWjhxFiPC6tu4dmkzFkjixV+uGtHYDy7FYE2UKFy6swiVKV7BjNkMNx5BB2QXfxSsfa25j8TDlz4nh
DuW4ubQaF5M/y3CxuOlH07DJWHXxOUbKk7dRxN795eLNFKlDk+ZNHMzY2TJepIBbvLkXtx5TKE/pvLqW
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
wwBxiHE6aHAa2AHgkGaEOenhLfQZN7Cs03MkzVI8bxjPoUr0hrb74y40OhiQZDKWQ/1Qif++ita1husk
KFgbVXPhYaW4QAc8IJUqtDnWDy01Ld6GgGhi7NSRQx6bRYnfKegnHcX2p//m2dczDwDbXu7EdjrJ5g3c
MrzRXceTrP3PYyfb1t6OklPZrJ9ydICbvomKOtKtbj711aU7Nu8ByrJgYOeixqohR1Xz7cxX8Ynbyu5y
s1mRgEEdwM9XUSYzw8MEDNh0wAk/pYG5jT0DwyMBtem0gplJ8IxT5ksI97gfxRnNiLKhOxWH7jnTK5d6
s5w3kX45DLnt73lw+1UOSAB6es1IjC+43jHxxXh+vsvYulsUCEhAAiBggQYMh8rJU/kumr7gdjYUzlEf
9AAkHoEJGL3/TzcXey5KunN2sMPssRaA1a+e97ajfJthdzqZ6x5nAaA97wq4ugDsZXGmM/OOY2h5xwOf
4cHjPe9X3zuNdQ4/jcI68kQOQ18TYHjLxzuyl4OLzztv3WRsPe8YC3g/U59w7ezJ1HaBfexl/4DL4573
V9FO74EffOEPn/jFN/7xkZ985S+f+c13/vOhH33pT5/61bf+9bGffe1vn/vd9/73wR9+8Y+f/OU3//nR
n371r5/97Xf/++Eff/nPn/71t//98Z9//e+f//33//8BMAAFcAAJsAAN8AARMAEVcAEZsAEd8AEhMAIl
cAIpsAIt8AIxMAM1cAM5sAM98ANBMARFi3AESbAETfAEUTAFVXAFWbAFXfAFYTAGZXAGabAGbfAGcTAH
dXAHebAHffAHgTAIhXAIibAIjfAIkTAJlXAJmbAJnfAJoTAKpXAKqbAKrfAKsTALtXALubALvfALwTAM
xXAMybAMzfAM0TAN1XAN2bAN3fAN4TAO5XAO6bAO7fAO8TAP9XAP+ZD6ggAAIfkECQMAKQAsAAAAAAAC
AAKF/9sE/90M/90U/94c/+EF/+IL/+IV/+gS/+Mb/+gb/98j/98q/+Qk/+kk/+Is/+kr//Un//kn/+M0
/+kz/+M7/+o8/+VE/+lF/+dK/+pL//BO/+dW/+tT/+da/+pb//BV//Jc/+xj/+1q//Nk//Rr/+9x//F0
//N8//WAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAABv/AlHBILBqPyKRyyWw6n9CodEqtWq/YrHbL7Xq/4LB4TC6bz+i0es1uu9/w
uHxOr9vv+Lx+z+/7/4CBgoOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2u
r7CxsrO0tba3uLm6u7y9vr/AwcLDxMXGx8jJysvMzc7P0NHS09TV1tfY2drb3N3e3+Dh4uPk5ebn6Onq
6+zt7u/w8fLz9PX29/j5+vv8/f7/AAMKHEiwoMGDCO95SMiQVYgOEI9gmNiw4iaIITx0INKBw0QLFkNe
gtjhYUmSHTJgACmypSQPIR6ajAlRJQWXOB+RlIlyg8r/nEAZYTxJcwOGn0GTHqLJEyKHpxmUSh1kcmhG
Dxw6YJ3K1U/TmB7CioW4oatZPDNDiChhgoRYmCY5nJ0rZ+faEyjyihg7k65fN3BFmMib98TesDJN/l28
RvAJvIUzDsW4kLFlMzHvojhRYmzJEJdDl0EZogRnyRtFqx6jkWnpvRlBr57tZebbmIpp69aCEmLYqBpT
7x5uJbHvqELCEl8+ZSdJucyjU0GJFbn060+YaoWOvfsS51u9i09CtPr4dggiwUTJ/bw6BOl1Dm3v/nzi
3/XzB9+evz5NrcL1N95OHlgnoHdMhXegeNQtOOBQZTno3WcRSdhdVZVZiJ1MGWoo/91+AXrIHFMiYrde
hyUSByCKKQ5XVYt5WMASPUTBiIeMMtbDoY134JijPCjx2KOPM75TEotCwkEkjvHkluQcSzKpBgVU3vQL
Rk/W4SOVUfo4RpUUFLmLk1kq6eMFXXoZhgVg/riLb2XKsSSXUX4kRphc/vIQknGiQWSYW8qYQQZPQVUG
SwbiQmafaaS5JAcegBApVlKOQSgHidaCJaONyojnnD5GCkIIknLQJRiYQoUBLlpxqoajMqKJIwgjgGCr
B7C6mQWhlyJFC1iuvpqroB7Uaqupw4ppxaDMrkqErquUFOwaXdKJI6S0erBSstCGcYErFU4rLJtV1okt
stx2+/+FBd+qkpG4beBYbpeXpkskGeqOohG88YIJaJ3W2ZsvFwN/8hC//c6bJppJJDsGw6aEi7Cw/8LK
xLBiFMxJiBP7ma4TGIPBLinvdkztnzlGGUWua44im8njqnmEsk1YDEa7n0gM8xlLiuyoyKC8vLPHGmuR
JtCecDz0oTSveaoXTVei9NKQPN1F1JPwSXXVPUOtidBbW6Ly1ZlMHfYkXROMidlnS5K2LGynoXXbPssM
C9hpbBBhB3rT3Wml3hSld4R+82z3NXr7JsLiHgw+d+HrHi5N4hvwvYFaew3eN+REY61M5R0VgVvjjnP+
t+fHkHUEVpo/brrTqA9Tuda+af7/OhuAT2LlHDor0Th9txNdCZtybAA8Ex4FH2/Rh3C5exuVKz8I84Sw
Ky9g0hdCPSBVggAVB3iqETfnFzjrx/Z9AHoBoR/QWgHxaIwP+aDrHzHoREdlAPEbsZ8fJqEjIEEAw5Q9
3OEITetDE57mhcD8ycoNK1HE/z7wgVqNgAI4K2AaJMBBDlbgAhUIYQdHWAFrZcACzEKfFu6niAtwgIIv
zMDzNIgGCTiAgwvoYAWecED9YeCBZ8CU+Qrhwg9g6gIEpKEabriAHHLQCoBKYf+wwCs4HO8JgzKiDJOo
xBreEIcEW9/IyFDFNrhwWYZyXhfRkEMH5HABkTvKFKtQRjUQ/wqNGVyjGySQMTGSsRAz1CPaLkDIU8xR
kC3UXx4/EUhEUmJ9KQxFIx35SEjqTxfwiQ8lz8esRcYik5rc5B86OQtQIiABRSihKPtQyFeYEpRDUOUq
z3dITbzSAPBpQCZTIMtZvmeXQjAlAyYwSV+yA5QT2KEx64EAByhzmfS4ITTt8cxpyqOa1symNrfJzW56
85vgDKc4x0nOcprznEpUgAKUoIAFtFOdTXynO9s5T3SKw53xlCcT4GhPacgTnk08ggIY0E9rMIABDoDn
AxzgACGos50FzYYCHDCBCTjgoA8laESx8YAHWHSgF30oPzdKDYbiE57rJGkq/MUmcvnrpf8sLWYSGPBQ
kKo0F85boEthuk91MqCeNw1GuYaqRoHWVJ1BPQZMi+rQNzZRo0lFRkyrpEwqpSCgUV3GUoUAJg5aNavL
2Gn5dvpVsDKDSuvDwLxkatZiHEWtC2RrW4exVLnOFRhxbZNd79qLT+W0rHyV6l/JFVitVqmwzggfYpsB
2C5uQDmLvcQBUWjJZk1kUCjUn0p+uKtLXTGyihAUs0Z7v83iD38WWMkJt4WmEJbwtSGs6BImgMKn1BK0
fRAtae/3kdSODQk2ZKgDOircCSx0uB19wEEZgIAJuLBQuF0Eu3YrRNP+lgu4hM8QMvCW6CaisszC1Gav
ewaYuM67eyD/baF4S94ziOBF6CVEeHllXckxQQAC2EJpShCT+P6hleFNFWbftoRXatcJwCwCTNhSAhH4
1w+QRKEGCvUBzKKWs0tY7nIzCVUslEQwJeAv3h5Mh/DCECrNitUJPXfQV3JhKGt5b8lIXAdLvtBWtBJv
JwmJRArwUQkCMIAB8tsFnuCGJjSuw2hf2L4ROBkEFaYfj0MIB7iQRlpJnsOlKAjlCtqqwho4YQn3egaM
/GfEWTYaD7PYPhy7+YggxCbvmiK/NE8hd0cgJLPc7OYKE5LManCNCDrgYDtDDc9EqKwG2mysLnvSDrmB
rKEJti11sa99i6YVjik4KK9MOmOVFhQR/zJQwQCSgAQUbLMRw3zJKQgglJ82BJGo6+RT2xoEpP5AmKmA
gIMOt6FWOEABYh0HHOWPWZm2ta1HoONHM8GiLcaCAQowbGLzb8lPMSKtlC1AXLeaCkTOArWpbe03jDbM
mEo2t5kdQTmMu9rlXsN8V23ECi77yUOUArm3MG5hx1vepM4iBzQQ5iYL0MkjUNAUxs2FcU9bEhMoqCVT
PeFFV5hWCEf4eZPAcH6/exJPPOegmEzwQS06vKZe9saPEIBxB8Dj/qaEBOQMzpGHueAwHPlTUu7klR+h
3wdoOLwr0ctvrm/gi053qp6CmNFhJXlUaPkBhD30WSQT0KIk1MlJzf9kSY0gBF//z4Db7YQABCDI06Z6
Lq7uzZlnAOeMDmDPq7OSUOeb40I2OzCciURt3vCGFSA1xm393qf3dkkUmYYEWglNCbxRAhjkAAhsDRYh
5uruURdA1a3+QUB0WEBfTEEH/0eop4dFb8mqtBXMLoCXXyHcn3AAIW/rBqRGJ+RH4GAyvXp0yT/9WT6q
u82icHYDuL4XDqDAt/8w0JQOx6SO/7HoF0DRD/b+Kd7LlKNCbew5nr0Ax7cDAQhgiGEG3tl6QOlwHh/9
Ly4+1y98eqaEkCwkej/IsMfD+DcPiOaevxDz9HmhEX1N5HhOdAFNBmWGogTBh2hPgH9mYABYQAD/BUB+
h+BcyycIJ+V8l2GAOORVGWArT4YpqBNq5WMFEhgIBQAAAJAIGIh+foBSHPgXTuREgQcpCIdre+Uj+oN1
hxAALagIzUU/iSBSA7UY0TdzKMRoUKYBNJcEPAaDj+B6QYgIDPBBnaYI7kRTM2gWHFRbb+E9IGRDTzB7
nRCE4VcIV0iEi/BPI8UVEpBa2Oc9HIBEI+RGPHSGaXgIA8B3GYgI8wRPXHGD53JEHUR9XwRs+AAfzkVI
T2gIR9WFLjFykvJ0dvh41OeBnrBvmIAAD2B9j3gINYVPQCF5pYIpFXCIj8dQuqeImsB/lHBQjQhCkZBQ
R+US2OcBFWYBHMRE/x6YiRTlivfAAJ+oAYQUcZHAhepnEb6HFWPYRr54h/8wTBdgjKGoCO9UUw3xWFDh
YzZEgDhEUQPRABVAcBeAjJOgjA+FEJWTFUaQhJmIjgLxANVojLAWCUeFVf7AAYRjOUngRh0kWwUxAQRn
jA9gCdR3i/4QPSnAj4QDXBJQUfJIEOVoKxdwkJaQjYK4D5bjAYX3bBIpjH2AkcPgABrgZB9wjpcQiMtY
D5pTOWoxY0owAWToecdQARwgQLoWZlK4COpIT3inDsajN1kBIA+pBLjXBwIYDCaHaQSXkpgQiRCFBJx4
Du34ko9AjFNwj68gZQWpASR5CRq5jkbQcehgPP9ZwZCMoJVb6QXSVwn0c3MV0ABLSQmjuJFDYJZWaTnG
0wgHNQdvCZeKNCgVkFybMJbNBw980xGDowgHFZZwEJiUsGMg1GtsqQn5+FAIkIJCSQRPkQgIVQeSCZcT
gAADQEyvRoyQKZYsuWGc2R3EKJJw4IOMgF/4lV2hyQk1pWEHhh0ddQeQ9wm2iV/aJZuWQFMLoGG69JrL
EZt4MJqZcJu2SQTGSQksOVDMxZxeCAWqiQc+RgWwSAjDOWTU2QmtGW1nwVBPoJrVGZmiMJz4NQQE1Z6T
UFMXZZhdQZ9F0J1a0JtakJTCiX9EBh/zqZ+QoIzEaFwiCVQhoZ5OwJ5c4J//WfCd7zlktgkfAxAfDqoJ
80RRFbVQcHSdDWqg8klcfACdnSCdr3YAxCkEG4qZCVpRtihS7mQRL8oExEWibkChozCcp7SZ8emiq3kJ
CCWRHYWc2dgQN5phJtoHABoKxJkACQAf0+miS2oJHiqjMjiVB/F33NmkJ4qinhClU4oAVToEV1oJWTqj
SXoQwbWeEOoHPEoKB3BKUkqlw4mm4ugEtHkHvsZQRoiXA/Gm67lQv/kHcyoKuCSljMqi8JmhqmlcTiCm
MfhOynidktgPTaSjKcCenBqZT5qitlmnjDql8EmcvdZRFvUEfRoHUnmX7yQQf8epsfmpcQB5lHoJpwof
/416qvgFqQ0gXE+Qq3iQjfO0gf8EEG5Eq5EqCJB3jdEJn4uKp756YMHIqq3KBsiaTygViHVZD8JFrCXq
UbZ6qxFJCr4qAAOQrnmqpxOpBEXnB0gaqDKYUPywrLSqquV6q1SGruzKrkZwrcOarW0wrxvoD9+YpkiQ
oAtFCBSQiqfwr76KBAz1rkgprnXwT7anqZsKBakqrIQwcxgbrRIbpBS7p3waqnuQUW+4D2/EqalKroYg
QqlQsiZ7sgr7jo3FB0jqD+HasgWWoDl7ov2KCjabf0dQsZyqsnlAlvsgXJ+KAA1ArhYLCCJbs0fbBEoL
BTu7B0B7DwAZtfo6st4Jsf+osK426wRQCwVe5R4ASX1R4IlbiwgXwLSgwABoK7FPQH0COal2Sxxh+6mR
irIzqwEEm47MlbZqK7Ape7h0wYo16QQGMLj7agfV2JOdoFxoewTt6gSIyKk+5rhm8Xdw+wQHUKur6oJv
h7mcsFDfKgQ3ywTFVbVIELpk6xeOx0ScikvERZOIILJY6I2o0LBesKypO6nCu37LWrpP4IkeFbmHMHPE
RCW4mgz4Sru1G5y64Yu26rw0ebviM6kiNHrLUFyfSr2i2xKbKk1xe1zsqwc+h6vVywyzGwW4mr4WUYDQ
i2DH9b174HO7Z7vOALXYm3uQh78JwYpN9LUFFqwW9b7/eXCUSzBCHfQMUPup8ssYmdhGUnAADhx6eyDB
9gsN5hsFoYvABFGA1MfASmAAU2tRvrsH7ngOn9u3jQu+FQGQhBoFMQrBeVBn3EDAGDy/+UmA5YpQkIvD
aDDD6VDD51vBXGFSCzwFBkCu0ccHaqkOTmzCAqwUwdWLU3C6CqzEaOBz3zC7GNzFQKG/O+wEBZAAVvy3
cgAp8LCpMmrCGZwT0DjFUBAAB/CJqYiHfMDE7mBSHprG1IsTvsjHT0BtHuWIZFzGIrwO63vHbHvAKCwP
gbu//8gADfDJC9WIZhvCQFwOlTy0RuCNiZrAONSxD5pcxAWKffAUpVwO11vAR6DK/5EMruvLyUrgvKGc
TGO4y2TQKvZwylKAvsQcD28LxlBQAFNLUd+Yit+4zF9AyPSwwocsBfJrzecgkoFrq28Mw4noft7MBZUz
yfGgzZZ8yYelrG/4tqhcli5aUdVMgHlAx/pAwLicyhT8D2s7fe2nb3r6gU50zujcOC77uYSLvJjcDxds
pV4aBQAAbwedsCwcB/r8tHZ8vAOryvuQu6xIk7q7cETQixeN0FsAKbXcDuzs0Y2bvPYgXC+bTBVA0iZ9
0k/Uiz5MBwotC5nMBj9VsQ/MzV4lx9/sRtBoyDPnWrcbnkMAxXYQFi3tDgtM1FOAvkGteGMMfYA3vszL
BFB90v948FjqzApbvQYMbcM3vMouja8q/EUyOtFijQiNU9WbADzQCghrDdNNcNRuzQ4/+7IibVJOQIGH
wNKvcDxpvURObKu227XrQNNe/bm+zHIUONb/+9OtwNiNcNUSOQUH3LbrzNDabNhuTG0WOAhh8VmoADyN
rQb4hIh+/dejrdLS8I1xnbsYW4EtVwiPtS94wJVWlMuNYMjbbNQHvM6/WIAgK9bgt9qDwB958LptsNFD
ENuO3dFUENnwcMGk+9xNoNl6ADp4bQbWzQZ3VASSbQjIXdtNoMvv8LO5W4MjIdzVXdbGfdyV3M+5h75F
oL3mYEMLvKnBVbmBkBUKdwfEbUX/LKLdsi3EVHDU0gfg5pCJRRDQlBDctcBd/vwIV+2h3R1nN3HCuB0N
Pf0Is3PWcZDebgA8As7fE2XJ8ywEhMRqtovU7mHWPKsHn8neEJ4G/BxxExXW8Mou5jh6Me4gK97j+fzg
QS7kMBySqB3fGJQBIiTfSaGdZuAbZizUeuDhAR7lQp6lCupOJFougE3hQIFLXF7M3KiUMswiS84IWXrT
UJvRUX2/FH7CZK4OBnAAby4Gd/3lbNDgc8wx7Y0IRJ2KKzzU8b3m3fzn6lCniA4Gi+nac8Bc6QXlEOda
E5CcUrysypWd4bfmWn3i9AAfQRc/wc3icsDpeoAB2M1VlF4G/9WXTA881Aml1BfVAAlQbQIgv8os0zmB
S2qQOIa+Bi7u4Kl862Gwwnyr68sL3gyFAMJmdgPwUws86Q5CFpvj5HP+4YsgXEM944aszdyuTpoHfgEw
ABAAAREAAT8F2Ew+O3/Q7OYmabYO7V+wqQxtUkhsUhmaAK3negLAABHwyTQ12v4OFIWu6QIF5rP84Kpe
BPsTBpSNiNwO8A4wAAkwAOGnrqY5AAMgBPf77cEt8ZvuB7UueovOBVwkBgBf5OZ+UYC6rkhQhXu+IIvJ
7wgm1Pq+7/Sx3PyNxAhV4NLeJ42jESwf65euZbX+zp8txdSHxIiYqTCiEYkjBVEfBrJe8f/PfvFq/bmi
3utV/iSkwzdSMPRdEPaDDPRUX+7vNOpK/VNxspgtffIF+/VzvOCkzQgcz+1Qm/QI7h58CetGoPVl0ACA
UHrP/vDF6+tKXeDLmiWW09IKwPfM7vbODuSS3wVwPVKVr49Ckvlt7wZ/CQiQUvQxLwhKnamI+CRYGQWM
TwarP0pyH7p2buSu0pFScPtkoEuBwF10/vobhfq2/wa5/wetn0rI308eedfBz/lC7fd0ACkocsJgFRYm
IALh/gTWf/2CoP2gT/arpBUmYAJoxk7CPwbo+fjPTwRzf1NNbwKGUcsbK/SEYP4nHf3jtDgm4ZGDZjy9
gwTjz+yOPwj/QMDxeFLFooRCkRiZTecTGpVOqVXrFZvVbrld7xccFjNFZZGnk05v1laFYtxlMOL1qdDD
YSaTdv8fMFBwkLDQEKosRI1trWPDauAwqoFOUixDSM8ICcnS8xM0VHTUMMSDDdWxg6hqAG6UAYGUC69J
iWI2V3eXt1dyIzXVrVKU0reKA4R1U8ni+Bk6WjraMbhDc8qVlKFBdtopEzslqeLC+Rs9XX09jtG66m07
lj0lY2j56CLjApfe/x+gv0Wq0rTyJmrOwXX3bGXIYGFJQIkTKfIC1qEJxmyvYHXzh0ecPgwWlFQ0eRJl
IXxYtG1r8A+kEQoiSfLplxJnTp2E3kQi/2Xs470MSSSUq8mpz06lS5l2afmTGL0hIDjwkYDEKp+mW7l2
dRLPZVR2IC9gJWr2ple1a3MqGKAwVEKAeIjYtNmJbV69FcG6hLuOQ61xV5WY3XsYMTtXHEdR+rtOGatb
WSMmtnz5mKvHn7htThfzLp8KmEmXnuVW1wOPcz180GNznFbTs2kbGvAUqmd0IEk6KVkbeHA7bn3Ka2BA
4hBxwpk3H+OWMaw5EwU7t36dy5voCLlRz4MdfPhWCnRb4iY2qAdM4tm3T+Gq+KzzEz2QGMHQfX7r0Hep
Lv9tiBBIiEy/AplbbBfH6PMABGWWMxBCzBhATZc5Vgvongwj3BAz/v8qbOBCgDLEj8MS9bpNAfQQUjC5
e6ozEUavGIBvl/P+A1C5IWLc0Ssaa5wDOYqEoIrHIpmasa9cQDzOpEyMfFIn7W6U5IHpTLqAgwyg3BIl
H2sEEaXeuBxTIgQ8/NBKk34jk016kFRxRaBMwqrNOtXpqRcLp1wHLzv9jMbLCv1Lac0/DeWlp+2M21Od
Pg999DTcKuyMUEchvfQTBHtZktF0OMEU1E+I88VGnCwNFdVAboNTOiBxKjTVWP2YUFGXQAwSpatk3TWO
OeaI78c0USKK12K9WNXXY7iRc9hTjX2WijcYeKBKVuO09goCCDgGVmi9jcKtaalFslZQfMXWCm3/j3H2
23aLgO5cFIEdRbUQu9iW28rc3TcF6FzxFb5yOQOxU3bS4tdb6PyFV9KwcDW1goMR5nXCxQKWV+CB0ZVI
AnMm9hbjAchtmJRqAbLgoSku8PjjhAPuqWJe5vPHApT3kcKcblve1V+LSS6mgQTwNXgmh5yB7YgKatoZ
WuJGxjMXA4I+4J+areajpsLMYpdpVBNVWGRdpGbSH5tIEjMFwjhBiuuuIbXYlwECCGAOAQKgx+wk0B7s
lrV1dvtSCuN+i9rbBDC4ZqyTkmlttQGXteBDbnPFgRkHAGAdCmrafPEi+j7r8dAHEWByFO1OJ+uz9dYc
bbbpFB12P0ov/e51/7JWvI/PDYud9zEmJ27ywxFnPfes9dW19+S9SBG+5m/7R7Y9JJZY+eqvkGABB4B/
Hu+arf9ekKuIEx568M3/A/nz1bdM3/Xdfx/++OWfn/767b8f//z135///v3/H4ABFOAACVhAAx4QgQlU
4AIZ2EAHPhCCEZTgBClYQQteEIMZ1OAGOdhBD34QhCEU4QhJWEITnhCFKVThClnYQhe+EIYxlOEMaVhD
G94QhznU4Q552EMf/hCIQRTiEIlYRCMeEYlJVOISmdhEJz4RilGU4hSpWEUrXhGLWdTiFrnYRS9+EYxh
FOMYyVhGM54RjWlU4xrZ2EY3vhGOcZTjHOlYR0073hGPedTjHvnYRz/+EZCBFOQgCVlIQx4SkYlU5CIZ
2UhHPhKSkZTkJClZSUteEpOZ1OQmOdlJT34SlKEU5ShJWUpTnhKVqVTlKo0QBAAh+QQJAwAmACwAAAAA
AAIAAoX/3gT/3Q3/3RP/3hz/4gb/4gz/4hb/4xv/6R3/3yX/3yr/3zD/4yT/6CT/4iz/6Sv/4zP/6TP/
4zr/6Tv/5UT/6kT/50r/60z/51b/61X/51r/6Vv/8Fb/8Vz/7GP/7Wv/8mT/82v/73H/83P/+Hf/83sA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAG/0CTcEgsGo/IpHLJbDqf0Kh0Sq1ar9isdsvter/gsHhMLpvP6LR6zW67
3/C4fE6v2+/4vH7P7/v/gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqus
ra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7f4OHi4+Tl5ufo
6err7O3u7/Dx8vP09fb3+Pn6+/z9/v8AAwocSLCgwYMIEypcuGnDBiQYMDCc2HCDBw0ehjjEYMECxY+W
NDjUgBGjRQ0YKIBcKcnkRZION6BUybJmo5gOPXiIyZGmzf+fiHYKlclTItCjhkTG/IAzg1GkUAFh1Pnh
w06cDqNq5WPRg4gSYEcwxUlyq9k7Hj58BVtCRMypJDOenQsn7Vq2Y6/G1UC3b5sPbAMPHfnyod/DZ6re
LWHVYky5iCOXyWlRrYirWSVrJuMYK+bMm0N7+bxRiGPIolNnMYnzqQnHqmNjufjWsEbbsnNHOenYte7f
VLDyBU58ClbfxZMv6QxauXMln59LT3J8ersDksha3z5EZ07k3J1jDb99PHnrOM+jF7lT/XTK7qWfHB7f
+U6R9Z0rRZ2f+P3+ysEHYHExDUhgTgb611yCucHGoG4FPghhexLOQYFP9kRYoRwXYkj/T1wbWthhhguG
2EaHI9JDoYlwoHihijqx2KKLL8ojk4wz0qijh2JMMEyJOKKxo4sWXGDkBekAGWQZQ7p4QQYZbJCBR+hY
tGQaTaJoQQYcbNBBBxxYgCIZRVK5y4pXkpGllhl04OVGQ4JxJJK7KJlmF2uieMGXbm6QUp5cHJkBnbng
dqcYeV54gZdfbiBmojVag+ahiCYKJQcdZACpi9YYSukYiVoQkUebciqNlZ+esWkRpab4jKepgkqBBIAm
ASk0sMYaxoUL1OpEls2gqiuTFPS6phTAKpPrsGBQ8GiyUzSJjLDMqpnoFdIWs2y1XtBoxJjY7qgtt2aY
aq23wWxL/y4XrqqK7i/qrqtFpGroKO9P797LUr76gmRuv/6CC/BK/w5MkcAGf9QuOPEm3OzC3GxgFX8O
l0tvxGlNWjGxPGqjE34b19sxOISGLOvIJhd08TYYlJyyxd9k8DIbKDciwcy01KxIBbPibBAFGxhZgc8B
zeosCBxgSivRNEdDa5EgRA2CBEszjcYEPi5B9QT83sL1kxyQEPUEN1vNB9ZcQzwLBU+2mTTZZqcBwQQR
VJG22q6wPegFFHAdtxoQQKDF3Tp34fIgFTzJtwRw/41I2md09IbMVWw5qJhVO54I5JOYSUUFUw6xQNma
L3Jh1qeIWXolK4tC+uqUUFDB0KOgDv87JRWISfvt+sy+O+/45P478PcUTry+2B1vzwHMK18P8wMcULfz
8gwwwAPTUw/PAdg7oH082DPwfTwRPDD++einr/767Lfv/vvwxy///PTXb//9+Oev//789+8/RQ/w3v+u
4YDyCXCArbgZ1RZoPClEoHwI1MUCJ8jACFaDgq+z4DOoNqsFalAaDOTgB6GBQSMccITGoKDtTHBCFBbD
g0JgnAuXsTWeeZBqMzyGBDoyK7L1LIfG6AgFGwhEXHCNg4zLYBF/0UNaJZGIS6wFBnEYRWKQDYlKrGIv
nKjFFEJxOrLrUEeEx0MxSc4LluuiI2THs45YIHdudGPuLmRGMQ7/4XRou2IWj8C2C3hOjYaYXRz9OMY6
do0JDnCA+YbwgEY2kgEMSF7ioATIQ8CxI0Zyo7MOKYb0VFIQssNkJnlIx1KygVqf9EOZjhRHTqLBTqm0
Q+7m1EqEuQFBseRDkebkRzF+UQjMa14XrpJLPYgSSoQs5R+XAMlIMk98XMgYxYoZh6ElTnGZFKPqnhBM
AySvCxgRgQg+QM06FKmPg7qcHHm2wjdYRJyXaVg5ySCopHGAlb6rANb2uIaLUEUn05ynGa55AQ60iU/3
FJo++bmGnHwMRAJdg5G4xCUORO1L9/QdQ9vgmbJENA2Jsyem+ASmC8yunXTwTk7o81EywLGg/yNFaEb9
gBVYtlQLBIUpmERq0j8IRSM33dUu54Qpng5vDxoLKrJqNruJ7o2nJj1qEwbAAAdUVamgzN0RIuAsQdXz
nlUIIDSxOghtEiECTcXmKKVKVkuY8ZoW8NHccrrWX7Z1EaKc09di6qYOmNSud1XEUCda0C9J7aIdeKMd
ChDYMuT0npDtgNQky6cn1aEAjG3sGCaatDlJ9rAgCEEIQPAlOmA2s5bYKPomSdQnfVa0IRjBCEIgTzSc
NhMRQCn6JEDUvU00tLGV7Whri4QCGMAAXDgtajGhW+1NIKQFnROUNgAC2Qp3J4eLgnKTe9tNyHC1rYXS
lzwQNYuMtgMtW/+mFLa7he5yIrfnyymXDCs1KU0JmTyMggCMcFoC+GKu2qsnfUe7kyk961mAJYJ7e+EA
vykvArzFVNRES1qnIBjBrYsCAfwbjAdIgK2ag0Bu9xTa8k6JRge25TUY8GHeQVhv4nXToIgELW044MMJ
NthzL4ABKEGJSlrSpi83meFqeLjIfYCkcprq40EdNUsI5pk3GixlQyTgyr+ZQEGbzDckpJhGPLPjHY6b
BQIAQBEP8F0irpyAwzhAcEb48EF/XAGG6kh3Q0YyG76JhQ0vIs2KXXMCGNDmuUDgzYETAlf31KgM1JkJ
GH5jmIes3kUA4MyLQGugBT3oswQukYH7MKP/SXsBujWhlComxwA0DWJCsLnQUFkAomml05JOAM5MaGOq
y8Hi2alWEK+ONQRofSmMlvrXdxTzJ7z55+e22spXHqtNFt1kZOqzuUjY9TkYgNZHQ+LVsF7JJA3asmuT
DddPyPE2GPCA51Ige48A90osh99bizhwCkA3QLh9UkrIeyJtM6hJI/DpQy8AAvkmSLv7TQlCs3khTeaI
BCBw8Hzn++AOUEAL/9HtCizS38E+SI+TNiV8I5ziKM+3iOH9jwZoWZ+YeLW0BeJjkxoc5RR3gKwDR/CN
+yPNJv14JRz+cIH0eFD2NrnFV05wlgtEy6WeOcijHZCItIwIKEc00xUC/3SPS30S4A63PiKChJMX8M0+
L8jLKwDBTBAdy/YguwnkXvYHRiCRFAkp278O9rDXIyIAXcLdA6dvhVTgSyadgNAvAW6+q8PqXfHTEj4t
iLQTY3YGTSu2I/F2uLfD6hGRCXhMuABALF4ZUc1nBBzf93/ztxygpzsjWB/E1Hv9qpvovOeHgFnYg74R
7JaGpPUZPXaf/hK6fz05Ys+I48MB2Y5I/a33KwTnD93v6kCJEGRfiOBfI7cCCL8osK+cRuKh8LkPP/VD
IXNIClM33scD9Ceh/vWDgs3NdKZuFKmH0oui/qTgcITmfnwWGsa3B+jXCQOgfqWAf81UgJJxgHowbP+k
AIANiH8NQHtnUVWWRwfzVwnht4D2RwTW13DRBkli5xcSyAUQiAWJVgoWeAQl2Hr5FxmK1IF0kICfUH8j
SIKdQHQP5HwKcBA4aATGV4Rz8IGXEINHgISRkACKFIRFcGVOiA9VKATsdoVwQHCoUH/HhVxN6HSXEIVB
SGgKMGi7BxB4BwXsJoYTqIRLGH7MA4ZNOIOSgD125wDkp4ZRUFXmBwhU1IVyiAAHQIcmpIXNZ3cPEG1o
GBBv1oeNhIhw8IKpMIiF2INDsIaaAIWPhIZF5w+a6ARtKImTCIeYIAAGQIiEOABKUECbgH+e2Ij9oHFS
UEABNAhU44ajIADMgwD/CHBcmJiJEGCHjcBmVEV0DscPodgEB3CDpDiJujgKvXgAv8iASnBoUGCKcoCM
jOh69pBIWpiFxJgHEMYKqfiLzMOD6kgEy6g12ugG3fhqB4CGKHgP7cgEfhiNfDBs7wiCqJiK6aiO1siO
4zgEOogH8TiAYUd18wCOUmB8BSl/EqCPnaCO3hSQAtmErpiNgCBzjKiQnygPh4aIbXiQfhCIpHAAAvmP
Kyl+GqmFKOkHC5mC8oB2D5lIFMkHEJaTmyCCLZmRSaBxJmkEFCgInfeNCEeSjTSUfUA1TMkJPvmTA5kE
iRSRJjBxg8CISImIzRhAT8kHE7kKUsmDTVCVUYCV/4EQcvOgcVy5lF+5BxDWj5Ywli7JBAqgAHcXBUX5
B2kIDzYJiaC2CE7ZCnQZjEfAllpIicCBdm0ZhYzAOG/pCXQJBRr3h0+Alr9xaNgYBdyzlI3wXJsnClHZ
klGAkzApl1ABjpLIboqpCEbiCgkwmkAJBeAYmfwoG4kka1NQVYTHCCP2bKNwZZMZBZUJk60pGaoZmdXn
lc9oB3ODNTbUCmcogkcwlU9gmmd5nG42klQQiZu5CHQzcRM3OqtgVZH0BeBoleKpGapJBbxJcY4wkaNz
m6vwSGCQcWaZnTbokLsZQIPnCAQ3bNp5ClZZmhqXl3qJmXOBdsqJhaB2cI+wQP+jg5q5wJbYIwXruaAj
2aAs9ACB4397QFyKZpAUmgv4iaDZOKBA8aCk6KEoZwkgGg0nOgX0GRWgRotTEEC5SVPtoHFsSaMx+ROM
2aIuCqF8MHrncKIFepV7KaSg9oygpqJ04FHukJ48WQSD6aTcSQWItgBD2AdImg53mW9LCkMsMaRW8GZG
yhX0cJf5mY1ZChK12ZwsdHAcmgbcBw9uiqJPcHAZOhGEl3FhNZ5SSgdhyg74qUgFSjXkyRA6155cmlu9
CaYiag5uenYYKqAL8ah/uZsPhDUxqgcYUKlJuqdTMEEKsaGI6E0l6WwlOgbalw9syadPEGqviqg3KgUN
4Ej/iOaqYHqofrmnkrhAdxoPUfqlUbCrHgpqjBOgxToZ/ZBxByqJ/Pis7aCa99gE3YNzB2en1hoGowqK
szqsNQoQmpmtTuCh3XpxFBeqdcBS+zCmb1am1eqIiEanJnByFfeieXAj/5CoXIihjHqr3KBvqomsVYBy
3cqveCB5ATGm3QOkcUoPGYdugZoFC2CnC/ut4Eqq78AAboo9SzqfQeqX0ioEkOqCFMeuCdewwIoPY6oA
HkoFxMqxNiavJnB3d7kFinly/fqyMHuipMiPjRoPCOelIrZPNhsI4VoQbnqg9OqUSzsNd5mUGddu+3Sl
jIASQJsPiXSgtOoEEjChTZqk//ipcRn7qFjzQOgaCVRqENLqmKeKquqgc7KmAHd7lwvwQAiHo5cgEl27
D9LqojQrnu5aDmerc3gbtz4LBctFCHlaENIqs2HrBMM2oetwtLKWm17qppqgFI66p0tqAhOqoOjwtXjr
pnc7tb+6RZBwqZXbBGNrpqfbuXYrrYc7CRgAMgwhr5FYuLRrDuCYtmjbspjgsK77CD6KqVRAcaaLuI/6
tGmbCYD7CwQ7B/IaAQgLpxOLuH1rt8uLr39gdWfquwkbvKxbDDqXlCjLqX/Lu3qggW8AHtcrB5fatpNX
o+U6ZfeYvnjAtYHbBvLrBpSDpZEwucw7t+U4cYUqHaMawP+psChxVr9x4Kb3NroXMjvFQrfn4Se7uwv0
KwmKKmJLOmyzVGcMTMF9EXq8EMIHHIVruL1aM2xhRKyzSx4ogbx7MMBvwGMTLMIFlIc7W6vDRjZ+Ort/
yhBktgY5/Ac87AY+HGeT8LVBfLKXKZ5Ea6v++w6paIhm4MEQLMB+UMBEoMJxMLls66N9SrRIPLZb/A6F
6MVlwLWA8MQEjBzP2wgnOgFxW4VtzI8lqxBLjAZWB6970IJ3EMVlbMZn/KkBFLMIDEm9NwSGO7BFix5+
4rFsYMdtICpHwMhbiDZ3h7qQPGiTbAJQGGqAPLbc4cGavAbn6Qd5GsiKgJO59chPm0j/V7aAp/xqCjC7
ztvK5OvEgOAUP+wIZwu2yTymsWk9RcCLRPfLxFoeo6rDfMDJUEzGlOwIZyivTyuv4KgA1hMAz9zM9qep
6DHMxFzMnwzKaRC+kOyjMSvOFQJ5gYDNd3zMjTDP3izP+FsfAGyUgWDMWOrOatDH4PzNG+LKgoAAgaDI
iwwJkyvP3yy+yQHGRonIekDQES3RCbC83vy1EsLQ96zReUBJBX3A33xo/SwhoRfGb9AAJo0HUTLBb+wG
udzPaswgGJ3RgsBj2nyVBn3QCM2WO50gPX3PhIDSHa28MVsE/JkgD0wI+AwHTbvIQ40G+BkkhUzVSx3U
wbsIfssi//cB03DAAA49CE/iG2GtPx4wApGbZFUNB0xNyVn9NxIjFt031/PrKUmcP7v7AXpN1TO90XUt
1HdNNDuxu2/tAdUsCDJdCFDiG3GZP1XhJ4CbyZkcCJEt2X5Ny+/zMWCcyXGtBw1wCJNd0Ik9M5r90o9d
x6dtCD6m2vrjyqRt1m2Qgah92G1NPxsBebi9ybFtCD0WZw6GP6St2T6N2tz3YcDpPhFBErsbq4Cg27vN
1nOUP29b2nnQ2bJ92LJTapqVBbH83drcR40z3u7p3d/9FFTja04J2up9BAzA3pLdJRcQ3/rd2/ONBPVd
2H0QJUEzQYAcav3Nhnw9B00mBKu8v/8HvgQPkOAKjtL7XbYPrgRKpghRQjk27OAXjgQNMNyIMNuKJp7x
/eHMZN/mbddlw98obgIhDuB/ICV0stq59N+MECWV9uLMVN6JYFBBzeNMkIEyPsaHLeT4qOK7jeRQEOKO
4GPB3d8Zzgg8weRJLuF04CUgUNNWjuFOnuMO4RSvPN+QJOKKYF9c3uX0bd05LuBBruYmgOM3geZwvuZF
XswkXudEEOOQ0GPZBedy/giDoudEUN8+3gjqpt5lLseEDgmG3uiW8OiQTgkhjuWTbtr1femTUN9premQ
kIGW7ul1UN9KLuqI8ICm7giGfuepnmR83uqLsOqwHusZyOizXuj/U54HEW7mt26EzbTDuW4FmNbl7Bbs
dlDpWvC4SF7fEb4HGcjrvY7rxl4HRB7tzHTNh27tkJ3tkxCaD/7llzA7gM4Ayi4JVWblpF7ukdA3an4A
DdDpiMBGqe7u8I4Im+bpB8Dt2s4HscmLD3AAC7jvHWk9kDTOAv8H1jMAzTwA5HzwfZDwEN/wDq8HEF/x
k3DTxQRuFg8J8s3j02k9NDnxdyA4AS/yJn/yKJ/yKr/yLN/yLv/yMB/zMj/zNF/zNn/zOJ/zOr/zPN/z
Pv/zQB/0Qj/0RF/0Rn/0SJ/0Sr/0TN/0Tv/0UB/1Uj/1VF/1Vn/1WJ/1Wr/1XN/1Xv/1YB/2TWI/9mRf
9mZ/9mif9mq/9mzf9m7/9nAf93I/93Rf93Z/93if93q/93zf937/94Af+II/+IRf+IZ/+Iif+Iq/+Izf
+I7/+JAf+ZJ/C0EAACH5BAkDACQALAAAAAAAAgAChf/eBP/fCv/dFf/eHP/hBf/hDP/iFf/jG//fJf/f
Kf/fMf/jJP/oJP/iLP/oL//iNP/pNf/jOv/pPf/kRP/pRP/nSv/qTP/nVv/rU//nWv/pW//wVv/xXf/s
Y//ubP/yY//zbP/ucP/xdP/yeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAb/QJJwSCwaj8ikcslsOp/Q
qHRKrVqv2Kx2y+16v+CweEwum8/otHrNbrvf8Lh8Tq/b7/i8fs/v+/+AgYKDhIWGh4iJiouMjY6PkJGS
k5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3O
z9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/wADChxIsKDBgwgT
Klx4qgPDh5w0OCySQYMGiBgxacjAsaLFjxlDUtrYIUOHDhJTilwJqWTJiihRXmRJc9FGjjI/ZqjJE1EH
/w9APXzcOLOn0UA/Q4wYEULoR5RHo/pRunSpCJgdJ0rdaodq1RE5TXIsyrXsGw9fl8aU6NKj2bds0H5t
mvNmSbh41QANQVVE3ZN5A6OxeJKtzJyCE5MhbDEDhiEdySqezKWuhseQY1LevMXjxwtGLHIefcUk451H
JJNe3eRkRY6sY2e5KVG27SpjK97eLeUw799OnqoGTpzI0OLIjchEnbw5icZanRdHLD05yOrIqWMnfn07
8KfeuZsM/30j+d8xmZ+33X09++HuSbuNbxsqfdma78cWrZ91+/6c2QfgaDINSBp/Br4xwQT71JagGwsu
mA+CD7IRIYP4CFjhGhRceP/PXRuy0eGFGNJDYYhokDhBhybCh+IYI6rYIQUWYGAjZupo+OIYK6p4IY01
foRBjBSc4+KOXPjoY5AbcLABBhXIKGE4gCEZhpI+VmDRBhtosIEFWEbIohYWlGnBL0damUWMWFKAAZdd
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
sKHDhxAjSpxIsaLFixgzatzIsaPHjyD/Q4ocSbKkyZMoU6pcybKly5cwY8qcSbOmzZs4c+rcybOnz59A
gwodSrSo0aNIkypdyrSp06dQo0qdSrWq1atYs2rdylVWgQFdw4odS7as2bNo06pdy7at27dw48qdS7eu
3bt48+rdy7ev37+AAwvGUWAwKgIEDCtezLix48eQI0uevCYA5cuYM2vezLmz58+gQ4seTbq06dOoU6te
zbq169ewY8ueTbu27du4c+vezbu379/AgwsfTry48ePIkytfzry58+fQo0ufTr269evYs2vfzr279+/g
w5+yLL5JAAECyjMhQF69EvTulwhoH7++/fv48+vfz7+///8ABijg/4AEFmjggQgmqOCCDDbo4IMQRijh
hBRWaOGFGGZ4hgEanmBAYR2SYACHIYpQwIcljgBWiiy26OKLMMYo44w01mjjjTjmqOOOPPbo449ABink
kEQWaeSRSCap5JJMNunkk1BGKeWUVFZp5ZVYZqnlllx26eWXYIYp5phklmnmmWimqeaabLbp5ptwxinn
nHTWaeedeOap55589unnn4AGKuighBZq6KGIJqrooow26uijkEYq6aSUVmrppbUAgOmmnHbq6aeghirq
qKSWauqpqKaq6qqsturqq7DGKuustNZq66245qrrrrz26uuvwAYr7LDEFmvsscgmq+yyzDbr7Fiz0EYr
7bTUVmvttdhmq+223Hbr7bfghivuuOSWa+656Kar7rrstuvuu/DGK++89NZr77345qvvvvz26++/AAcs
8MAEF2zwwQgnrPDCDDfs8MMQRyxxjREAACH5BAkDAAMALAAAAAAAAgACgf/pSP/pTv/taQAAAAL/nI+p
y+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si8YhMKpfMpvMJjUqn1Kr1is1q
t9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/f8vv8PGCg4SFhoeIiYqLjI2Oj4CBkpOUlZaXmJmam5
ydnp+QkaKjpKWmp6ipqqusra6voKGys7S1tre4ubq7vL2+v7CxwsPExcbHyMnKy8zNzs/AwdLT1NXW19
jZ2tvc3d7f0NHi4+Tl5ufo6err7O3i4t4B7vIgAvb3+Pn6+/z9/v/w8woMCBBAsaPIgwocKFDBs6fAgx
osSJFCtavIgxo8aN/xw7evwIMqTIkSRLmjyJMqXKlSxbunwJM6bMmTRr2ryJM6fOnTx7+vwJNKjQoUSL
Gj2KNKnSpUybOn0KNarUqVSrWr2KNavWrVy7ev0KNqzYsWTLmj2LNq3atWzbuqUD4K3cuXTr2r2LN6/e
vXz7+v0LOLDgwYQLGz6MOLHixYwbO34MObLkyZQrW76MObPmzZw7e/4MOrTo0aRLmz6NOrXq1axbu34N
O7bs2bRr276NO7fu3bx7+/4NPLjw4cSLGz+OPLny5cybO38OPbr06dSrW7+OPbv27dy7e/8OPrz48eTL
mz+PPr369ezbu38PP778+fTr27+PP7/fAPopBP/g318E/wVIYIEGHohgggouyGCDDj4IYYQSTkhhhRZe
iGGGGm7IYYcefghiiCKOSGKJJp6IYooqrshiiy6+CGOMMs5IY4023ohjjjruyGOPPv4IZJBCDklkkUYe
iWSSSi7JZJNOPglllFJOSWWVVl6JZZZabslll15+CWaYYo5JZplmnolmmmquyWabbr4JZ5xyzklnnXbe
iWeeeu7JZ59+/glooIIOSmihhh6KaKKKLspoo44+Cmmkkk5KaaWWXopppppuymmnnn4Kaqiijkpqqaae
imqqqq7KaquuvgprrLLOSmuttt6Ka6667sprr77+Cmywwg5LbLHGHotsssokLstss84+C2200k5LbbXW
Xottttpuy2233n4LbrjijktuXwUAACH5BAkDAAAALAAAAAAAAgACAAj/AAEIHEiwoMGDCBMqXMiwocOH
ECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0
qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUu3rt27ePPq
3cu3r9+/gAMLHky4sOHDiBMrXsy4sePHkCNLnky5suXLmDNr3sy5s+fPoEOLHk26tOnTqFOrXs26tevX
sGPLnk27tu3buHPr3s27t+/fwIMLH068uPHjyJMrX868ufPn0KNLn069uvXr2LNr3869u/fv4MOL/x9P
vrz58+jTq1/Pvr379/Djy59Pv779+/jz69/Pv7///wAGKOCABBZo4IEIJqjgggw26OCDEEYo4YQUVmjh
hRhmqOGGHHbo4YcghijiiCSWaOKJKKao4oostujiizDGKOOMNNZo44045qjjjjz26OOPQAYp5JBEFmnk
kUgmqeSSTDbp5JNQRinllFRWaeWVWGap5ZZcdunll2CGKeaYZJZp5plopqnmmmy26eabcMYp55x01mnn
nXjmqeeefPbp55+ABirooIQWauihiCaq6KKMNuroo5BGKumklFZq6aWYZqrpppx26umnoIYq6qiklmrq
qaimquqqrLbq6quwxv8q66y01mrrrbjmquuuvPbq66/ABivssMQWa+yxyCar7LLMNuvss9BGK+201FZr
7bXYZqvtttx26+234IYr7rjklmvuueimq+667Lbr7rvwxivvvPTWa6+S/tyr77789uvvvwAHLPDABBds
8MEIJ6zwwgw37PDDEEcs8cQUV2zxxRhnrPHGHHfs8ccghyzyyCSXbPLJKKes8sost+zyyzDHLPPMNNds
880456zzzjz37PPPQAct9NBEF2300UgnrfTSTDft9NNQRy311FRXbfXVWGet9dZcd+3112CHLfbYZJdt
9tlop6322my37fbbcMct99x012333XjnrffefPdx7fffgAcu+OCEF2744YgnrvjijDfu+OOQRy755JRX
bvnlmGeu+eacd+7556CHLvropJdu+umop6766qy37vrrsMcu++y012777bjnrvvuvPfu++/ABy/88MQX
b/zxyCev/PLMN+/889BHL/301Fd/VUAAIf8LSW1hZ2VNYWdpY2sOZ2FtbWE9MC40NTQ1NDUAIfkECQMA
AAAsAAAAAAACAAIAAv+Ej6nL7Q+jnLTai7PevPsPhuJIluaJpurKtu4Lx/JM1/aN5/rO9/4PDAqHxKLx
iEwql8ym8wmNSqfUqvWKzWq33K73Cw6Lx+Sy+YxOq9fstvsNj8vn9Lr9js/r9/y+/w8YKDhIWGh4iJio
uMjY6PgIGSk5SVlpeYmZqbnJ2en5CRoqOkpaanqKmqq6ytrq+gobKztLW2t7i5uru8vb6/sLHCw8TFxs
fIycrLzM3Oz8DB0tPU1dbX2Nna29zd3t/Q0eLj5OXm5+jp6uvs7e7v4OHy8/T19vf4+fr7/P3+//DzCg
wIEECxo8iDChwoUMGzp8CDGixIkUK1q8iDGjxo3/HDt6/AgypMiRJEuaPIkypcqVLFu6fAkzpsyZNGva
vIkzp86dPHv6/Ak0qNChRIsaPYo0qdKlTJs6fQo1qtSpVKtavYo1q9atXLt6/Qo2rNixZMuaPYs2rdq1
bNu6fQs3rty5dOvavYs3r969fPv6/Qs4sODBhAsbPow4seLFjBs7fgw5suTJlCtbvow5s+bNnDt7/gw6
tOjRpEubPo06terVrFu7fg07tuzZtGvbvo07t+7dvHv7/g08uPDhxIsbP448ufLlzJs7fw49uvTp1Ktb
v449u/bt3Lt7/w4+vPjx5MubP48+vfr17Nu7fw8/vvz59Ovbv48/v/79/Pv7//8PYIACDkhggQYeiGCC
Ci7IYIMOPghhhBJOSGGFFl6IYYYabshhhx5+CGKIIo5IYokmnohiiiquyGKLLr4IY4wyzkhjjTbeiGOO
Ou7IY48+/ghkkEIOSWSRRh6JZJJKLslkk04+CWWUUk5JZZVWXollllpuyWWXXn4JZphijklmmWaeiWaa
aq7JZptuvglnnHLOSWeddt6JZ5567slnn37+CWiggg5KaKGGHopoooouymijjj4KaaSSTkpppZZeimmm
mm7KaaeefgpqqKKOSmqppp6Kaqqqrspqq66+Cmusss5Ka6223oprrrruymuvvv4KbLDCDktsscYei2yy
yhMuy2yzzj4LbbTSTktttdZea1oBADs=
AAABAAEAGBgAAAEAIACICQAAFgAAACgAAAAYAAAAMAAAAAEAIAAAAAAAAAkAAMMOAADDDgAAAAAAAAAA
AACDiI4Uy83Ql+jr6+Tk5+ffz9LUvrm8v56lqa2AlZieZYiOlFF7gYhEb3Z+O2lxeTlpcXk4bnV9OnqB
iEOIjpRQmJyiYKmssXm7v8KZ0tTWuubo6drn6enku77Br2pxeDDX2NtL+vn69OnX5P/lz9//9Orx//n2
+f/4+Pn89fb29u/y8e3p6+zm5ejo4OTn597k5+fe5ejo3+nr6+Xv8vHt9ff39fj4+fv59/n/9Orx/+TP
3//p1+T/9vb2+qqvs3Xs7e5g/Pr7/bR6pv+YSIT/o1yS/7F0ov++jLL/y6PB/9Oxy//exNj/483e/+TN
3v/kzd7/5M3e/97E2P/TsMr/y6LB/76Msv+xdKL/o1yR/5hIg/+0eqb/+vn6/8fJzYHw8PFR/fv8+rV9
pv+TQH7/lEF//5NAfv+TQH7/k0B+/5VDgP+XRoL/l0aC/5ZFgf+WRYH/l0aC/5ZGgv+VQoD/k0B+/5NA
fv+TQH7/lEF//5NAfv+1fKf/+vn6/cXHynLs7e1D/fz99LuHrv+SPn3/lUJ//5VDgP+VQ4D/lUOA/5VD
gP+UQoD/pF6S/72KsP+9irD/o16S/5RCf/+VQ4D/lUOA/5VDgP+VQ4D/lUJ//5I+ff+7hq7/+fn5+rzA
wmPl5eY1/f797dGuyf+jXJL/nVGK/5hJhP+WRYH/lUOA/5RAf/+ydqP/7uHr//Lo8P/y6O//7uHq/7J2
o/+TQH7/lUOA/5ZEgf+YSIP/nE+I/6JYj//RrMj/9/j49q+zt1bh4uQo/f395vr2+f/y6PD/7N3o/+TP
3v/cwdX/1rbO/9Kvyf/v4uv/3cTX/6Rek/+kXpP/3cPX/+7h6//Rrcj/1LPM/9q+0//jzd3/6trm//Hm
7v/69vn/9vb38Kerr0Xa290e/P39297D1/+4gqv/xpq7/9GsyP/Zu9H/38bZ/+jW4//7+Pr/tX2o/5I+
ff+SPn3/tX2o//v4+v/o1uP/38fZ/9q+0//Tscv/yJ6+/7qFrf/fxtn/8vT06JyhpTnMz9AV+/38ztq+
0/+UQn//k0B+/5RCf/+WRIH/lkWB/6Nbkf/v4uz/yqHA/5ZEgf+WRIH/yqHA/+/i7P+iW5H/lkWB/5ZE
gf+UQn//k0B+/5RCf//bvtT/7/Hx35CUmS3BxMgL+/38v+LL3P+XR4P/lUOA/5VDgP+VQ4D/lUKA/5VD
gP/HnLz/9u/0/9q/0//av9P/9u/1/8edvf+VQ4D/lUKA/5VDgP+VQ4D/lUOA/5dHg//iy9z/7e/v1H6C
iCKipqkG+fv6sebS4f+aS4b/lUKA/5VDgP+VQoD/mUqG/5hJhP+ZSYT/voyy/9/G2f/fxtn/voyy/5lJ
hP+YSIT/mUqF/5VCgP+VQ4D/lUKA/5pLhv/m0uH/6OrqyG91fBhYW2AD9/j3oe3f6f+eU4v/lEJ//5VD
gP+WRYL/zabE/76Msv+TQH7/lEF//5dGgv+XRoL/lEF//5NAfv++jLH/zabD/5ZFgv+VQ4D/lEJ//55T
i//u3+r/3+LjvFdcZRL///8A9vj3jvPp8P+iWY//lEJ//5RBf/+zeKX/+vb5/9/H2f+YSIT/lUOA/5VD
gP+VQ4D/lUOA/5hIhP/fx9n/+vb5/7N4pf+UQX//lEJ//6JZj//z6fD/297frDY/SQz///8A9vf3ffXt
8/+mYJX/k0B+/55TjP/l0uH//////PXt8/+nY5b/lEF//5VDgP+VQ4D/lEF//6dilv/17fP//////eXS
4P+eU4z/k0B+/6Zfk//17fP/1tnbmwAHFQb///8A8fHxa/n1+P+tbp7/lEF//8qiwP/9/f308/T0pf79
/vLAkLT/k0B+/5VDgP+VQ4D/k0B+/8CQtP/8/Pz27Oztrf79/vHKocD/lEF//65unv/49Pf/zc/SiwAA
AAP///8A7/DwVPz7/PuzeaX/rW2d//Xu9P/19vao3N7fJf///9DbwNT/l0aC/5VDgP+VQ4D/l0aC/9zA
1f/3+fjcvsHDMP///5317vT/rW2d/7R6pv/6+fr+xMbJdQAAAAD///8A7+/wNP7+/urgyNr/6Nfk//z9
/N7f4uMz////AP3+/pnw5e7/olmQ/5RCf/+UQX//olmP//Hm7v/r7e2rOUFKCfv7+yv////Z6Nfk/+DI
2v/6+/vvxMfJSf///wD///8A2NrbBvz8/Hr////h/v7+1vHx81sAEBwB////APf4+Fr7+fv7tn6o/5NA
fv+TQH7/tn6p//v5+v3X2dtxAAAAAdDZ3AD6/v5U/v//1f///+L19fWBr7K2Cenq7AAAAAAA+Pn5APb2
9gX5+voh9/j4G9vb3gK9vb8A////AO7v8Sj////i0K3H/5RCgP+VQoD/0a3I//n7+uq/wsU5////AL/D
xgD09/cC+vv7Gvf4+CHf4OAG8fHxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6+vsAOTk
5Qj+//+x6trm/5xQif+cUIn/6trm//Hz87+Ok5gTqKquAISMlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjo+RAP///wD4+fpq+vf6/rJ2o/+ydqP/+vf5/9/h
4oAAAAACVFlhAIiPlwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAPn5+wD29vgi////2OfV4//n1eP/+vv73sjLzTD///8AWF5nAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOnp6gAdHSUA/Pz8Xv//
/9v+/v7c8fLzZDZCTAL///8AYWlxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAOPj5gAAAAAA9PT1A/v7+x/5+fkf0dLVBAAAAACvsbYAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAACAAAAAgAAAAIAAAACAAAEAgQABAIEAQQDDAMMA/wD/AP+A/wD/gf8A/8H/AP/D
/wA=
================================================
FILE: RaidCrawler.WinForms/SubForms/TickModifier.Designer.cs
================================================
namespace RaidCrawler.WinForms.SubForms
{
partial class TickModifier
{
///
/// Required designer variable.
///
private System.ComponentModel.IContainer components = null;
///
/// Clean up any resources being used.
///
/// true if managed resources should be disposed; otherwise, false.
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
private void InitializeComponent()
{
TB_Tick = new TextBox();
L_Tick = new Label();
B_Read = new Button();
B_Write = new Button();
B_NTP = new Button();
SuspendLayout();
//
// TB_Tick
//
TB_Tick.Font = new Font("Consolas", 9F);
TB_Tick.Location = new Point(50, 7);
TB_Tick.Margin = new Padding(4, 3, 4, 3);
TB_Tick.Name = "TB_Tick";
TB_Tick.Size = new Size(162, 22);
TB_Tick.TabIndex = 45;
//
// L_Tick
//
L_Tick.AutoSize = true;
L_Tick.Location = new Point(12, 9);
L_Tick.Name = "L_Tick";
L_Tick.Size = new Size(31, 15);
L_Tick.TabIndex = 44;
L_Tick.Text = "Tick:";
L_Tick.TextAlign = ContentAlignment.MiddleRight;
//
// B_Read
//
B_Read.Location = new Point(12, 35);
B_Read.Name = "B_Read";
B_Read.Size = new Size(96, 27);
B_Read.TabIndex = 130;
B_Read.Text = "Read";
B_Read.UseVisualStyleBackColor = true;
B_Read.Click += B_Read_Click;
//
// B_Write
//
B_Write.Location = new Point(116, 35);
B_Write.Name = "B_Write";
B_Write.Size = new Size(96, 27);
B_Write.TabIndex = 131;
B_Write.Text = "Write";
B_Write.UseVisualStyleBackColor = true;
B_Write.Click += B_Write_Click;
//
// B_NTP
//
B_NTP.Location = new Point(12, 65);
B_NTP.Name = "B_NTP";
B_NTP.Size = new Size(200, 27);
B_NTP.TabIndex = 132;
B_NTP.Text = "Reset Time (NTP)";
B_NTP.UseVisualStyleBackColor = true;
B_NTP.Click += B_NTP_Click;
//
// TickModifier
//
AcceptButton = B_Write;
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(224, 96);
Controls.Add(B_NTP);
Controls.Add(B_Write);
Controls.Add(B_Read);
Controls.Add(TB_Tick);
Controls.Add(L_Tick);
FormBorderStyle = FormBorderStyle.FixedDialog;
Name = "TickModifier";
ShowIcon = false;
SizeGripStyle = SizeGripStyle.Hide;
Text = "TickModifier";
ResumeLayout(false);
PerformLayout();
}
#endregion
private TextBox TB_Tick;
private Label L_Tick;
private Button B_Read;
private Button B_Write;
private Button B_NTP;
}
}
================================================
FILE: RaidCrawler.WinForms/SubForms/TickModifier.cs
================================================
using RaidCrawler.Core.Connection;
using RaidCrawler.Core.Discord;
namespace RaidCrawler.WinForms.SubForms
{
public partial class TickModifier : Form
{
readonly ConnectionWrapperAsync ConnectionWrapper;
readonly NotificationHandler Webhook;
readonly CancellationToken Token;
public TickModifier(ulong tick, ConnectionWrapperAsync connectionWrapper, NotificationHandler webhook, CancellationToken token)
{
InitializeComponent();
TB_Tick.Text = tick.ToString();
ConnectionWrapper = connectionWrapper;
Webhook = webhook;
Token = token;
}
private async void B_Read_Click(object sender, EventArgs e)
{
try
{
var tick = await ConnectionWrapper.GetCurrentTime(Token).ConfigureAwait(false);
if (InvokeRequired)
Invoke(() => TB_Tick.Text = tick.ToString());
else
TB_Tick.Text = tick.ToString();
}
catch (Exception ex)
{
await this.DisplayMessageBox(Webhook, $"Could not read the date: {ex.Message}", Token).ConfigureAwait(false);
}
}
private async void B_NTP_Click(object sender, EventArgs e)
{
try
{
await ConnectionWrapper.ResetTimeNTP(Token).ConfigureAwait(false);
B_Read_Click(sender, e);
}
catch (Exception ex)
{
await this.DisplayMessageBox(Webhook, $"Could not reset the date: {ex.Message}", Token).ConfigureAwait(false);
}
}
private async void B_Write_Click(object sender, EventArgs e)
{
try
{
var success = ulong.TryParse(TB_Tick.Text, out var time);
if (success)
{
await ConnectionWrapper.SetCurrentTime(time, Token).ConfigureAwait(false);
}
else
{
await this.DisplayMessageBox(Webhook, $"Could not write the date: {TB_Tick.Text} could not be parsed as a ulong!", Token).ConfigureAwait(false);
}
}
catch (Exception ex)
{
await this.DisplayMessageBox(Webhook, $"Could not write the date: {ex.Message}", Token).ConfigureAwait(false);
}
}
}
}
================================================
FILE: RaidCrawler.WinForms/SubForms/TickModifier.resx
================================================
text/microsoft-resx
2.0
System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
================================================
FILE: RaidCrawler.WinForms/SubForms/UpdateNotifPopup.Designer.cs
================================================
namespace RaidCrawler.WinForms.SubForms
{
partial class UpdateNotifPopup
{
///
/// Required designer variable.
///
private System.ComponentModel.IContainer components = null;
///
/// Clean up any resources being used.
///
/// true if managed resources should be disposed; otherwise, false.
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
private void InitializeComponent()
{
B_Close = new Button();
B_Download = new Button();
label1 = new Label();
L_Version = new Label();
label3 = new Label();
SuspendLayout();
//
// B_Close
//
B_Close.DialogResult = DialogResult.Cancel;
B_Close.Location = new Point(12, 61);
B_Close.Name = "B_Close";
B_Close.Size = new Size(75, 25);
B_Close.TabIndex = 1;
B_Close.Text = "Ignore";
B_Close.UseVisualStyleBackColor = true;
//
// B_Download
//
B_Download.DialogResult = DialogResult.OK;
B_Download.Location = new Point(93, 61);
B_Download.Name = "B_Download";
B_Download.Size = new Size(150, 25);
B_Download.TabIndex = 0;
B_Download.Text = "Open download page";
B_Download.UseVisualStyleBackColor = true;
//
// label1
//
label1.AutoSize = true;
label1.Location = new Point(12, 9);
label1.Name = "label1";
label1.Size = new Size(123, 15);
label1.TabIndex = 2;
label1.Text = "New update available!";
//
// L_Version
//
L_Version.AutoSize = true;
L_Version.Location = new Point(12, 26);
L_Version.Name = "L_Version";
L_Version.Size = new Size(149, 15);
L_Version.TabIndex = 3;
L_Version.Text = "Current: v1.1.1 | New v9.9.9";
//
// label3
//
label3.AutoSize = true;
label3.Location = new Point(12, 43);
label3.Name = "label3";
label3.Size = new Size(228, 15);
label3.TabIndex = 4;
label3.Text = "It is advised to update as soon as possible!";
//
// UpdateNotifPopup
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(255, 93);
Controls.Add(label3);
Controls.Add(L_Version);
Controls.Add(label1);
Controls.Add(B_Download);
Controls.Add(B_Close);
FormBorderStyle = FormBorderStyle.FixedDialog;
Name = "UpdateNotifPopup";
Text = "Update available!";
Load += UpdateNotifPopup_Load;
ResumeLayout(false);
PerformLayout();
}
#endregion
private Button B_Close;
private Button B_Download;
private Label label1;
private Label L_Version;
private Label label3;
}
}
================================================
FILE: RaidCrawler.WinForms/SubForms/UpdateNotifPopup.cs
================================================
namespace RaidCrawler.WinForms.SubForms;
public partial class UpdateNotifPopup : Form
{
private Version cv;
private Version nv;
public UpdateNotifPopup(Version currentVersion, Version newVersion)
{
cv = currentVersion;
nv = newVersion;
InitializeComponent();
}
private void UpdateNotifPopup_Load(object sender, EventArgs e)
{
L_Version.Text = $"Current: v{cv.Major}.{cv.Minor}.{cv.Build} | New: v{nv.Major}.{nv.Minor}.{nv.Build}";
B_Download.Focus();
CenterToScreen();
}
}
================================================
FILE: RaidCrawler.WinForms/SubForms/UpdateNotifPopup.resx
================================================
text/microsoft-resx
2.0
System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
================================================
FILE: RaidCrawler.sln
================================================
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.3.32819.101
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RaidCrawler.WinForms", "RaidCrawler.WinForms\RaidCrawler.WinForms.csproj", "{3137FDBF-AE30-4A9D-B334-C12524540401}"
ProjectSection(ProjectDependencies) = postProject
{EFA55E3C-6A2C-4529-A207-93B8EC5F08D0} = {EFA55E3C-6A2C-4529-A207-93B8EC5F08D0}
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RaidCrawler.Core", "RaidCrawler.Core\RaidCrawler.Core.csproj", "{EFA55E3C-6A2C-4529-A207-93B8EC5F08D0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RaidCrawler.Tests", "RaidCrawler.Tests\RaidCrawler.Tests.csproj", "{41EC55F6-39BE-45E9-A39C-932108DDB4F9}"
ProjectSection(ProjectDependencies) = postProject
{EFA55E3C-6A2C-4529-A207-93B8EC5F08D0} = {EFA55E3C-6A2C-4529-A207-93B8EC5F08D0}
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{3137FDBF-AE30-4A9D-B334-C12524540401}.Debug|Any CPU.ActiveCfg = Debug|x64
{3137FDBF-AE30-4A9D-B334-C12524540401}.Debug|Any CPU.Build.0 = Debug|x64
{3137FDBF-AE30-4A9D-B334-C12524540401}.Debug|x64.ActiveCfg = Debug|x64
{3137FDBF-AE30-4A9D-B334-C12524540401}.Debug|x64.Build.0 = Debug|x64
{3137FDBF-AE30-4A9D-B334-C12524540401}.Release|Any CPU.ActiveCfg = Release|x64
{3137FDBF-AE30-4A9D-B334-C12524540401}.Release|Any CPU.Build.0 = Release|x64
{3137FDBF-AE30-4A9D-B334-C12524540401}.Release|x64.ActiveCfg = Release|x64
{3137FDBF-AE30-4A9D-B334-C12524540401}.Release|x64.Build.0 = Release|x64
{EFA55E3C-6A2C-4529-A207-93B8EC5F08D0}.Debug|Any CPU.ActiveCfg = Debug|x64
{EFA55E3C-6A2C-4529-A207-93B8EC5F08D0}.Debug|Any CPU.Build.0 = Debug|x64
{EFA55E3C-6A2C-4529-A207-93B8EC5F08D0}.Debug|x64.ActiveCfg = Debug|x64
{EFA55E3C-6A2C-4529-A207-93B8EC5F08D0}.Debug|x64.Build.0 = Debug|x64
{EFA55E3C-6A2C-4529-A207-93B8EC5F08D0}.Release|Any CPU.ActiveCfg = Release|x64
{EFA55E3C-6A2C-4529-A207-93B8EC5F08D0}.Release|Any CPU.Build.0 = Release|x64
{EFA55E3C-6A2C-4529-A207-93B8EC5F08D0}.Release|x64.ActiveCfg = Release|x64
{EFA55E3C-6A2C-4529-A207-93B8EC5F08D0}.Release|x64.Build.0 = Release|x64
{41EC55F6-39BE-45E9-A39C-932108DDB4F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{41EC55F6-39BE-45E9-A39C-932108DDB4F9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{41EC55F6-39BE-45E9-A39C-932108DDB4F9}.Debug|x64.ActiveCfg = Debug|Any CPU
{41EC55F6-39BE-45E9-A39C-932108DDB4F9}.Debug|x64.Build.0 = Debug|Any CPU
{41EC55F6-39BE-45E9-A39C-932108DDB4F9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{41EC55F6-39BE-45E9-A39C-932108DDB4F9}.Release|Any CPU.Build.0 = Release|Any CPU
{41EC55F6-39BE-45E9-A39C-932108DDB4F9}.Release|x64.ActiveCfg = Release|Any CPU
{41EC55F6-39BE-45E9-A39C-932108DDB4F9}.Release|x64.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {8B52EA45-FFF0-41E2-86EB-E451868B9A5F}
EndGlobalSection
EndGlobal