From dae0e233b8674f095bbcd4c55d1a662ae63e3f26 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Fri, 8 Apr 2022 15:52:49 +0200 Subject: [PATCH 001/149] WebHost: add a /stats page --- WebHostLib/__init__.py | 3 +- WebHostLib/requirements.txt | 1 + WebHostLib/stats.py | 70 +++++++++++++++++++++++++++++++ WebHostLib/templates/siteMap.html | 1 + WebHostLib/templates/stats.html | 21 ++++++++++ 5 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 WebHostLib/stats.py create mode 100644 WebHostLib/templates/stats.html diff --git a/WebHostLib/__init__.py b/WebHostLib/__init__.py index b13a0961d8..d818ffa1fe 100644 --- a/WebHostLib/__init__.py +++ b/WebHostLib/__init__.py @@ -207,6 +207,7 @@ def get_datapackge(): return Response(json.dumps(network_data_package, indent=4), mimetype="text/plain") +@app.route('/index') @app.route('/sitemap') def get_sitemap(): available_games = [] @@ -217,6 +218,6 @@ def get_sitemap(): from WebHostLib.customserver import run_server_process -from . import tracker, upload, landing, check, generate, downloads, api # to trigger app routing picking up on it +from . import tracker, upload, landing, check, generate, downloads, api, stats # to trigger app routing picking up on it app.register_blueprint(api.api_endpoints) diff --git a/WebHostLib/requirements.txt b/WebHostLib/requirements.txt index 4046409165..da8f682ae9 100644 --- a/WebHostLib/requirements.txt +++ b/WebHostLib/requirements.txt @@ -4,3 +4,4 @@ waitress>=2.1.0 flask-caching>=1.10.1 Flask-Compress>=1.11 Flask-Limiter>=2.2.0 +bokeh>=2.4.2 \ No newline at end of file diff --git a/WebHostLib/stats.py b/WebHostLib/stats.py new file mode 100644 index 0000000000..62c5dea2c4 --- /dev/null +++ b/WebHostLib/stats.py @@ -0,0 +1,70 @@ +from collections import Counter, defaultdict +from itertools import cycle +from datetime import datetime, timedelta, date +from math import pi + +from bokeh.embed import components +from bokeh.palettes import Dark2_8 as palette +from bokeh.plotting import figure, ColumnDataSource +from bokeh.resources import INLINE +from flask import render_template +from pony.orm import select + +from . import app, cache +from .models import Room + +pi2 = 2 * pi + + +@app.route('/stats') +@cache.memoize(timeout=60*60) # regen once per hour should be plenty +def stats(): + plot = figure(title="Games played per day", x_axis_type='datetime', x_axis_label="Date", y_axis_label="Played", + sizing_mode="scale_both") + games_played = defaultdict(Counter) + total_games = Counter() + room: Room + games = set() + cutoff = date.today()-timedelta(days=30000) + for room in select(room for room in Room if room.creation_time >= cutoff): + for slot in room.seed.slots: + total_games[slot.game] += 1 + games.add(slot.game) + games_played[room.creation_time.date()][slot.game] += 1 + days = sorted(games_played) + cyc_palette = cycle(palette) + for game in sorted(games): + occurences = [] + for day in days: + occurences.append(games_played[day][game]) + plot.line([datetime.combine(day, datetime.min.time()) for day in days], + occurences, legend_label=game, line_width=2, color=next(cyc_palette)) + total = sum(total_games.values()) + pie = figure(plot_height=350, title=f"Games played in the last 30 days. (Total: {total})", toolbar_location=None, + tools="hover", tooltips=[("Game:", "@games"), ("Played:", "@count")], + sizing_mode="scale_both") + pie.axis.visible = False + + data = { + "games": [], + "count": [], + "start_angles": [], + "end_angles": [], + } + current_angle = 0 + for i, (game, count) in enumerate(total_games.most_common()): + data["games"].append(game) + data["count"].append(count) + data["start_angles"].append(current_angle) + angle = count / total * pi2 + current_angle += angle + data["end_angles"].append(current_angle) + + data["colors"] = [element[1] for element in sorted((game, color) for game, color in zip(data["games"], cycle(palette)))] + pie.wedge(x=0.5, y=0.5, radius=0.5, + start_angle="start_angles", end_angle="end_angles", fill_color="colors", + source=ColumnDataSource(data=data), legend_field="games") + + script, charts = components((plot, pie)) + return render_template("stats.html", js_resources=INLINE.render_js(), css_resources=INLINE.render_css(), + chart_data=script, charts=charts) diff --git a/WebHostLib/templates/siteMap.html b/WebHostLib/templates/siteMap.html index dcce772723..9626aef3f5 100644 --- a/WebHostLib/templates/siteMap.html +++ b/WebHostLib/templates/siteMap.html @@ -25,6 +25,7 @@
  • Tutorials Page
  • User Content
  • Weighted Settings Page
  • +
  • Game Statistics
  • Game Info Pages

    diff --git a/WebHostLib/templates/stats.html b/WebHostLib/templates/stats.html new file mode 100644 index 0000000000..395940768c --- /dev/null +++ b/WebHostLib/templates/stats.html @@ -0,0 +1,21 @@ +{% extends 'pageWrapper.html' %} + +{% block head %} + Site Map + + {{ css_resources|indent(4)|safe }} + {{ js_resources|indent(4)|safe }} + {{ chart_data|indent(4)|safe }} +{% endblock %} + +{% block body %} + {% include 'header/grassFlowersHeader.html' %} +
    +

    Stats

    + {% for chart in charts %} + {{ chart|indent(12)|safe }} + {% endfor %} + + +
    +{% endblock %} From 249972c7fd12204c4be59b1576facfcea2fa24ed Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sat, 9 Apr 2022 19:38:08 +0200 Subject: [PATCH 002/149] webhost: stats improvements --- WebHostLib/stats.py | 36 +++++++++++++++++++-------------- WebHostLib/templates/stats.html | 2 +- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/WebHostLib/stats.py b/WebHostLib/stats.py index 62c5dea2c4..76f3b430d0 100644 --- a/WebHostLib/stats.py +++ b/WebHostLib/stats.py @@ -1,7 +1,7 @@ from collections import Counter, defaultdict from itertools import cycle from datetime import datetime, timedelta, date -from math import pi +from math import tau from bokeh.embed import components from bokeh.palettes import Dark2_8 as palette @@ -13,7 +13,17 @@ from pony.orm import select from . import app, cache from .models import Room -pi2 = 2 * pi + +def get_db_data(): + games_played = defaultdict(Counter) + total_games = Counter() + cutoff = date.today()-timedelta(days=30000) + room: Room + for room in select(room for room in Room if room.creation_time >= cutoff): + for slot in room.seed.slots: + total_games[slot.game] += 1 + games_played[room.creation_time.date()][slot.game] += 1 + return total_games, games_played @app.route('/stats') @@ -21,24 +31,19 @@ pi2 = 2 * pi def stats(): plot = figure(title="Games played per day", x_axis_type='datetime', x_axis_label="Date", y_axis_label="Played", sizing_mode="scale_both") - games_played = defaultdict(Counter) - total_games = Counter() - room: Room - games = set() - cutoff = date.today()-timedelta(days=30000) - for room in select(room for room in Room if room.creation_time >= cutoff): - for slot in room.seed.slots: - total_games[slot.game] += 1 - games.add(slot.game) - games_played[room.creation_time.date()][slot.game] += 1 + + total_games, games_played = get_db_data() days = sorted(games_played) + cyc_palette = cycle(palette) - for game in sorted(games): + + for game in sorted(total_games): occurences = [] for day in days: occurences.append(games_played[day][game]) plot.line([datetime.combine(day, datetime.min.time()) for day in days], occurences, legend_label=game, line_width=2, color=next(cyc_palette)) + total = sum(total_games.values()) pie = figure(plot_height=350, title=f"Games played in the last 30 days. (Total: {total})", toolbar_location=None, tools="hover", tooltips=[("Game:", "@games"), ("Played:", "@count")], @@ -56,11 +61,12 @@ def stats(): data["games"].append(game) data["count"].append(count) data["start_angles"].append(current_angle) - angle = count / total * pi2 + angle = count / total * tau current_angle += angle data["end_angles"].append(current_angle) - data["colors"] = [element[1] for element in sorted((game, color) for game, color in zip(data["games"], cycle(palette)))] + data["colors"] = [element[1] for element in sorted((game, color) for game, color in + zip(data["games"], cycle(palette)))] pie.wedge(x=0.5, y=0.5, radius=0.5, start_angle="start_angles", end_angle="end_angles", fill_color="colors", source=ColumnDataSource(data=data), legend_field="games") diff --git a/WebHostLib/templates/stats.html b/WebHostLib/templates/stats.html index 395940768c..1278a5e54d 100644 --- a/WebHostLib/templates/stats.html +++ b/WebHostLib/templates/stats.html @@ -1,7 +1,7 @@ {% extends 'pageWrapper.html' %} {% block head %} - Site Map + Statistics {{ css_resources|indent(4)|safe }} {{ js_resources|indent(4)|safe }} From 66921499ad3b009fe96b0bbed7e778d753448086 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Wed, 13 Apr 2022 23:46:15 -0400 Subject: [PATCH 003/149] Display multiple charts per row, reduce overall chart size --- WebHostLib/static/styles/stats.css | 15 +++++++++++++++ WebHostLib/stats.py | 10 +++++----- WebHostLib/templates/stats.html | 19 +++++++++++++------ 3 files changed, 33 insertions(+), 11 deletions(-) create mode 100644 WebHostLib/static/styles/stats.css diff --git a/WebHostLib/static/styles/stats.css b/WebHostLib/static/styles/stats.css new file mode 100644 index 0000000000..9eb165abdc --- /dev/null +++ b/WebHostLib/static/styles/stats.css @@ -0,0 +1,15 @@ +#charts-wrapper{ + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: space-between; +} + +.chart-container{ + display: flex; + flex-direction: column; + width: calc(50% - 15px); + min-width: 400px; + margin-bottom: 30px; +} + diff --git a/WebHostLib/stats.py b/WebHostLib/stats.py index 76f3b430d0..30272cdc1e 100644 --- a/WebHostLib/stats.py +++ b/WebHostLib/stats.py @@ -29,8 +29,8 @@ def get_db_data(): @app.route('/stats') @cache.memoize(timeout=60*60) # regen once per hour should be plenty def stats(): - plot = figure(title="Games played per day", x_axis_type='datetime', x_axis_label="Date", y_axis_label="Played", - sizing_mode="scale_both") + plot = figure(title="Games Played Per Day", x_axis_type='datetime', x_axis_label="Date", + y_axis_label="Games Played", sizing_mode="scale_both", width=500, height=500) total_games, games_played = get_db_data() days = sorted(games_played) @@ -45,9 +45,9 @@ def stats(): occurences, legend_label=game, line_width=2, color=next(cyc_palette)) total = sum(total_games.values()) - pie = figure(plot_height=350, title=f"Games played in the last 30 days. (Total: {total})", toolbar_location=None, + pie = figure(plot_height=350, title=f"Games Played in the Last 30 Days (Total: {total})", toolbar_location=None, tools="hover", tooltips=[("Game:", "@games"), ("Played:", "@count")], - sizing_mode="scale_both") + sizing_mode="scale_both", width=500, height=500) pie.axis.visible = False data = { @@ -73,4 +73,4 @@ def stats(): script, charts = components((plot, pie)) return render_template("stats.html", js_resources=INLINE.render_js(), css_resources=INLINE.render_css(), - chart_data=script, charts=charts) + chart_data=script, charts=charts, chart_count=len(charts)) diff --git a/WebHostLib/templates/stats.html b/WebHostLib/templates/stats.html index 1278a5e54d..5d28290738 100644 --- a/WebHostLib/templates/stats.html +++ b/WebHostLib/templates/stats.html @@ -1,8 +1,9 @@ {% extends 'pageWrapper.html' %} {% block head %} - Statistics + Archipelago Game Statistics + {{ css_resources|indent(4)|safe }} {{ js_resources|indent(4)|safe }} {{ chart_data|indent(4)|safe }} @@ -11,11 +12,17 @@ {% block body %} {% include 'header/grassFlowersHeader.html' %}
    -

    Stats

    - {% for chart in charts %} - {{ chart|indent(12)|safe }} +

    Archipelago Game Statistics

    +
    + The data on this page is updated hourly. +
    + +
    + {% for index in range(chart_count) %} +
    + {{ charts[index]|indent(12)|safe }} +
    {% endfor %} - - +
    {% endblock %} From 6e171d19f05c776ce978dbac0d43b0fa8db6ea24 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Wed, 13 Apr 2022 23:51:44 -0400 Subject: [PATCH 004/149] Remove no longer needed control data --- WebHostLib/stats.py | 2 +- WebHostLib/templates/stats.html | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/WebHostLib/stats.py b/WebHostLib/stats.py index 30272cdc1e..9a164d02cb 100644 --- a/WebHostLib/stats.py +++ b/WebHostLib/stats.py @@ -73,4 +73,4 @@ def stats(): script, charts = components((plot, pie)) return render_template("stats.html", js_resources=INLINE.render_js(), css_resources=INLINE.render_css(), - chart_data=script, charts=charts, chart_count=len(charts)) + chart_data=script, charts=charts) diff --git a/WebHostLib/templates/stats.html b/WebHostLib/templates/stats.html index 5d28290738..a662e21bf5 100644 --- a/WebHostLib/templates/stats.html +++ b/WebHostLib/templates/stats.html @@ -18,9 +18,9 @@
    - {% for index in range(chart_count) %} + {% for chart in charts %}
    - {{ charts[index]|indent(12)|safe }} + {{ chart|indent(12)|safe }}
    {% endfor %}
    From 1afacd28a1563d13073a97edb8356ba65a09c3a3 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Thu, 14 Apr 2022 19:00:58 -0400 Subject: [PATCH 005/149] Fix chart indent --- WebHostLib/templates/stats.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WebHostLib/templates/stats.html b/WebHostLib/templates/stats.html index a662e21bf5..3e60c7afdd 100644 --- a/WebHostLib/templates/stats.html +++ b/WebHostLib/templates/stats.html @@ -20,7 +20,7 @@
    {% for chart in charts %}
    - {{ chart|indent(12)|safe }} + {{ chart|indent(16)|safe }}
    {% endfor %}
    From acd7bce903650db3cd47e669e515b78fd5db52e5 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Wed, 20 Apr 2022 18:57:29 +0200 Subject: [PATCH 006/149] Logging: change text loggers to log current time --- Utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Utils.py b/Utils.py index e6450f3689..2068d48baa 100644 --- a/Utils.py +++ b/Utils.py @@ -417,7 +417,7 @@ loglevel_mapping = {'error': logging.ERROR, 'info': logging.INFO, 'warning': log def init_logging(name: str, loglevel: typing.Union[str, int] = logging.INFO, write_mode: str = "w", - log_format: str = "[%(name)s]: %(message)s", exception_logger: str = ""): + log_format: str = "[%(name)s at %(asctime)s]: %(message)s", exception_logger: str = ""): loglevel: int = loglevel_mapping.get(loglevel, loglevel) log_folder = user_path("logs") os.makedirs(log_folder, exist_ok=True) From 0f5a7cda6c012bb1042d4edd2bb086f6567eb60a Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Fri, 22 Apr 2022 09:12:51 +0200 Subject: [PATCH 007/149] LttP: fix retro allowing arrows in "P" price shuffle in shops (#448) --- worlds/alttp/Shops.py | 46 +++++++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/worlds/alttp/Shops.py b/worlds/alttp/Shops.py index b16eff3ca7..73714abcc4 100644 --- a/worlds/alttp/Shops.py +++ b/worlds/alttp/Shops.py @@ -267,7 +267,7 @@ def ShopSlotFill(world): min(int(price * world.shop_price_modifier[location.player] / 100) * 5, 9999), 1, location.item.player if location.item.player != location.player else 0) if 'P' in world.shop_shuffle[location.player]: - price_to_funny_price(shop.inventory[location.shop_slot], world, location.player) + price_to_funny_price(world, shop.inventory[location.shop_slot], location.player) def create_shops(world, player: int): @@ -499,7 +499,7 @@ def shuffle_shops(world, items, player: int): if 'P' in option: for item in total_inventory: - price_to_funny_price(item, world, player) + price_to_funny_price(world, item, player) # Don't apply to upgrade shops # Upgrade shop is only one place, and will generally be too easy to # replenish hearts and bombs @@ -529,14 +529,14 @@ price_blacklist = { price_chart = { ShopPriceType.Rupees: lambda p: p, - ShopPriceType.Hearts: lambda p: min(5, p // 5) * 8, # Each heart is 0x8 in memory, Max of 5 hearts (20 total??) - ShopPriceType.Magic: lambda p: min(15, p // 5) * 8, # Each pip is 0x8 in memory, Max of 15 pips (16 total...) - ShopPriceType.Bombs: lambda p: max(1, min(10, p // 5)), # 10 Bombs max - ShopPriceType.Arrows: lambda p: max(1, min(30, p // 5)), # 30 Arrows Max + ShopPriceType.Hearts: lambda p: min(5, p // 5) * 8, # Each heart is 0x8 in memory, Max of 5 hearts (20 total??) + ShopPriceType.Magic: lambda p: min(15, p // 5) * 8, # Each pip is 0x8 in memory, Max of 15 pips (16 total...) + ShopPriceType.Bombs: lambda p: max(1, min(10, p // 5)), # 10 Bombs max + ShopPriceType.Arrows: lambda p: max(1, min(30, p // 5)), # 30 Arrows Max ShopPriceType.HeartContainer: lambda p: 0x8, ShopPriceType.BombUpgrade: lambda p: 0x1, ShopPriceType.ArrowUpgrade: lambda p: 0x1, - ShopPriceType.Keys: lambda p: min(3, (p // 100) + 1), # Max of 3 keys for a price + ShopPriceType.Keys: lambda p: min(3, (p // 100) + 1), # Max of 3 keys for a price ShopPriceType.Potion: lambda p: (p // 5) % 5, } @@ -564,27 +564,27 @@ simple_price_types = [ ] -def price_to_funny_price(item: dict, world, player: int): +def price_to_funny_price(world, item: dict, player: int): """ Converts a raw Rupee price into a special price type """ if item: - my_price_types = simple_price_types.copy() - world.random.shuffle(my_price_types) - for p_type in my_price_types: - # Ignore rupee prices, logic-based prices or Keys (if we're not on universal keys) - if p_type in [ShopPriceType.Rupees, ShopPriceType.BombUpgrade, ShopPriceType.ArrowUpgrade]: + price_types = [ + ShopPriceType.Rupees, # included as a chance to not change price type + ShopPriceType.Hearts, + ShopPriceType.Bombs, + ] + # don't pay in universal keys to get access to universal keys + if world.smallkey_shuffle[player] == smallkey_shuffle.option_universal \ + and not "Small Key (Universal)" == item['replacement']: + price_types.append(ShopPriceType.Keys) + if not world.retro[player]: + price_types.append(ShopPriceType.Arrows) + world.random.shuffle(price_types) + for p_type in price_types: + # Ignore rupee prices + if p_type == ShopPriceType.Rupees: return - # If we're using keys... - # Check if we're in universal, check if our replacement isn't a Small Key - # Check if price isn't super small... (this will ideally be handled in a future table) - if p_type in [ShopPriceType.Keys]: - if world.smallkey_shuffle[player] != smallkey_shuffle.option_universal: - continue - elif item['replacement'] and 'Small Key' in item['replacement']: - continue - if item['price'] < 50: - continue if any(x in item['item'] for x in price_blacklist[p_type]): continue else: From 21f1ccbfb45f2648c7d78ca43a1d84672abbd801 Mon Sep 17 00:00:00 2001 From: Colin Lenzen <32756996+TriumphantBass@users.noreply.github.com> Date: Sat, 23 Apr 2022 17:02:53 -0700 Subject: [PATCH 008/149] Timespinner: Options to Support Loot Randomization --- worlds/timespinner/Options.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/worlds/timespinner/Options.py b/worlds/timespinner/Options.py index 0fc0b76765..a297b912e7 100644 --- a/worlds/timespinner/Options.py +++ b/worlds/timespinner/Options.py @@ -81,6 +81,20 @@ class ShopMultiplier(Range): range_end = 10 default = 1 +class LootPool(Choice): + """Sets the items that drop from enemies (does not apply to boss reward checks) + Vanilla: Drops are the same as the base game + Randomized: Each slot of every enemy's drop table is given a random use item or piece of equipment. + Empty: Enemies drop nothing.""" + display_name = "Shop Inventory" + option_vanilla = 0 + option_randomized = 1 + option_empty = 2 + +class ShowBestiary(Toggle): + "All entries in the bestiary are visible, without needing to kill one of a given enemy first" + display_name = "Show Bestiary Entries" + # Some options that are available in the timespinner randomizer arent currently implemented timespinner_options: Dict[str, Option] = { "StartWithJewelryBox": StartWithJewelryBox, From 75a76fb184c47a44f2202028a79387d1af754ad1 Mon Sep 17 00:00:00 2001 From: Colin Lenzen <32756996+TriumphantBass@users.noreply.github.com> Date: Sat, 23 Apr 2022 17:09:11 -0700 Subject: [PATCH 009/149] Include options in options dict --- worlds/timespinner/Options.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/worlds/timespinner/Options.py b/worlds/timespinner/Options.py index a297b912e7..d51a6b1c44 100644 --- a/worlds/timespinner/Options.py +++ b/worlds/timespinner/Options.py @@ -114,6 +114,8 @@ timespinner_options: Dict[str, Option] = { "ShopFill": ShopFill, "ShopWarpShards": ShopWarpShards, "ShopMultiplier": ShopMultiplier, + "LootPool": LootPool, + "ShowBestiary": ShowBestiary, "DeathLink": DeathLink, } From 81feb2fd5e29ed3f1cb2d575616d3affe23f26e5 Mon Sep 17 00:00:00 2001 From: Hussein Farran Date: Sun, 24 Apr 2022 11:20:14 -0400 Subject: [PATCH 010/149] [Docs] Update network diagram into mermaid diagram syntax. (#446) --- docs/network diagram.jpg | Bin 0 -> 225503 bytes docs/network diagram.md | 155 ++++++ docs/network diagram.svg | 1 + docs/network.graphml | 1004 -------------------------------------- docs/network.png | Bin 112989 -> 0 bytes 5 files changed, 156 insertions(+), 1004 deletions(-) create mode 100644 docs/network diagram.jpg create mode 100644 docs/network diagram.md create mode 100644 docs/network diagram.svg delete mode 100644 docs/network.graphml delete mode 100644 docs/network.png diff --git a/docs/network diagram.jpg b/docs/network diagram.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ad187d091bbc49daa17477ef37c3ea38ec64271a GIT binary patch literal 225503 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�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 z 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

    x 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 CC + + %% ChecksFinder + subgraph ChecksFinder + CFC[ChecksFinderClient] + CF[ChecksFinder] + CFC <--> CF + end + CC <-- Integrated --> CFC + + %% A Link to the Past + subgraph A Link to the Past + LTTP[SNES] + end + SNI <-- Various, depending on SNES device --> LTTP + + %% Final Fantasy + subgraph Final Fantasy 1 + FF1[FF1Client] + FFLUA[Lua Connector] + BZFF[BizHawk with Final Fantasy Loaded] + FF1 <-- LuaSockets --> FFLUA + FFLUA <--> BZFF + end + CC <-- Integrated --> FF1 + + %% Ocarina of Time + subgraph Ocarina of Time + OC[OoTClient] + LC[Lua Connector] + OCB[BizHawk with Ocarina of Time Loaded] + OC <-- LuaSockets --> LC + LC <--> OCB + end + CC <-- Integrated --> OC + + %% SNI Connectors + SC[SNIClient] + SNI["Super Nintendo Interface (SNI)"] + CC <-- Integrated --> SC + SC <-- WebSockets --> SNI + + %% Super Metroid + subgraph Super Metroid + SM[SNES] + end + SNI <-- Various, depending on SNES device --> SM + + %% Super Metroid/A Link to the Past Combo Randomizer + subgraph "SMZ3" + SMZ[SNES] + end + SNI <-- Various, depending on SNES device --> SMZ + + %% Native Clients or Games + %% Games or clients which compile to native or which the client is integrated in the game. + subgraph "Native" + APCLIENTPP[Game using apclientpp Client Library] + APCPP[Game using Apcpp Client Library] + subgraph Secret of Evermore + SOE[ap-soeclient] + end + SM64[Super Mario 64 Ex] + V6[VVVVVV] + MT[Meritous] + + APCLIENTPP <--> SOE + APCLIENTPP <--> MT + APCPP <--> SM64 + APCPP <--> V6 + end + SOE <--> SNI <-- Various, depending on SNES device --> SOESNES + AS <-- WebSockets --> APCLIENTPP + AS <-- WebSockets --> APCPP + + %% Java Based Games + subgraph Java + JM[Mod with Archipelago.MultiClient.Java] + STS[Slay the Spire] + JM <-- Mod the Spire --> STS + subgraph Minecraft + MCS[Minecraft Forge Server] + JMC[Any Java Minecraft Clients] + MCS <-- TCP --> JMC + end + JM <-- Forge Mod Loader --> MCS + end + AS <-- WebSockets --> JM + + %% .NET Based Games + subgraph .NET + NM[Mod with Archipelago.MultiClient.Net] + subgraph FNA/XNA + TS[Timespinner] + RL[Rogue Legacy] + end + NM <-- TsRandomizer --> TS + NM <-- RogueLegacyRandomizer --> RL + subgraph Unity + ROR[Risk of Rain 2] + SN[Subnautica] + HK[Hollow Knight] + R[Raft] + end + NM <-- BepInEx --> ROR + NM <-- "QModLoader (BepInEx)" --> SN + NM <-- HK Modding API --> HK + NM <--> R + end + AS <-- WebSockets --> NM + + %% Archipelago WebHost + subgraph "WebHost (archipelago.gg)" + WHNOTE(["Configurable (waitress, gunicorn, flask)"]) + AH[AutoHoster] + PDB[(PonyORM DB)] + WH[WebHost] + FWC[Flask WebContent] + AG[AutoGenerator] + + AH <-- SQL --> PDB + WH -- Subprocesses --> AH + FWC <-- SQL --> PDB + WH --> FWC + AG -- Deposit Generated Worlds --> PDB + PDB -- Provide Generation Instructions --> AG + WH -- Subprocesses --> AG + end + AH -- Subprocesses --> AS + + %% Special subgraph for SoE for its SNES connection + subgraph Secret of Evermore + SOESNES[SNES] + end + + %% Factorio + subgraph Factorio + FC[FactorioClient] <-- RCON --> FS[Factorio Server] + FS <-- UDP --> FG[Factorio Games] + FMOD[Factorio Mod Generated by AP] + FMAPI[Factorio Modding API] + FMAPI <--> FS + FMAPI <--> FG + FMOD <--> FMAPI + end + CC <-- Integrated --> FC +``` \ No newline at end of file diff --git a/docs/network diagram.svg b/docs/network diagram.svg new file mode 100644 index 0000000000..e7bbd2cf08 --- /dev/null +++ b/docs/network diagram.svg @@ -0,0 +1 @@ +
    Factorio
    Secret of Evermore
    WebHost (archipelago.gg)
    .NET
    Java
    Native
    SMZ3
    Super Metroid
    Ocarina of Time
    Final Fantasy 1
    A Link to the Past
    ChecksFinder
    FNA/XNA
    Unity
    Minecraft
    Secret of Evermore
    WebSockets
    Integrated
    Various, depending on SNES device
    LuaSockets
    Integrated
    LuaSockets
    Integrated
    Integrated
    WebSockets
    Various, depending on SNES device
    Various, depending on SNES device
    Various, depending on SNES device
    WebSockets
    WebSockets
    Mod the Spire
    TCP
    Forge Mod Loader
    WebSockets
    TsRandomizer
    RogueLegacyRandomizer
    BepInEx
    QModLoader (BepInEx)
    HK Modding API
    WebSockets
    SQL
    Subprocesses
    SQL
    Deposit Generated Worlds
    Provide Generation Instructions
    Subprocesses
    Subprocesses
    RCON
    UDP
    Integrated
    Factorio Server
    FactorioClient
    Factorio Games
    Factorio Mod Generated by AP
    Factorio Modding API
    SNES
    Configurable (waitress, gunicorn, flask)
    AutoHoster
    PonyORM DB
    WebHost
    Flask WebContent
    AutoGenerator
    Mod with Archipelago.MultiClient.Net
    Risk of Rain 2
    Subnautica
    Hollow Knight
    Raft
    Timespinner
    Rogue Legacy
    Mod with Archipelago.MultiClient.Java
    Slay the Spire
    Minecraft Forge Server
    Any Java Minecraft Clients
    Game using apclientpp Client Library
    Game using Apcpp Client Library
    Super Mario 64 Ex
    VVVVVV
    Meritous
    ap-soeclient
    SNES
    SNES
    OoTClient
    Lua Connector
    BizHawk with Ocarina of Time Loaded
    FF1Client
    Lua Connector
    BizHawk with Final Fantasy Loaded
    SNES
    ChecksFinderClient
    ChecksFinder
    Archipelago Server
    CommonClient.py
    Super Nintendo Interface (SNI)
    SNIClient
    \ No newline at end of file diff --git a/docs/network.graphml b/docs/network.graphml deleted file mode 100644 index 1262484298..0000000000 --- a/docs/network.graphml +++ /dev/null @@ -1,1004 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Archipelago Server - - - - - - - - - - - - - - - Factorio - - - - - - - - - - Folder 1 - - - - - - - - - - - - - - - - - FactorioClient - - - - - - - - - - - - Factorio Server - - - - - - - - - - - - Factorio Games - - - - - - - - - - - - Generated AP Factorio Mod - - - - - - - - - - - - - - - - - WebHost (archipelago.gg) - - - - - - - - - Folder 3 - - - - - - - - - - - - - - - - - WebHost - - - - - - - - - - - - Flask WebContent - - - - - - - - - - - - AutoHoster - - - - - - - - - - - - PonyORM DB - - - - - - - - - - - - - - - - .Net - - - - - - - - - - Folder 5 - - - - - - - - - - - - - - - - - Mod with Archipelago.MultiClient.Net - - - - - - - - - - - - - - - Unity - - - - - - - - - - Folder 4 - - - - - - - - - - - - - - - - - Risk of Rain 2 - - - - - - - - - - - - Subnautica - - - - - - - - - - - - - - - - - FNA - - - - - - - - - - Folder 4 - - - - - - - - - - - - - - - - - Timespinner - - - - - - - - - - - - - - - - - - Java - - - - - - - - - - Folder 6 - - - - - - - - - - - - - - - - - - - - Minecraft - - - - - - - - - - Folder 4 - - - - - - - - - - - - - - - - - Minecraft Forge Server - - - - - - - - - - - - Any Java Minecraft Clients - - - - - - - - - - - - - - Mod with Archipelago.MultiClient.Java - - - - - - - - - - - - Slay the Spire - - - - - - - - - - - - - - CommonClient.py - - - - - - - - - - - - - - - A Link to the Past - - - - - - - - - - Folder 2 - - - - - - - - - - - - - - - - - Z3Client - - - - - - - - - - - - SNI - - - - - - - - - - - - SNES - - - - - - - - - - - - LttPClient - - - - - - - - - - - - - - - - Ocarina of Time - - - - - - - - - - 1 - - - - - - - - - - - - - - - - - Z5Client - - - - - - - - - - - - Lua Connector - - - - - - - - - - - - BizHawk with Ocarina of Time loaded - - - - - - - - - - - - - - - - RCON - - - - - - - - - - - - - - - - - - - - - - - UDP - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Configurable (waitress, gunicorn, flask) - - - - - - - - - - - - Subprocess - - - - - - - - - - - - SQL - - - - - - - - - - - - - - - - - - - - - - - SQL - - - - - - - - - - - - - - - - - - - - - - QModLoader (BepInEx) - BepInEx - TsRandomizer - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - TCP - - - - - - - - - - - Mod the Spire - - - - - - - - - - - Forge Mod Loader - - - - - - - - - - - - - - - - - - - - - - - gRPC - - - - - - - - - - - - - - - - - - - - - - - Various, depends on SNES device type - - - - - - - - - - - WebSocket - - - - - - - - - - - LuaSockets - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - WebSocket - - - - - - - - - - - - Subprocesses - - - - - - - - - - - WebSocket - - - - - - - - - - - WebSocket - - - - - - - - - - - WebSocket - - - - - - - - - - - Integrated - - - - - - - - - - - Integrated - - - - - - - - - - - WebSocket - - - - - - - - - diff --git a/docs/network.png b/docs/network.png deleted file mode 100644 index 86691d2fd2fed5e695cad658ed856c1d3e97644c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112989 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%0DA}Hpou05gqiVHY^F^p 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 From 9ee5fae4767fe258a4377a844e0dcddab4030d17 Mon Sep 17 00:00:00 2001 From: N00byKing Date: Sun, 24 Apr 2022 15:14:42 +0200 Subject: [PATCH 011/149] sm64ex: Update dependency in documentation --- WebHostLib/static/assets/tutorial/Super Mario 64/setup_en.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WebHostLib/static/assets/tutorial/Super Mario 64/setup_en.md b/WebHostLib/static/assets/tutorial/Super Mario 64/setup_en.md index c000e94352..5cc9113430 100644 --- a/WebHostLib/static/assets/tutorial/Super Mario 64/setup_en.md +++ b/WebHostLib/static/assets/tutorial/Super Mario 64/setup_en.md @@ -36,7 +36,7 @@ If it still crashes, recheck if you typed the launch options correctly (Describe # Manual Compilation (Linux/Windows) Dependencies for Linux: `sdl2 glew cmake python make`. -Dependencies for Windows: `mingw-w64-x86_64-gcc mingw-w64-x86_64-glew mingw-w64-x86_64-SDL2 git make python3 cmake` +Dependencies for Windows: `mingw-w64-x86_64-gcc mingw-w64-x86_64-glew mingw-w64-x86_64-SDL2 git make python3 mingw-w64-x86_64-cmake` SM64EX will link `jsoncpp` dynamic if installed. If not, it will compile and link statically. 1. Clone `https://github.com/N00byKing/sm64ex` recursively From b5f58b0a035ab2740fea25dd537a800725866c44 Mon Sep 17 00:00:00 2001 From: Jarno Westhof Date: Sun, 24 Apr 2022 12:37:08 +0200 Subject: [PATCH 012/149] Fixed copy paste issue --- worlds/timespinner/Options.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/worlds/timespinner/Options.py b/worlds/timespinner/Options.py index d51a6b1c44..84d99d5606 100644 --- a/worlds/timespinner/Options.py +++ b/worlds/timespinner/Options.py @@ -86,7 +86,7 @@ class LootPool(Choice): Vanilla: Drops are the same as the base game Randomized: Each slot of every enemy's drop table is given a random use item or piece of equipment. Empty: Enemies drop nothing.""" - display_name = "Shop Inventory" + display_name = "Loot Pool" option_vanilla = 0 option_randomized = 1 option_empty = 2 From cb6d37779680f07914ee421961caa8eb72fdf0b5 Mon Sep 17 00:00:00 2001 From: N00byKing Date: Sun, 24 Apr 2022 11:49:30 +0200 Subject: [PATCH 013/149] sm64ex: Rule updates --- worlds/sm64ex/Rules.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/worlds/sm64ex/Rules.py b/worlds/sm64ex/Rules.py index f5bb9ff77f..fc50a2446b 100644 --- a/worlds/sm64ex/Rules.py +++ b/worlds/sm64ex/Rules.py @@ -48,7 +48,6 @@ def set_rules(world, player: int, area_connections): add_rule(world.get_location("SL: Into the Igloo", player), lambda state: state.has("Vanish Cap", player)) add_rule(world.get_location("WDW: Quick Race Through Downtown!", player), lambda state: state.has("Vanish Cap", player)) if (world.StrictCapRequirements[player].value): - add_rule(world.get_location("BoB: Mario Wings to the Sky", player), lambda state: state.has("Wing Cap", player)) add_rule(world.get_location("HMC: Metal-Head Mario Can Move!", player), lambda state: state.has("Metal Cap", player)) add_rule(world.get_location("JRB: Through the Jet Stream", player), lambda state: state.has("Metal Cap", player)) add_rule(world.get_location("SSL: Free Flying for 8 Red Coins", player), lambda state: state.has("Wing Cap", player)) @@ -58,6 +57,14 @@ def set_rules(world, player: int, area_connections): add_rule(world.get_location("BoB: Mario Wings to the Sky", player), lambda state: state.has("Cannon Unlock BoB", player)) add_rule(world.get_location("WF: Blast Away the Wall", player), lambda state: state.has("Cannon Unlock WF", player)) add_rule(world.get_location("JRB: Blast to the Stone Pillar", player), lambda state: state.has("Cannon Unlock JRB", player)) + if (world.AreaRandomizer[player].value): + add_rule(world.get_location("WDW: Quick Race Through Downtown!", player), lambda state: state.has("Cannon Unlock WDW", player)) + add_rule(world.get_location("WDW: Go to Town for Red Coins", player), lambda state: state.has("Cannon Unlock WDW", player)) + if (world.StrictCapRequirements and world.StrictCannonRequirements[player].value): + add_rule(world.get_location("BoB: Mario Wings to the Sky", player), lambda state: state.has("Cannon Unlock BoB", player) or state.has("Wing Cap", player)) + add_rule(world.get_location("BoB: Find the 8 Red Coins", player), lambda state: state.has("Cannon Unlock BoB", player) or state.has("Wing Cap", player)) + add_rule(world.get_location("BoB: Shoot to the Island in the Sky", player), lambda state: state.has("Cannon Unlock BoB", player) or state.has("Wing Cap", player)) + add_rule(world.get_location("RR: Somewhere Over the Rainbow", player), lambda state: state.has("Cannon Unlock RR", player)) #Rules for Secret Stars From 4f10dbb896b681240a4a5744b08bac704c07720c Mon Sep 17 00:00:00 2001 From: black-sliver <59490463+black-sliver@users.noreply.github.com> Date: Sun, 24 Apr 2022 12:08:19 +0200 Subject: [PATCH 014/149] Test: add missing cleanup in TestGenerate fixes a warning on some systems --- test/programs/TestGenerate.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/programs/TestGenerate.py b/test/programs/TestGenerate.py index 31b759970f..da227df5e2 100644 --- a/test/programs/TestGenerate.py +++ b/test/programs/TestGenerate.py @@ -34,6 +34,9 @@ class TestGenerateMain(unittest.TestCase): os.chdir(self.run_dir) self.output_tempdir = TemporaryDirectory(prefix='AP_out_') + def tearDown(self): + self.output_tempdir.cleanup() + def test_generate_absolute(self): sys.argv = [sys.argv[0], '--seed', '0', '--player_files_path', str(self.abs_input_dir), From c326566bd29ea8146c9ba4789db05a29bf0697ab Mon Sep 17 00:00:00 2001 From: CaitSith2 Date: Tue, 26 Apr 2022 02:28:43 -0700 Subject: [PATCH 015/149] Show "did you mean 'item/location_name'" in invalid item/location error. (#469) --- Options.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Options.py b/Options.py index 5ff5a67573..ea1b7eed1e 100644 --- a/Options.py +++ b/Options.py @@ -6,6 +6,7 @@ import typing import random from schema import Schema, And, Or +from thefuzz import process as fuzzy_process class AssembleOptions(abc.ABCMeta): @@ -456,13 +457,17 @@ class VerifyKeys: if self.verify_item_name: for item_name in self.value: if item_name not in world.item_names: + picks = fuzzy_process.extract(item_name, world.item_names, limit=2) raise Exception(f"Item {item_name} from option {self} " - f"is not a valid item name from {world.game}") + f"is not a valid item name from {world.game}. " + f"Did you mean '{picks[0][0]}' ({picks[0][1]}% sure)") elif self.verify_location_name: for location_name in self.value: if location_name not in world.location_names: + picks = fuzzy_process.extract(location_name, world.location_names, limit=2) raise Exception(f"Location {location_name} from option {self} " - f"is not a valid location name from {world.game}") + f"is not a valid location name from {world.game}. " + f"Did you mean '{picks[0][0]}' ({picks[0][1]}% sure)") class OptionDict(Option[typing.Dict[str, typing.Any]], VerifyKeys): From 9ecd320c8c16cb4a8568d19e97596b5e2a7d8d81 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sun, 24 Apr 2022 04:59:46 +0200 Subject: [PATCH 016/149] OoT: prevent connection from outdated clients --- worlds/oot/__init__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/worlds/oot/__init__.py b/worlds/oot/__init__.py index 9898f4b127..18b0f93936 100644 --- a/worlds/oot/__init__.py +++ b/worlds/oot/__init__.py @@ -83,6 +83,8 @@ class OOTWorld(World): data_version = 1 + required_client_version = (0, 3, 2) + def __init__(self, world, player): self.hint_data_available = threading.Event() super(OOTWorld, self).__init__(world, player) From 0309fac592f1548b09653f772b4fea47e8e8be7f Mon Sep 17 00:00:00 2001 From: espeon65536 Date: Tue, 26 Apr 2022 13:43:02 -0500 Subject: [PATCH 017/149] OoT: check for existence of ROM at start of generation --- worlds/oot/__init__.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/worlds/oot/__init__.py b/worlds/oot/__init__.py index 18b0f93936..37b2e8c2ac 100644 --- a/worlds/oot/__init__.py +++ b/worlds/oot/__init__.py @@ -89,6 +89,13 @@ class OOTWorld(World): self.hint_data_available = threading.Event() super(OOTWorld, self).__init__(world, player) + @classmethod + def stage_generate_early(cls, world: MultiWorld): + # Check that an OoT ROM exists at the specified path. Raises exception on failure. + # We don't need the ROM until output, but we want to fail early if no ROM is provided. + rom = Rom(file=get_options()['oot_options']['rom_file']) + del rom + def generate_early(self): # Player name MUST be at most 16 bytes ascii-encoded, otherwise won't write to ROM correctly if len(bytes(self.world.get_player_name(self.player), 'ascii')) > 16: From d57bdf6dc3f1e98568b802b374756a0eb7faab0a Mon Sep 17 00:00:00 2001 From: espeon65536 Date: Tue, 26 Apr 2022 15:16:02 -0500 Subject: [PATCH 018/149] OoT: No Logic modifications NL now uses the glitchless world graph, which enables entrance randomizer NL forces all logic tricks on, progression balancing off, minimal accessibility --- worlds/oot/DungeonList.py | 2 +- worlds/oot/__init__.py | 28 +++++++++++++++++----------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/worlds/oot/DungeonList.py b/worlds/oot/DungeonList.py index 8d3a95345b..dc3a8b0ca3 100644 --- a/worlds/oot/DungeonList.py +++ b/worlds/oot/DungeonList.py @@ -122,7 +122,7 @@ def create_dungeons(ootworld): hint = dungeon_info['hint'] if 'hint' in dungeon_info else name font_color = dungeon_info['font_color'] if 'font_color' in dungeon_info else 'White' - if ootworld.logic_rules == 'glitchless': + if ootworld.logic_rules == 'glitchless' or ootworld.logic_rules == 'no_logic': # ER + NL if not ootworld.dungeon_mq[name]: dungeon_json = os.path.join(data_path('World'), name + '.json') else: diff --git a/worlds/oot/__init__.py b/worlds/oot/__init__.py index 37b2e8c2ac..e1ea793cc3 100644 --- a/worlds/oot/__init__.py +++ b/worlds/oot/__init__.py @@ -170,12 +170,20 @@ class OOTWorld(World): self.dungeon_mq = {item['name']: (item in mq_dungeons) for item in dungeon_table} # Determine tricks in logic - for trick in self.logic_tricks: - normalized_name = trick.casefold() - if normalized_name in normalized_name_tricks: - setattr(self, normalized_name_tricks[normalized_name]['name'], True) - else: - raise Exception(f'Unknown OOT logic trick for player {self.player}: {trick}') + if self.logic_rules == 'glitchless': + for trick in self.logic_tricks: + normalized_name = trick.casefold() + if normalized_name in normalized_name_tricks: + setattr(self, normalized_name_tricks[normalized_name]['name'], True) + else: + raise Exception(f'Unknown OOT logic trick for player {self.player}: {trick}') + + # No Logic forces all tricks on, prog balancing off and beatable-only + elif self.logic_rules == 'no_logic': + self.world.progression_balancing[self.player].value = False + self.world.accessibility[self.player] = self.world.accessibility[self.player].from_text("minimal") + for trick in normalized_name_tricks.values(): + setattr(self, trick['name'], True) # Not implemented for now, but needed to placate the generator. Remove as they are implemented self.mq_dungeons_random = False # this will be a deprecated option later @@ -298,8 +306,7 @@ class OOTWorld(World): continue new_location.parent_region = new_region new_location.rule_string = rule - if self.world.logic_rules != 'none': - self.parser.parse_spot_rule(new_location) + self.parser.parse_spot_rule(new_location) if new_location.never: # We still need to fill the location even if ALR is off. logger.debug('Unreachable location: %s', new_location.name) @@ -311,8 +318,7 @@ class OOTWorld(World): lname = '%s from %s' % (event, new_region.name) new_location = OOTLocation(self.player, lname, type='Event', parent=new_region) new_location.rule_string = rule - if self.world.logic_rules != 'none': - self.parser.parse_spot_rule(new_location) + self.parser.parse_spot_rule(new_location) if new_location.never: logger.debug('Dropping unreachable event: %s', new_location.name) else: @@ -436,7 +442,7 @@ class OOTWorld(World): return item def create_regions(self): # create and link regions - if self.logic_rules == 'glitchless': + if self.logic_rules == 'glitchless' or self.logic_rules == 'no_logic': # enables ER + NL world_type = 'World' else: world_type = 'Glitched World' From 578451fcfa3f1d50a9b1931ce6fa23318a471dbd Mon Sep 17 00:00:00 2001 From: Doug Hoskisson Date: Wed, 27 Apr 2022 12:19:53 -0700 Subject: [PATCH 019/149] add some typing info to CollectionState (#468) --- BaseClasses.py | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/BaseClasses.py b/BaseClasses.py index a60951b2ad..e5d92b95b6 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -7,6 +7,7 @@ import json import functools from collections import OrderedDict, Counter, deque from typing import List, Dict, Optional, Set, Iterable, Union, Any, Tuple, TypedDict, Callable +import typing # this can go away when Python 3.8 support is dropped import secrets import random @@ -563,9 +564,20 @@ class MultiWorld(): return False +PathValue = Tuple[str, Optional["PathValue"]] + + class CollectionState(): - additional_init_functions: List[Callable] = [] - additional_copy_functions: List[Callable] = [] + prog_items: typing.Counter[Tuple[str, int]] + world: MultiWorld + reachable_regions: Dict[int, Set[Region]] + blocked_connections: Dict[int, Set[Entrance]] + events: Set[Location] + path: Dict[Union[Region, Entrance], PathValue] + locations_checked: Set[Location] + stale: Dict[int, bool] + additional_init_functions: List[Callable[[CollectionState, MultiWorld], None]] = [] + additional_copy_functions: List[Callable[[CollectionState, CollectionState], CollectionState]] = [] def __init__(self, parent: MultiWorld): self.prog_items = Counter() @@ -603,6 +615,7 @@ class CollectionState(): if new_region in rrp: bc.remove(connection) elif connection.can_reach(self): + assert new_region, "tried to search through an Entrance with no Region" rrp.add(new_region) bc.remove(connection) bc.update(new_region.exits) @@ -633,7 +646,8 @@ class CollectionState(): spot: Union[Location, Entrance, Region, str], resolution_hint: Optional[str] = None, player: Optional[int] = None) -> bool: - if not hasattr(spot, "can_reach"): + if isinstance(spot, str): + assert isinstance(player, int), "can_reach: player is required if spot is str" # try to resolve a name if resolution_hint == 'Location': spot = self.world.get_location(spot, player) @@ -644,7 +658,7 @@ class CollectionState(): spot = self.world.get_region(spot, player) return spot.can_reach(self) - def sweep_for_events(self, key_only: bool = False, locations: Set[Location] = None): + def sweep_for_events(self, key_only: bool = False, locations: Optional[Iterable[Location]] = None) -> None: if locations is None: locations = self.world.get_filled_locations() new_locations = True @@ -656,6 +670,7 @@ class CollectionState(): new_locations = reachable_events - self.events for event in new_locations: self.events.add(event) + assert isinstance(event.item, Item), "tried to collect Event with no Item" self.collect(event.item, True, event) def has(self, item: str, player: int, count: int = 1) -> bool: @@ -670,7 +685,7 @@ class CollectionState(): def count(self, item: str, player: int) -> int: return self.prog_items[item, player] - def has_group(self, item_name_group: str, player: int, count: int = 1): + def has_group(self, item_name_group: str, player: int, count: int = 1) -> bool: found: int = 0 for item_name in self.world.worlds[player].item_name_groups[item_name_group]: found += self.prog_items[item_name, player] @@ -678,7 +693,7 @@ class CollectionState(): return True return False - def count_group(self, item_name_group: str, player: int): + def count_group(self, item_name_group: str, player: int) -> int: found: int = 0 for item_name in self.world.worlds[player].item_name_groups[item_name_group]: found += self.prog_items[item_name, player] From 3001926ae40b5140ae9e282ac997109775cc2a22 Mon Sep 17 00:00:00 2001 From: espeon65536 Date: Wed, 27 Apr 2022 20:12:32 -0500 Subject: [PATCH 020/149] OoT: fix locations pointing to wrong entrance in server hints --- worlds/oot/__init__.py | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/worlds/oot/__init__.py b/worlds/oot/__init__.py index e1ea793cc3..dbc1167b10 100644 --- a/worlds/oot/__init__.py +++ b/worlds/oot/__init__.py @@ -512,6 +512,8 @@ class OOTWorld(World): raise e # Restore original state and delete assumed entrances for entrance in self.get_shuffled_entrances(): + if entrance.connected_region is not None: + entrance.disconnect() entrance.connect(self.world.get_region(entrance.vanilla_connected_region, self.player)) if entrance.assumed: assumed_entrance = entrance.assumed @@ -894,14 +896,29 @@ class OOTWorld(World): if len(entrance) > 2: hint_entrances.add(entrance[2][0]) + # Get main hint entrance to region. + # If the region is directly adjacent to a hint-entrance, we return that one. + # If it's in a dungeon, scan all the entrances for all the regions in the dungeon. + # This should terminate on the first region anyway, but we scan everything to be safe. + # If it's one of the special cases, go one level deeper. + # Otherwise return None. def get_entrance_to_region(region): - if region.name == 'Root': - return None + special_case_regions = { + "Beyond Door of Time", + "Kak Impas House Near Cow", + } + for entrance in region.entrances: if entrance.name in hint_entrances: return entrance - for entrance in region.entrances: - return get_entrance_to_region(entrance.parent_region) + if region.dungeon is not None: + for r in region.dungeon.regions: + for e in r.entrances: + if e.name in hint_entrances: + return e + if region.name in special_case_regions: + return get_entrance_to_region(region.entrances[0].parent_region) + return None # Remove undesired items from start_inventory for item_name in self.remove_from_start_inventory: @@ -916,6 +933,8 @@ class OOTWorld(World): if self.shuffle_interior_entrances != 'off' or self.shuffle_dungeon_entrances or self.shuffle_grotto_entrances: er_hint_data = {} for region in self.regions: + if not any(bool(loc.address) for loc in region.locations): # check if region has any non-event locations + continue main_entrance = get_entrance_to_region(region) if main_entrance is not None and main_entrance.shuffled: for location in region.locations: From d6697924cb832a477cb05acdd7e1291569bf0d92 Mon Sep 17 00:00:00 2001 From: espeon65536 Date: Wed, 27 Apr 2022 21:11:04 -0500 Subject: [PATCH 021/149] OoT: item links don't crash still point to not-helpful locations though --- worlds/oot/Hints.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/worlds/oot/Hints.py b/worlds/oot/Hints.py index 0f28ca9c1a..4250c5590e 100644 --- a/worlds/oot/Hints.py +++ b/worlds/oot/Hints.py @@ -636,7 +636,7 @@ def buildWorldGossipHints(world, checkedLocations=None): world.woth_dungeon = 0 if checkedLocations is None: - checkedLocations = {player: set() for player in world.world.player_ids} + checkedLocations = {player: set() for player in world.world.get_all_ids()} # If Ganondorf hints Light Arrows and is reachable without them, add to checkedLocations to prevent extra hinting # Can only be forced with vanilla bridge or trials From fd6e1b3046a1132b5dfc231c52e919455dc3b14a Mon Sep 17 00:00:00 2001 From: espeon65536 Date: Wed, 27 Apr 2022 21:43:16 -0500 Subject: [PATCH 022/149] OoT: fix bad interaction between dungeon_items: overworld and songs: dungeon --- worlds/oot/__init__.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/worlds/oot/__init__.py b/worlds/oot/__init__.py index dbc1167b10..1a5f1be41d 100644 --- a/worlds/oot/__init__.py +++ b/worlds/oot/__init__.py @@ -651,8 +651,9 @@ class OOTWorld(World): {'GanonBossKey': 4, 'BossKey': 3, 'SmallKey': 2, 'FortressSmallKey': 1}.get(item.type, 0)) non_dungeon_locations = [loc for loc in self.get_locations() if not loc.item and loc not in any_dungeon_locations - and loc.type != 'Shop' and ( - loc.type != 'Song' or self.shuffle_song_items != 'song')] + and loc.type != 'Shop' and + (loc.type != 'Song' or self.shuffle_song_items != 'song') and + (loc.name not in dungeon_song_locations or self.shuffle_song_items != 'dungeon')] self.world.random.shuffle(non_dungeon_locations) fill_restrictive(self.world, self.world.get_all_state(False), non_dungeon_locations, itempools['overworld'], True, True) From d8d881085f1dc6a2f84449ee22fba534c286cc5b Mon Sep 17 00:00:00 2001 From: espeon65536 Date: Wed, 27 Apr 2022 21:45:31 -0500 Subject: [PATCH 023/149] OoT: permit dungeon_items: overworld to fill into shops --- worlds/oot/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/worlds/oot/__init__.py b/worlds/oot/__init__.py index 1a5f1be41d..775718e963 100644 --- a/worlds/oot/__init__.py +++ b/worlds/oot/__init__.py @@ -650,8 +650,8 @@ class OOTWorld(World): itempools['overworld'].sort(key=lambda item: {'GanonBossKey': 4, 'BossKey': 3, 'SmallKey': 2, 'FortressSmallKey': 1}.get(item.type, 0)) non_dungeon_locations = [loc for loc in self.get_locations() if - not loc.item and loc not in any_dungeon_locations - and loc.type != 'Shop' and + not loc.item and loc not in any_dungeon_locations and + (loc.type != 'Shop' or loc.name in self.shop_prices) and (loc.type != 'Song' or self.shuffle_song_items != 'song') and (loc.name not in dungeon_song_locations or self.shuffle_song_items != 'dungeon')] self.world.random.shuffle(non_dungeon_locations) From f476747aded4a7722f6d9f2ab9b0c673472cc51f Mon Sep 17 00:00:00 2001 From: espeon65536 Date: Thu, 28 Apr 2022 09:44:53 -0500 Subject: [PATCH 024/149] OoT: remove early ROM check Will be replaced with an Autoworld class method, can_generate --- worlds/oot/__init__.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/worlds/oot/__init__.py b/worlds/oot/__init__.py index 775718e963..4cccd5e598 100644 --- a/worlds/oot/__init__.py +++ b/worlds/oot/__init__.py @@ -89,13 +89,6 @@ class OOTWorld(World): self.hint_data_available = threading.Event() super(OOTWorld, self).__init__(world, player) - @classmethod - def stage_generate_early(cls, world: MultiWorld): - # Check that an OoT ROM exists at the specified path. Raises exception on failure. - # We don't need the ROM until output, but we want to fail early if no ROM is provided. - rom = Rom(file=get_options()['oot_options']['rom_file']) - del rom - def generate_early(self): # Player name MUST be at most 16 bytes ascii-encoded, otherwise won't write to ROM correctly if len(bytes(self.world.get_player_name(self.player), 'ascii')) > 16: From 50eaf712a9d979459bcce7ef53ff9f6949b6500b Mon Sep 17 00:00:00 2001 From: Alchav <59858495+Alchav@users.noreply.github.com> Date: Thu, 28 Apr 2022 11:17:36 -0400 Subject: [PATCH 025/149] Remove outdated disclaimer --- MultiServer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MultiServer.py b/MultiServer.py index ca113a2c5a..b9ac9eef95 100644 --- a/MultiServer.py +++ b/MultiServer.py @@ -1811,7 +1811,7 @@ class ServerCommandProcessor(CommonCommandProcessor): return False def _cmd_option(self, option_name: str, option: str): - """Set options for the server. Warning: expires on restart""" + """Set options for the server.""" attrtype = self.ctx.simple_options.get(option_name, None) if attrtype: From 3e8c821c028eb1568dccb67af273b10a63fb60bc Mon Sep 17 00:00:00 2001 From: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com> Date: Fri, 29 Apr 2022 00:42:11 +0200 Subject: [PATCH 026/149] Add The Witness (#467) * Added The Witness Co-authored-by: metzner Co-authored-by: Jarno Westhof Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> --- README.md | 1 + .../static/assets/gameInfo/en_The Witness.md | 28 + .../assets/tutorial/The Witness/setup_en.md | 26 + .../static/assets/tutorial/tutorials.json | 19 + docs/network diagram.jpg | Bin 225503 -> 383052 bytes docs/network diagram.md | 2 + docs/network diagram.svg | 2 +- worlds/witness/Disable_Unrandomized.txt | 104 +++ worlds/witness/Options.py | 71 ++ worlds/witness/WitnessItems.txt | 21 + worlds/witness/WitnessLogic.txt | 712 ++++++++++++++++++ worlds/witness/__init__.py | 165 ++++ worlds/witness/items.py | 98 +++ worlds/witness/locations.py | 281 +++++++ worlds/witness/player_logic.py | 287 +++++++ worlds/witness/regions.py | 89 +++ worlds/witness/rules.py | 171 +++++ worlds/witness/static_logic.py | 138 ++++ worlds/witness/utils.py | 58 ++ 19 files changed, 2272 insertions(+), 1 deletion(-) create mode 100644 WebHostLib/static/assets/gameInfo/en_The Witness.md create mode 100644 WebHostLib/static/assets/tutorial/The Witness/setup_en.md create mode 100644 worlds/witness/Disable_Unrandomized.txt create mode 100644 worlds/witness/Options.py create mode 100644 worlds/witness/WitnessItems.txt create mode 100644 worlds/witness/WitnessLogic.txt create mode 100644 worlds/witness/__init__.py create mode 100644 worlds/witness/items.py create mode 100644 worlds/witness/locations.py create mode 100644 worlds/witness/player_logic.py create mode 100644 worlds/witness/regions.py create mode 100644 worlds/witness/rules.py create mode 100644 worlds/witness/static_logic.py create mode 100644 worlds/witness/utils.py diff --git a/README.md b/README.md index 935f34b521..98caa273a2 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,7 @@ Currently, the following games are supported: * ChecksFinder * ArchipIDLE * Hollow Knight +* The Witness For setup and instructions check out our [tutorials page](https://archipelago.gg/tutorial/). Downloads can be found at [Releases](https://github.com/ArchipelagoMW/Archipelago/releases), including compiled diff --git a/WebHostLib/static/assets/gameInfo/en_The Witness.md b/WebHostLib/static/assets/gameInfo/en_The Witness.md new file mode 100644 index 0000000000..23543285e2 --- /dev/null +++ b/WebHostLib/static/assets/gameInfo/en_The Witness.md @@ -0,0 +1,28 @@ +# The Witness + +## Where is the settings page? + +The [player settings page for this game](../player-settings) contains all the options you need to configure and export a +config file. + +## What does randomization do to this game? + +Puzzles are randomly generated using the popular [Sigma Rando](https://github.com/sigma144/witness-randomizer). +They are made to be similar to the original game, but with different solutions. + +Ontop of that each puzzle symbol (Squares, Stars, Dots, etc.) is now an item. +Panels with puzzle symbols on them are now locked initially. + +## What is a "check" in The Witness? + +Solving the last panel in a row of panels or an important standalone panel will count as a check, and send out an item. + +## What "items" can you unlock in The Witness? + +Every puzzle symbol and many other puzzle mechanics are items. +This includes symbols such as "Dots", "Black/White Squares", "Colored Squares", "Stars", "Symmetry", "Shapers" (coll. "Tetris Pieces"), "Erasers" and many more. + +## The Jungle, Orchard, Forest and Color House aren't randomized. What gives? + +There are limitations to what can currently be randomized in The Witness. +There is an option to turn these non-randomized panels off, called "disable_non_randomized" in your yaml file. This will also slightly change the activation requirement of certain panels, detailed [here](https://github.com/sigma144/witness-randomizer/wiki/Activation-Triggers). \ No newline at end of file diff --git a/WebHostLib/static/assets/tutorial/The Witness/setup_en.md b/WebHostLib/static/assets/tutorial/The Witness/setup_en.md new file mode 100644 index 0000000000..fe4ef56a65 --- /dev/null +++ b/WebHostLib/static/assets/tutorial/The Witness/setup_en.md @@ -0,0 +1,26 @@ +# The Witness Randomizer Setup + +## Required Software + +- [The Witness (Steam)](https://store.steampowered.com/app/210970/The_Witness/) +- [The Witness Archipalego Randomizer](https://github.com/JarnoWesthof/The-Witness-Randomizer-for-Archipelago) +- [ArchipelagoTextClient](https://github.com/ArchipelagoMW/Archipelago/releases) + +## Joining a MultiWorld Game + +This Randomizer can be very "moody" if you don't do everything in the correct order. +It is recommended to do every single one of these steps when you connect to a world. + +1. Launch The Witness +2. Start a fresh save (unless you have absolutely no other choice) +3. Do not move +4. Launch [The Witness Archipalego Randomizer](https://github.com/JarnoWesthof/The-Witness-Randomizer-for-Archipelago) +5. Enter the Archipelago Adress, Slot Name and Password +6. Press "Randomize" +7. Wait for the randomization to fully finish before moving in-game + +That's it! Have fun! + +## ArchipelagoTextClient + +Its recommended to have Archipelago's Text Client open on the side to keep track of what item you receive and send as The Witness has no in-game messages. \ No newline at end of file diff --git a/WebHostLib/static/assets/tutorial/tutorials.json b/WebHostLib/static/assets/tutorial/tutorials.json index 39ad81d4f8..2c88c125e3 100644 --- a/WebHostLib/static/assets/tutorial/tutorials.json +++ b/WebHostLib/static/assets/tutorial/tutorials.json @@ -574,5 +574,24 @@ ] } ] + }, + { + "gameTitle": "The Witness", + "tutorials": [ + { + "name": "Multiworld Setup Guide", + "description": "A guide to playing The Witness with Archipelago.", + "files": [ + { + "language": "English", + "filename": "The Witness/setup_en.md", + "link": "The Witness/setup/en", + "authors": [ + "NewSoupVi", "Jarno" + ] + } + ] + } + ] } ] diff --git a/docs/network diagram.jpg b/docs/network diagram.jpg index ad187d091bbc49daa17477ef37c3ea38ec64271a..96f7d084ebc635e531fda057d2d4c7b8805e719d 100644 GIT binary patch literal 383052 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

    nULTQllfwt9(g+NAt%>E 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�BdG~iOoC9?W2z6&RbFd+XnD@wu0O4G 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

    )Ss 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�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 z zV0J$t31_zCBiBaR^hJM)6RCK%X{b*2WR<;kaeu>) z08)v}JR(hYNCZEy(q!#nIA1Hufj@B8SXJ_xSlZlXfh9b+MF>QL9MDWPW>T zohlwus%WdKC=i;Fyd!v=L<_5fdi&OFbS~Yo_QLIn>>pE(Yxlh2@xa+cfF~EEvwNRe z);5t%Yfhcrc|Hg1@yB8J)QH7dSvrM?<<6?wgGBp#9}SvZ)?s#*lk*O>=$9k%Pu_yi z3+yMnDI2|+ZlKly5Rv7hGD4`dL=K2aaPB&R0(e%{3 z5@6blue3b0a5kscXzrN0LFGkCo0#9yaA^I@s_K)0)!Z-jQzO&JzSu5Hh@;<@v{y}i zBXARccF#Vv7nw7waNI))_5HbX*GyE@I10`8w1)M^0x2Y6AfVF)8M?w#?XX$_kE{Hp zVQQv`Adym*_2y<9aj-{26EAi$Sm2CFk;jf}porX}uG5+ts*+55@NgGws1oNP)dJ~T zvAVRPS)>d5*LgENl66L_ zE#D>+w>z$3aB+07#+5bZ&#hThrjl8Sf{Me|-|6 zx;zx+)}$zvq8xg#L?w4l#!SsYM6=Uoq`gpQFr{9-)ZYC?&eGg`<*1zD_j0av(v2g& zJ=5Xf_NSCWxQtpCvlFp=Mn4uTQVGQ`*6*u=T?V6hKBPcjk?z~su&NQ?0b0^w8ipbY zXWnSm%#+H4lk@URyp}5QOD!MN3lVE_;|#vNz;o)|gDGuhBp0Bqf9m``bT)PhJ5Se( z0gH&J36`8Ge6Mn0(B4YHlR2wUdEEA*LuaR(frck_mNhj5jq*0ea`EQViEMhU0)^|S z&^_Oud|U*7X@lIPN=<19jXrzlhw}pV@L`vWu^=Kv9~~ELj~;)$U_4`iwy_Pmf5X<= zP=!)?#2WhadcEy*d|>(IEDw&t2vc-;tU}bx+TT)VG?M!3=#|cLT0Hh{DevjiB=>W}Rb@miHIkjJz|f@@z}yv6 zkIMUy_F!m!J42Uc;vBF*Q@CIs5ul~hsb zBki^Auz~Llk#2OaVi?uQJ61n?Qh~Cw8t13=E@~Y$5Q}UCshTuKk@ZBOvAV`|j$rM2 zwS8gMn`xJL*Wvn?bBE4P>1pI3K%>q19MW(`31K5T_dUL6Q>QPEizhnhL`P-3giYz7 z{{jW5Xjck}D)J~OT$*_Tt->H57^oO`SM!ZK7bf>Un+Us3p0DUPH0y}TfMQLL!Yc)& zD;+i95A5)z@Ziy@z)IbrfM<^%CG&514R}?dOWJQ;->?;Bo)IV+^&Xq7DKVOITs7m) z4}@%Xy{4UPH%M&cEM@HrN{12+{W1?$veVoBo{~5)k*Vn@baaIVgx5`Cp(@Oot?vq| zdg`Vuc78oPBrJ;p6qbnzRMdIKO2@cCJ&BZx&~6kCg+=wIcAZ28tDc0 zc+ogYu+odU_?r3k2a2UW{w*!-RaK)*a9G7#_X1X(ZJb&{@79Wnqbs!?YVF(I8MUIu zQ`!LJ;VIGB)!3r7E_NPrQY=ibywdL>YTlOa#4vCPzf35bXJQsiW+xEkx^9j@9!hp~ zkAh&o(O3lOIQy5^2!6Q$RRL@@ZZXb-FM=d)P+%Z`qnG$HCjBRtes?Ft*1{WtU@xW? z+c>%$IR!9DH`-G_QFFcEoL7_W2MYC!y8|G&NvuV5cbNXtK!nQeKg6S&k^ievs1&^7 zR8E(Y{E4?+N6ZR|@o#3|h5G4Hew?jz;NIaOHkcwAI^f`(rC$5<+1cz#*SeWf%S7rO z=^?oDqYe&cdu)5x&(E-gpucVn?j~lJLmU$Bd~6w<>G^1%V6$>aIQj*;^hibpnjUr{ zy
    wYUo=QFF?cr-lDzmt&0rvF5!UW4y;N;-lNG2P;Q7^ry;)xxsfMgtJOn6#LbS0n#iF+o)o!7OoF{`rE z@ogkJ_clAA3EDiDmO*d5zKz@+o|v|hvS1DnT4Qn!a$aLOP>6)d=HCv)tnXdO3Cknp zZhP1+c@DR3!N;Z`U?tvzVigXxuiNXLwF}?ykD4idmjdwgyhq_8!!4WE*W>va24hEF>5%hH)xp(Q_4&g4>UI^X~B2bz-2 zg#Uh069T|fKGxtEB_8gY+qMF4bEUiZtfx-F2=bxdjZIE}e9;>y;rp#6EGKp-~Hi8A~In z;tmzaEr#Kbs+5Yd;uO3ZZ4LEjy_mmP*87iEM`w%szS^n1h|IiRkuUg1`wifS+Lbdn zvUxPcuiJd3&VVD~_g`LYHK4m5f3n`*aibKfD=+nLXmZi^KJq@B( z=Twi0jUzd-;9s%xuRp0Flebp~+x%R8@jS_n$447YUIm4k!(TP! zXzlN|4DssSoVm9ac8jI;#K-*0os4fhn(TfhRFtFLRv0L($~t8+YqcTzrAuUfx*wjv z5&QeU{$hjMmtx-N-X>EtD`gCO4L}%}n+C36KN=d<*GMow^J8nTVMRINu)m`)#ZT|u zd(M_x%-RDrw-0a)3_y6hOLZ;r!4XB;KWN_nJ;?{zDL%+KAsqMUf-8rsZtsvcJMYt#sj6VE^Bm{D}q$_F|wn3`i!O zK@#w6ES>1hFvh8xzI_>p?0X=z)vuzdl$3L)KatvC=|G>+>gh?%67?tsgtnP|3?8=` zTyOevT2sE=u5U)0Q^Ze~_Y$+Ww`wSqISearUvs&@69qS~SpSStWgiv(;{t_Is&G^F zMr@oB!fHS5Gt~6qkK~sV(^sKmj-?*p^yCOGb&c&o2D-f z4E&=6eq1f#GlutX6aT)8e>>`5!~gGC{QuQ(^Jl`KThbq)u2dw5CZj#cg+tsqff`Ji zB5bDvR-MsG8q-lN?w0jjbfPWMG~MK10zo=;|NGkLN3M~$mmaep_VW8{?L>8NSerYW zsShv2uf5h&4Y}E8Xuh~o4g!&^Zs$Pl&WU+my510PAVden>M$YJ?{scRZK^Wx3OTF8 zn`{%z{;Otf#r|fzmb#soC48T_Qop?R@-F{>%A)iiCiYV@V`su&*4sC@xYs>x9F2Nw zL%JQg&EnAc{hqQ1KdY1?4|i$4w3|4(1LJL9kKoH=S32X55b2840eQRU%PJbjw>6Cu z-rb`K;h(*0woE1GiIzeG)YWdML~iOg7~={N8`9Ept>~j^<|RQXGNzu`>b&V{4&y2Z z_*r{Q$W=ftxewNK-`qAFlR9g~%dB2yY_4-Tn_Y{(FD;W|ocw_yfNC!!jhxLcnE`2@#HO4z+_bF!OmI z6K~9q2o)?IJ?+q=sb(7R>UP7|{^l?YasKr^ahXocUbQ_<@c-=X8WayC1PBQvlf{$-}L3Qt1BAT4&ABdc0oj$R@WIU zje4FaH)oZ%TdFNhr;^?K|ixXGH#qaA)ihx@DHvaU7g7i$y)RC zB~}zUJ5=ZzcYE=}5>y|UN-f1)qHaOJQzgPygBx%fQCs}!Zg~?)ihn%%-W><4GPzrH z*DUx%NgwH3?~tB0B!7Vipj6cbY&7QV%cX*p)`alnpnf}0qKFf;e*8jCy~EWp?gHeV zg(9e#E_#@Fw+W_YYb6d=X^(?UTe1*p_I)1Fdbk{ug-TQ3ld^wSD9A9|k%?fGYuef} zc2}2D`-e3S+Z}~VoeHo!k=lMnXRN`~)1wk6EDEt;N*Bp1vKd1>0lFJ^3gw(OI?eh0 z?>M`wu+$VUk66QFDbBA?Eq`aySSGXfrKin@q9kINqSDSiHx}b`zSNq;!2j#UVwGL5R;nM8K zZY{iavZ~&gjK{lRyQyNatJGzrW*k`MTr-))4A9lJ^H8@YNd0y|^rWomm+t-3+Nbx% zW7S}Mh%2G|e6rfQCGVGE-M%)u`)Bd#~A4VJ76mg(%I-oa?w zU0WG%y$r*X5ZMl6@qFNvn;}3tzeRmrKQ2|XKP=jnj{jf=;qSyLaPuNFrum@}U)<=6 zx0T>?gYdz(R?aP@2c%T%rCo;dIn$LH>D{!tMb&I9pHjtd2cp^NPG<;sDK8DZuw&4x z965CPzUj{SulxPC|8VWJuX=C5qry3%G(u%Kz~PTOZS&n|+L4$MFeYYv;iGv(aOg3s?SpepBkso(t$tEbDd{Fn!6|z_}(z8a+JK zcIkg>Gn1uony z_#`O$cHr0lnMU$imA*3$MumskWhutJr41V=2KP;X`&zulT!u%oT}`N4VbeO}`Aj?h zyhFl`E7Qi}%9jg)P8yLdYIDbxjF4@QUoEZ51eEW!(x+yokbzi-aZs})rjM)RL`*6l zf1ES65-<#8n;zGL^N5L+&ArUOmR)81!xqU~p`g1;W_v2v!?85{dv zT}Ky%2~t#+1eYL8Yl={QH|PE3tB?o%M`$NvgPzozSIJoL>7a zXVG~51*GUM1R*!ufXK?Gx1uxocH$;$a4qn=6PRHNeC;*Gjzx48`*{$bbk+3c0a|8W%{>4*J zU?Y4<(4e!D1XzT$9;Z9 zt{)aFZ*FR&z$s@bqA4OsO)mS$Da&aDFiiaNhDljbR`GU=bGEM(Vtu72U+-sduc;D; z>ekFT_9uLZi^4iJkI@?#+^pq4cE8Fs|NyyrpmehV9NxBtfe~!!?dq0}DSYaznlXy1O zOs9FO%Bkoz_%k!lF<>)DYRO*FUE(q_auH{p7o?(9HA#u?_WDwOXO&4_)AXVtj5ITs z<)lAtYGq@MgP8HC4Rd(KwqjPQAU)=8AA*8Pw|5q&7mPiGD9~7TNpnV{+W9GmG?rhw zKAyO$?ep5aEvn-1NyD&?lx zg*!QK#FNEwij_wuv$2tBSpC_lV8}eFk72XJ?d<5cnL8p)Jp7dJl>CrUgG=9RaR(G0M+6wjgG}ZnZAYUSIv*H$f#iSKJ%#O7h$@Ut^y1Cii zBXg%YvtwzTZk?a^9C5Y%Qiv}BALi=cVB7TmUi{$CMy#FN=(M<>t#uVaDBa-uLQPp5 zK_D2!5@J$X)5KraU}SuyU}seMGCgi~!68AE`*u1rj1>oAAvfgB<$pc$@Wjl?Mz#d( zNwi7oiC~Ww{}M2&P9)gYs%@c7F?XRXWTl7(Bjf075~XYLQIB`)PkFj2jW$V_;|n!E zIK-|D+Kl#B@=rP7?q@_s;)$GhW@jD|4j$55us5MKnFgMY&rT@%cBx3LOr|72Q7=oH zV$ZMyODcM&@0Usb`Y*BeUw+~GlFwgH;U-njyVkg@RQCZMCftgAac@ zORJPgR28-wRh1eh7O$@}Pd1J`!e&qSgBScRqzC`x+O*(|fNWGIcvd)X*)W!Hxo{WRyIt8I2dALUr#H zayhN5SP4*lro7A3RVOJ_?-qfqMn*_%@QVl>CmY=AGHuG5erFKR{-wy@Iz$)VDY72% z$3dL;iyUTv5QWLxcqj7J4NSB}?(Ir@g5GG8k7y(51^dpT?EN2uu_&zsHx*q7qS_*b z%fgw-i#NS%A^ft$-}}99WdVW`gC12dIFwz}Xe?IX$w_Rsa7ol#=BKnWh9CjP1%eER z6`r`u(LI{a{Eawht9+YAV>3_DN-@6}q<0_FEWlx}0r9qsD3wYiIHQ`7+etNEQs!PR z7UndA_)iFKcnZIox;VyG1lyWl{&D0DGbywjG7lr?TfRDZgEyWM5T4Uzp3==k(-aVz zR6g(a05?6+1$t(x{>Xs5I-A3qoxXS(uuX&`TTey58$c@IU zi@Z3ljFpM%USh!6M)}<`UR!paWF4K_13K-ULkGV3-P!)a5cOA4)4A?2P3_uY2np$Y zAXM~+|I)kv2PZt~Pc6he>ER=T;~$8hFjn*Kq;IV1H6XLXa3jv2q>cGb3)Q~&w!3k6 zE@Lq@;$jlgXj{X8%)n$y_U zYVJiDn%v$vp_ymNM#c{E~CU9i|^ zQw1AV>z>Y@E{PkU*?3Vk$Bu3N9PWsa%bl!MpGIh1*NLF$%Y8+tDHV~&6lq7l#V2Q= zSebY>3l>li>yQu#f93ii`T$$921+_nr zCRO6POsJMa{9wYNjZ@~E97#KEK~z;TD#-rHMWum-#^!|N#S_QT%SZu(8ZC*+C;)DtX*Utl7n z9$bjYH*X_UJBg)&>v!1IkU-!2JmbHxn1PlKUHR0dgPpnEPAGI`W-yal~$ewp!gj`?S(B{oH3#@0pVz|=haKBk0x3TUo-oNxFe zVwK7rHmKc~e*AkvU2@7!mecm&8~I>>uWh>@uanEKq%B0D@BRtqNPrCdj7Ey5i4(X^ zEY?@7NI*0_7C}MPtPdza0%0z?BVPT~+|W2%fL>+;yr53ca4?E;>-DoR*Tsxh5_J8X z_}KT*f=69m0YnA#^qSmghkI23-E6y7VB_&8{l$Rnl`z$Xqq|stwWiCL+Ah8RFruBi zk)Z^#y;uGMGv<}}V|+c91az!C{0kP1rKjp`YPB}7bghf%^9$?uY6q7wn_v|q!H=7E z2dQ%}i(BH7mQ7LB7R%l8mSkgEf}bTbz>;ZfM;(r9*d8wso;Rshi)gj#7@|K7FF4^J z@TPH~c#eb9Ark2ndSLIQNPaF}y}XhAUV&R+TxyS3^RZe6w~Ien6Oz$d5*uL|pt7IX zHPWQgW|2E%0Dr;`R0?!^FOuaeFI{9?8*Kj}6BlyzQ+X?D&FZME3}JZYmye{0ql@Jh z192W1+^a>A!sSDzu+K`g|BHVuW8(JZ$*&$ca(M3A;yHA3OTf{q?+!1hD*Izz&cG@>SP`r9dENkqmbI-3sfuPezLtu);H&<_pUKCUU_RU?|B` z>!?Vb;?)_oun%dol+ttRq6RGUPHL_ikU{l&D_LP**BZM)=OS!J6};XvWT zd2D-ovccN9#q5#W7d&!YqMUrEP%3oIy43!{g(dvB5TCxl1aZ1{)+JEVIk{q)OaxMC~`N|KZGxVItO;;jyeKc9*fD*+3P_W8o{ zFuE*6wpnW=9`WPXXR+1|ut2&BYC7rtKF{vBB_vSStNZ5D$$N2*$EhXR_UZdkkvrVF2gzp64Y#-`%uw-QFp6pZK-lF3#5$*J9+THIfBBpfnvYH9xPraAhGF@XE}>J31V74V~Gu$OCa) zwDJx^oH}}^O+8RDw$U9Rr&JDd$-eSx{)YkVZ7gws3h2*T9N4cvNQv9L+MfwR#SYkH zA6F!y34s*x#N&z}+cPAVrvm^ubX-i->+ z2WyWB=Ovtg;_L3p4(PJ3uCGPDHQrAL>JsOKxwf&sF5BLq?nLU*#b3B4bF=(;S^3LS zZkn@x<`vA|G6$y`tAq3!aLpY2q{&nYe`8xd2Q+JiHQ$`p>n~_8Y4h}RUmC!f$;s0e z#uKXW8{ana#+}!^=9+`DO%c?r%nq-zxRuCzvj}Yq4>nuLU8#I(L{9i1*qn!f%xk_f zQJL_UaJm9hlF}UUiFJWR3oAAW+<)maE;hR(3bA=P1emf$ZisB0oz=t)V^dCeJB8kW zH3stzV$F(QjX@W~zhgJX#*1YJR(Dj$ErF@3dY*kcmX1sf_WdsRwA{>QCHZf=>ThT` z```Q?#@I+8z%T|V7eqZKMJUFX*Nwshz!NXJr!WIj-MHK&6KaN^c~Aw#3S)V_7+jnW zq?MQ#*{2JE=;%PqqoX$s;j)&^wsi5)5dWn?62LH)BDRD%r#B}Ve>URflh`>Z#+u4S z&t2&MrO@ulaJ1#!Nx|?oXa3aiBi*GERu_|}WrtUF6%D(+`>bRrBBapHSz=V%2XmRd zbE`?KMeXDC$F0+@8SM$1Z3jlqG7`izvM+=_@fBh`QF)-gq1jA^k$>JgDpah*df8NQ znT(BB=b^}|@j;wD9h8zsPQ{A&(&Ph6G_7$wVTaZ1*ipU9p20411wF0JPNZQE2ds3B znwV3GP(*sW?~f^FiwG)8)ssXqa)e`iEunou?B4fH?%%KW4wGYZ4hbleLnZn>XwEpZ z0v+E?H$4n9inh8T)BkK!!>+f&?^A`u8Q^6+^V!_pZT(sGku&M&MbD}ddZ5UV?+%@L zGqP`*d8pQGPjn>+ot&?*C7hZm_A&SchU$J!<+XR+1&pn@r-`S2-j-Uv2o+XfMQ{w> zj3~Kr5_CDYGCrQf3fTialc^R#YnWRZh(jKcj`=o~R(9t#FjXyw+U#=J@J^>YeJ{Yb zblOpcvRjjxfVhz5Yz=XE7Sbf0S6zVv)zq%0c@5P1eu@pujOpXiK;(}gtn=44mBKcL zR0-6M3WKFeRG2ZXf;H|p?tB~rj6L5zmX9~-X=&3km*`~q{M0;{{Loq4(mKGjp8rIcJ{szSr|!-}_x3e`J%LyR5bLz3=*4 z>-XhD1??-5in4oR=QWludtM2@1ib~d=Tp}Qz%w1y3XMnSf`o-PcdkTouNNEJpGw$@ zo75{*>?!|p7@MyoD-hWFftWhXSUNYa&Yj$CbnkLHL3VA$gIousb9BXL+Y1NJ>v#S4WVe$nX{Uw3f zILf&Lg>=nG%*7dM#|38TKf5=g;FM^lN#<-4j*;|z!QZB*8C4snz!-^>Sr&+@F3xZd zxLB&XlcCs)jbYDPKGUGNFG_LYAMrJ^&cLy&=Bud1UL8nU>!g%T2EB0UHF%QR;)o%u zxm8rh+(r%%Wp~OEa1K*KY!(Lu2xF&GYkSU?7Wju@J5Yq`+$2ZF16}J~3(iwz2AzT* z2}z}{ko3TJ-GYkfN?apmP&LmKvV7|a1}Dl(ukEB?}wQA z2$Z6mc=5i*@+{lhzH%wyU2|^C*dk}h*E+umfKpBNLW-PX3ih(1TB zjxjw2PZ7rIwgQsEiA@eez4O0Iwrzmz6tlFm-dvUEaEx}>KS zFYrX80CFY`xbmuHir}n#HkKrvNl^3~f?b-yf_U@9;;`AqheE*1{2(hu&i=sViD6XJ zlc7s-Rdlyp`+jw{%XfUftAr>d@w!)GZIGA{Jf7kZXYDFECcIhD-+6Dvnut($`bCRx_;-Thd#-*K? zN+?#$es~st??JG%!Bp}Bbt@w8O(?_&71Vb7bUOL=@rynlgQ4x8Y79O_@-$>iZGzvs z_wm~RlZWIOVa&`|tAr)4A?xZ3j&oMxCz6gb?3LRh56@7<8YWw{rFRsA?i|z+$zzD`lQLAwMjz)k1UzKT1fMjO`yKq89hg(N z$WUI!5OhtZyMO28hXY0Jyzi1JEspALX3*`tv_SFfu}rPa3ML$;*1c1j9#=em*{4jE z{le^yZ04WI-ux+~O3=93>$*3Ic4Xhvr$^zB_cocdPIN6l^F;TLewXZf0smcH0(A`# zWzD+Q&aqPx^sb4xxLgGDyTip556+h`864Vs+O-Vl1E&mngJo$a+asX98ql z`3&cL;s;==PFlkc9xK#udH2z za7)=ZPxf8mYhJ=arE#g=PI~y3_)F`4NIW6+Wk8(qCz+hb_0V zPuUYraZ|OJp-NXySvP}+FxV!xKwXn&e_}o(ev$NJZGQ?aZqBn;LV1ceL(jnN&R3c> zS=QsFy5MZ+(7tTkdiSVN#^HNs8lLmtHneFj&@&v{B^|UYzhE2xZbK_Ig>|Oy=p@Uu zOz_Ty-v5+d=dUN&zu%>O5u8V=V=sS}KS^1#f-3Tbdo8~5H7nHJ%JG9+Cb3%FSdK4u zXh;F&%|&IK+uRTeqboDX8hezkUCUZy+J7Q`FZu;Lw*}{Voz530^*(EdL3Nkz+7kc~ zVuKet?5zczeh`269|`ck{hMU<+8LK6(I%W`y?-*hk=Vm!!1%fBiedANq1qyqiE@66 z!rG>yQ)yUb^lgQi05OxqXiWsI|stRNzpQzHmr_5?C31r2luwyXJR|6}2X#&)fAEkS#X9Y!# z(vmn!W%ybK-BJAbFSfW)&=i6(iuIYZzNs?ck8YiHFz(kLfEeX5GEFH0&2hK6We350 z2zD9a#-*I%hl{P#a04%3mqn(E%A|*+@bGa|k!QbG(PxvU$B}aUZ#N78J;wcE;Z=4Y z21Yva`omh|Y@+kJN2&n##>C%u`|*jY>uQb@viGfrL_G;I7xCtuD^>FHB9oEyhw?1} zq{UrbPX|*?wTJH9X?ZXD_DA=VA<)exXfe<Hn$J4BJ#!SR?#UWfnaOs%|#Y=j|H}JulsX|J} z{zO{5!eHzJzvFJr=_Os8$ITkuZWU=9eOniN`$oXpuy7IRTt|c~2aJcv34kgN5X(%l zr1ik(jTepfBcox`Ac$j{+Dd%LQyMq)H#NS4Wj*=MQN`EYGD>%CH|BreIpv2p8?O|K zrzPmOITT6u;#K-{#wqs0C6I#90^QKvOx)yJrt?11yVYA|V#PbI5#~t^q6Kr7)0$4M zc@&c;g0=$$3Yntog9c=Vo_-Vhf9krP`qN4SzqIOz6$;bRybYqp%_#ai;95&{jedvq z$5rjPDI}zQNv^fnT83#>HPf$PEslLpyhk};-~nWjRJpk+K1TWFVjcZ{OwNARv(!rVdbE@q03BIKk1#C~yT=3}PY`6V|B}KoxGU)m9eLW=p07@%X$k&@W zD0`x`&;W&;w#D@8FJ${i6Y2#_-Z8dZk`+HQHD0A5$b zw2i;!LFO>!;1LZysK(}O@`CUl>Tk{K@d~G{)dWS&yu8k+sR5uF{6dZx-b4_x3LEiV zX07hrb-%B$t+-St{EPSW;{+b-V4Z>>{k}Ag2H~Pof2HJ-ChLkgf|pHuzD3C^X2zb6 zHK#c>%IESb(jAk8^m*R>TUo#V_QRitahjZaOCWTHZRXgvET6mX94s!Tl^Xc!Q-3zJ zq|?*GfaliRW}^3*@QRX+*n90?X=W9YblI$L*PVhd8I-jF2~G5$pLofpO11g~9lv(7 zpAmf>_m!p<;dua-zM}AJ)A*=&`?a~RG@D$VIT1zN)V;iGd1G^&9rsr+u>O(yTmIl2 zm$z<`_ewZneTzQTS0Imc~lAMgNc}sO2q(1Dt@z^#xvpjC;Z?0|D1C8C~5rGRBA@Q z9=LBjOON#WLc3{T$8+VKId`Y8G{)s@Ld?ojQCIf8(i14;23u`|XoUaY`sbW%tB#lT z>$mq0FZkavzh#il(GbXKPm)2q_s--M-B_6PNc7OL&$8@2V5V61P7nU~#QI-K{bNES z<;ufbIT1J(a8AbC4BqaDPWWUGtVO$QU(H&lWM2+Jp)#?d?pHjO#0fMx4uKCFf$A3`dx3uI)I#X>jON@H&?(`N0Oy%GT2j zZTE7B{z7GxW3>SbwuOb{=H|jbAhf>H;4vMB0GoE-xL^iXu&!Zub=l3N9a#=?itD`z z)#0_W8leEr^VoIVjvT*_f( z(ZsRfV5Ll*)Fv#0D)@?%_V@zO7sdFuEuuB%A%4(hvY1&I0C(>jN%?-Thd>ON8sSby z0!0Mr1I%XMlnu~KiRY3{Sj$2tg3=xvUtX!;R%^3X-PdW;b(Szu1zHA;*z&7r~mBMR3kt~E7*tTK2To0xl22Yc7sUnKZttWgUPh`uzKWV+)=*zkM@=SShq z6R*!%t5H~zx zp}xD5=kma$kXf%(q``Q@rL=Db_@-NZVZ_Y&m`-c_Fj+2tw9Y3AE!;DcpC92MU~Fw- z*0aXIAKFHt2BYvha=x>{8daXkIS-H(C#gG<8kPzcGs5InN~5#dw&csVeqdxbfszE5>+14--WBhgj zQjf?gC!e0(3G4H&5o$@1#@v)wIxG{o+m)L&(x0mxQBt(Yd#_h`m3utGjL}8ni?DD7 zCk|wYbWv~n`%{znmq&9^q0~Mm;?LX5 zsbH+(^C^?R>2K9Qj=ToSmZVKwakx82l+vW_`L*-x`rZ7{ZX}zONVex1l8iLowfIV7 zxa_N=*X9@h(Dhp@__KXIPu!{d4U8=G&lYdUr}Lfs4UrlBFQyqhU*od$_Y#TUS}{F& zL+NUF`r3!(GZtmP0hs@2%=FcP`q_GDrOee7d==`rt_Ozlv?Lpze*SJjmo#keSsIH1 z8NrlN(+ssG8GWs3JlUT9<@@$uxp`i_o?#!>$j!SPcT_G|O9Dpt?&MhY%sUn!j&%qE z1$#lLtm5!WlDAufA~<&@D!WWIX)sg4rO(8xoH`z4xpAE07wVCJo8VZV)Uhv!&WYpF zxRtM4yDW3$rp;T}{98}|MeKiF!2gO8-_lSQLEgAe{7lWn_c5537CyaBKZvZMAr*|N z`*fG)rh}=O;)*jtR##QOIJew^j|5odyHG_4fxsqZ6D35Ico^I`=AA2Nh|GpNzY<%{HC?K=h&hD zAUaVeEY>C{OVnZFd2hOhTIw7*BuaPb7sm&f$1|bv7S|v0ylGSyH84UsOf-*2rI+2U z54qGP|6QFQmdc!I1JrS*iSh&Q;90Tu$w+HQg!2NBx}sxbh8XUu z^I0Lg{ZJ7IYIqd!*3flKUPukvPq0WWyp!jrCGA?06HHf{>nqKQmTS-uP)S>H*!PAZ zekHB#*SD=8F=xi!1c8>BYy|!g4HaK4RxrW|1N2yK4IK-oD-zq=!mIf7azjEwLi?3drN z{s0>)r_Ijk+l1qdHcDU$6{4PFY-2wOzA~M4cVN}z337)Gw57lv{PX1MNZc>9~`cgedI^`$FLrR zJ@{9eFC)qstodBS)E-w>cd==iK_@3`GVo_v=|FZr4u{7Jl6QMY>gQ*keNfz$_+q>g zrOj-6Co*hE1IuBQ4nKet7`j&3@e1>5J*vIfopY^^xd_-=^tR;m$N5AYrwp`eHczTo zZ4m5UIH4+=+BT~K7EQ`9X)iALu0jtwBj)j!GLx!v)R9JnOTnbAN|2m7*S^kZ5uRnh z1TpOV>}YrOlxE!8c$gzT9~hxn#R!js}LpaHOl9dnDhZ!>6~U?G0DN zY0h2#y;1!Sua|#7Z`k|crgiCMG!@6W5>K?z2#-~ZIN|z8-A$aPiNOg6@)6P75k*UYTEjxHp>c98Hs zx;DFfn6AdD1=$!l&Z&ZhObl9V?A{{|?c5{8RR_G;^f=MuKQFvbJ~bF0My}ed@mSwZ z2{KeL@oO1j5V9P&e8;LVvT#nZ^Z(EIf802)31|D0IPwu@9%KB-&~RZW0!V=+_D_ft zAY_$&U3Of+60XV2U<5Cw?t6(g9B;m8J?n759m-naB{IAkS7-`B@a35Q@!6P z%MlHhb-P+r86~An>r}>+B4R#K>dGrpQJ2wP_t7dbnz_+2kPp&_Hxjdy^HZ?(miE3y zsVJ@$g#4U|4*HaONES>jSHIH8+l?BvMD?f5DYn;e z2YgHSM~9NpP+2V$DS7JNOs0kD{Hw8UD`4xr zXLuI0j=&z?x}5OirL;#IGdn^Dx~^;Bv~T^|`#&iDGd}*z7`0wT-|Irb7_nN)kIp^Cu>j-;}C|1Lzpai=d zrd14~lGq8qs@eD4YXR;`Hg@}OxRZpJH*OsF)hfBA4KR5SKm4%$CwJ4mIf6DPpc#@P zN>s>L(jzR_!jfvo3WdcUuiD19=x0gEioR2ur^60#ojbhsA}0)0(S^*ga70BXgoaloBFR!R||EPHF#YoD=DFbTj=NiT@rt3skTw@@UX`AgxehF-`gi=ez0mNn^ za9YXg6F3j#@vYPIHHzbiDuUmt#p%@z+k!feamb<6Qm0M0idJ@N`K$>Rv%`<7kk5WL z*%MQvxxP}BuKh<mNGxwVvfy7Z60i$5g%%uS-}hZjx59bbvcY;B0>8-I>mFk4|Y;) z8gwqVXOut7*)$$`BAYTgf)-CH8jAK3Vak|vHrn#qCHp!}82q!o&36#memU-en&+ZA z=Y`?o3r;vrM_Fst%8v0cit1MyeX5sD*n(u;%iZ+Dqi^=q4Gl<47MQ+J1P?2hj~8_; zU*!wQYVC*xMLD{pg5A_+kw~g{ON5J=0rfPP>jq zI{VO-FdAtq-i138U5IDTD?tnGgFtYj7*1^I0G3Yp^H3qJ$8vpR~=4gFY5e7)t>u$Wk`YpDlwwILmrd30Faf%ooUx@wD%r4)fFF3lE`F1T1g>Z;xQ z_N1eJ917O_>t+$MF6M1r0YB$fRUPzV*1z6GWuEwiJ%u(PT+(Wb?Pn{b#V8?HQ6NT7 z`CRoejuc35$Lo)H@prxEKJd^FPfr#p16#~l0*)2yB0mrBbu=#xugS6)tMmFhq5E-Q zY=!x}vNaq9RBZQJhPANf-D=2p*}dZF?i}ei zfY(E6@c6v5sIrsb>xeIH0oZYQuYE0NXizdj^le?uLomT5SaaXh*XS!v+S~HAqxmyX z;oJ9z^dB#4gAz5I%1p|z(2|1axOc%OW*pgT;)`AGt~o{(VDS@>gYUiC7)m1BYhi0AcZ<*5{t_xG;T8|D4Cp2iww`I z#rh7+bRKEN?D8jDRV**WA7=-?xO9*?}yW)odZ{&mSo8(!<>{j}@f$6-nv#h>B_*S)NsJ)z-&=&<1HSTD?--l$+2833l zcePDSmD5H(w&(r_eDj1o#~u;r^F4x(?U?gSKW!`AjcH*7t{A?emOE^&kOceii7URR zNF~~NucCC0)ViC!*qIm-7JiiDeJQCAsIC0Q79tqP%QnV`u_FBe;Dh`VfX~5Xf)|wi zgvHed_#jWUO0QRA9_UHZV`OCVaK&J#+EX#NjLe4V(ttJ150 zsAPNcQ)~19+qCIjtGVPWC*2hX7y1bgLmCT5SlFb;ew6L6Ci3+qkQc2Cq1mL9$Qq*+ zuU15`&0>L-#;|6r_+&5!4(Yq++-c%a(G{1e;_tMS=_?(BtxR`YN%|rCL3xetZvZ|c zW7A9Rw=Wwc{)~cz?5+?Q3k=;L%$U%kwSLU~>wY)vY-4*5UrUCx^f!@dqi=x3m48`I z32A{QdZ1e-MtUlhUYYUv_M|RB+K~D~&pxx>G#Q^zFO2;iz(%{Frpj%S~;qr zugM-W=sZG%h9169TJaO`Fbjp`BlUk~-c-Xxs`3hw?5nEgTJCJbiQ$SWT2sQBd$S_S z0L;)y_tIYDOsItB1=WerLe(w2&v=0q!Be|UmTCAT?Q`iyu|4gq%s=pZDnkbu1p89i zd8hc4D&~+08zZXEVNu`fsYnDpZ#Pyd?%_Z1dw3npY_K{!+J2%)(bi2~Mpe8+1+1J0 zX?y2aoZ32W!2z9FSHpKKiRoJG41r`k9%VuVigw)FCPKSZLK%&tzyO}gy;A-s=7FDV zC=EIsDd#Fu@kN*VMF#?xn6gMzgg|aM2lsr1Czy|`s8Dz{4Z#C{b)qg-$x^f_7?1bj z^ZQ_e^sOhd>{rjJwo`-3NB`sbH1V;-|%}sOGeGwRk%TN zsolI}pCqi(F~% z0KT)$vm?$T05&B+-%uzHLrCKoMoXH9QQ7IK4?$01sZv7G1zv4LAmo?Y7Vt=$iSFC9 zN$vi?^{}_J>KE5f@XYyVVJQ4~SQND22q<@E(Mrh3ufNm3&1I^*`vl8*<2WK~PGGyW zQ+LH;%E?JCHc^aA8{MLBL?H6lXhc9j$I=`@uV4pMSI?TlGa|dV^}ec1=tH|slB!!fsdSLa=`vbYU)MTnp>L_>2i-S1;LvQ-Tnf+a^6^VDeJ53in7l|0 z6JhV89w51DHf1^MBymF`TRa0eM{z!;q&l-UzA|DVu7ZI1 z>zb{|(y12n199QE?>DU5-Lc*Y4v5Wcgr{88c{`&naI``tfkHx548dw)H374*GK+M= z)9Hyf)60*6iUO&53HfNvURl;vQDJUU~RAO3;BAr^DgV76ORVYS_ZW#d}Yvm zGmpR)qRv6`F#8x|Eog+<3xX_E(XJdYz$q*>eUh+ZiP;6rZp29riQ9V64Qg5pYV=jG z=Tl+tElftX*^A+W1r}8Q+>ai0^x+ch33XdeM+H_6QrW4M{xjOjCM(TwaApl#CPa=f=f)U$c+^+^$EqVQgwgA#Lt5MI0orFue) zU)x~{pWSj)@0k&VuAWHVz3rSxfXk081P^d&Eaehub&-*3LMw(#*+(;R>8j~Y9C2yW zeac6juc)hAm#Mro@&pGN=a+M>!44qHJTNI-Is5hl1CoLOMj}6ptg3%*n=o?X-8#K2 z3}BX%VL07-7}S-tkFaqHdSM?#dy?g=jA8lm!@7&w@4JjNG~XSs{0}&Q=0A}$ZE8s6 zMu=%k%NsWJ#I|2s%kKqXiR^)K3Nd+y=C6{8<^3rGh+3{i=ux?=kMp=S+axIGUTi>e z8dE+_b?2D=zUVl6kN*1Bt5KIT_9xo~+yd4;QP&rN91V8( zce#w~8@4I&pYR>!%+k=^&)v9ZQAl6XZz5~>yg%Cfc{IyvZ6lT`%NM|Ndpv4!24qp@ zT7}b-T~>5^qDl9ffNWl{bE55xU(R3ek92?_h*F!XMA1@yIAb>{-vkIeJ-a-dFfiPa z4Zi@;0+DYWxeD_V(eKJ0xG870sGwB~Kstr>y30~Hu@$Qpd(md`ap{LepFde-LJa`V zBm0j(yR?yuw#x9)HV8hT1yWTm&ISY-OlIOq;4lJuPi9O%S06lS8PwFu;)>sZPSPbL zFG%J;S8c?lKswz5cMF!u`}a3GpVVnQRFFhdT|E*%s|z=dJG}*~wX%2=L>V8*2O^nC z^e4RjV!St#IohW2@_rY@vv77lL!0=l+nUwq?XKf(Ux)1p6*NdrpH{OIC$I0XHV4`GmB`(B)27xdGM3$5(tl*pYSkv zy(SQ1a&*HRHBCw_M+UNjjeC46eB}V#7;HZ&iL!?%b9Z$yBX0CvJx+~ld0=naZr(X- z{ce6Z&l#h?n9wbulM=b0x(z~P@H@zX`C>YqDGDhKng{gEkX{q5ai)pvQBu^~JkUc2 zOH;Mkg1x&-mYv1vRuw=L*HD@GiFswvOX!nIboRSe+nKt!)vRRP(68zbf_?aNxKvAJ zMWc*ITc^Tn7cdy%wV?sV7f$m-vSl;OopMdIf#L6sv@1z%_s5V2t9Q#sgxsUm*+CXE zIN^@%#k~<`<)8nS5*<-_S03WzIk0AfS+>18oue@4r*GTPh9ZQWqHMf)!DaFo1=~WA z()oUNR(;Jz9kToG`zH8hNB3J}04Z-DXSX6?CW^DAsQ-3Yjc|^sLUs7z#d*Ksv5cK>2&G=N0b~~3%kJrgo#`he^kLe;DA=4I?Kd4eLim7=vKAed;=%XiVGyng|T?5 z3Xd~xX-quwLTvzW>P+j*5XO^vOdgx&b3Mc7%kbiemdc6q%`9q<_uuB36vl!TZLQUL zSNF}R3zLE|Y-Km`)-NMAMhcQuFeP>y7puMA=WFeC%Evh^Cp??427QwB#bySBJxm<4 ztst+Wo<(>$tgOManepQ>luU$#Ldr-<|U}e#%qa9y&;_t78)esjp?%b zHP`Zq3n(h361pL`RwE>(=;P(a9+q1ryyN23c|-+HZPK0cMOYfGzt%%Isi)TIh>D-T zbW@lYQYKyHByIa#jlYaXWw3dkU%1PY8q7xLluF;_ga^r4XPJ#!ScaII>9*l*0OC9x zylRV(*tI5V_w5|#;b>W;1tcp-)eI#7dtPe zh7U3iT?wmNEz^(B>ZB`JdcrvJ(}#V{*y0;;39IPwWz~GwPZ6(>Xp0tz+kiujUNR1x zu0RrOFVl(MRT%GMMQ6n|q_jxCOXWl+H?`V^dFO#mFa-8++VJW})#O=2hkXE}hUdD6gAqP6b$DJXx;X#n%Pilyb&G6{WGbUk)#|!S|DD-=W`v?;T$`0keTTHvPjDOEVlCIGh=(?L%gys&oP)$-D~|9Z)7< zHDv1S`064fnbRNFf{b`#^qk19*@!s{{X5i1>ob>)6^i|p;kZAWDB6 z1j4#b!NURNjw+byq|Jb()`Bs2BM*T3#cJNR@u5ApghUx9C=rH>LE#rDIS)*NtDgWO zp5;42*&|;SfNQSSuD0S}Z!Goj@B5|&-?qXftPx~KKym;JVRyA5P^bxpNg`PLD%hq| zr}y_GKR)qON6>mG;1{k#p6`swT*qM_Sua8BhW(tq%K%eg#j8E2@;CfVR=dct#Dp8M~LTk;mh)DhT zF?)UK`^Mb@`x~?N6JaSym+uhu;*Vr9!HRh07|#!p&Yhko?7Y-o^5a5`UCuhVC$tX|ZvfFR1aswJl(+bLaE* zj^eQ9^CA^7xz%}<>9C#HXZ>uVgSo^9lz}W+FkMs&)TniFJo0&Gf&j=>lEf|#>_PhJ zbs;cSapT#`WQ`tpNTPl=cdSK#_UqToKI1Vi>Vblv9+Cp|YG7@1WQ$D58duDY#pMa# z=F7CrN{$1b?$Pj!k{0988jGc#^etYG9Mhco;Cq?3z}ONcebJg*HxoF1I*tf<79@gD zZD7tzPf94|xiqntk>O?@=`zU_Gu~Wfw4+XG1P#edHopDN_kyiNzi^k;k1#IV;qAN zenA)y6tE#Z8b55mAeG6SfeGDfGE@PJ%&0mheWiJ+8#?B2>yIpAWpqY!%GP}~t~8u6 zAOD?c?vH;iWn+0gylS+DI}*v@c9x>i(q4QSpJv79yqxpy*2y04JV8ZegA za1x&WLxMAZVuLBS9tX|bp6oI?zS^x5zOi(2+KV%b{^iWl)o+QvN&R2Fp4WUwh4ylK zKf@T2`s-WHzkT%VeT{{=i%mTIxFM(q;oOurVvOSY}#V-%%GyI!t`}=$F5c<}6>$j`6`; z%erf_cNHcfQ3;@X6nKy|!}ku&6ZWTnk?G&R#Y?cPact?BKWP$B`*Y=DaD6{| zJBpI_h6Zrwhgf?C>mde@)QZl<(Sz1SgunIyzIVn|;aC1%5HB9e44FeQ8{{$il&+;S zUFn#V{BhFK5-v6r=KZi$ofZeiufCVxqj*z9^@@u09`8Jg4^iFtIo4%bUB3ewf_)b^Wyr0}Wg4#W$dwnj9 zS*)#|DY~srlqL}vemgP@p^U!%{m=({(&rxZXb3>EWhhyagYPz!-rQBzEIm#Ul9P~I zoODafxpK42bqR?i$ELgu6qF^(h%RM1*^ao)fKV)|e4LY?K%UEW62c;{V;@m#!B6XG zMtSz%=HZ)X^5v^SaQ}ABc)6%c!2W0Zk4yuctU3VDoPzn9pY@3 z$(A8I(CNU~D$J8Z-&$8>M7C;_qkR)|Fi`YU<;vm!D~W=1JxV!DoLl>4vy*iw*^{b| zcO!y5AulJmQiu4!fqPf?%(S6H1qxe?k^{|o?OwLwstjk%avfPowc|5mje3p*p$96= zIGy%9{V0&(%_-fh+jZ=CHmw45<#D7m&znHN?jQgz5QC?3aLX-2S49jwRF**}4qJ!L zQ7kM2dUkAS>J~iyxnLeA18;30j-x!=M*HG zVLv=YR0$QxOeiwd7Y)puEW9_{?OiXm6R}4OON(otbg`5ioP*V#RpSd>K72ax>)Rae zETYE)ZIm5dudCx?gZ)*F9HSb|xq6g=0&Y_upTUg!BBgKMkSNpFtKLZNN2I#z| z8XOb^Zdo4AWWNCzYztq%Jg(C9xiszfS_e~E}q(z__Et3eqp8CjyOSu^<0(TlOs7RMGJhuZsZq& zs9|(X;|2*=`yKQcbCY<5KKkbM3TN|*BZE8ASV_B%*6*jo)(^{m1~8}GFF@j2s4O(F zG!APpP}UIcV;%`{%_a_3d8}?XU6jW(T^A@0ZR$^10V|y&)-1CZZbS6xVhpxD{LNxb zE6px}72SYljCX4h%N$(!Zz1tx()iqv!CDm^J6=B1kT7g1apUqULSi|*&~=fhy=sxM zE^0Y=+4tFK4fu<3T|WQLxmG&cf~(8pl~M+NM!CnASa)8gzVj^9+h>tj{#o%?*E1&A zVEH}qh_@31WaS^5P96&7a$)-e&xIe>>)tniI*6ExtZB~>>OS_Kaj1#9WiD%JVD&JG z2URS^+K-Cq# zBOAhc^r(?b_4Jr8dKHZgle|Wxv$iQemilrjo2IHenH3Azq>xze@$yQB%u^^HNLeEQ z5Yk?|s#>Wqtli+qbLo~_Y~OY|fj+a@MzDo^7VoUiAr?Pg5cy~ZGK)mtD|!r9~&5neYhoz2Y(19vh+rzjM6@;dQC2q*mL{Tx zc`mV+AJx{R-P7sn92UOuz8~=4Z2?R552a8GGj)OTkHO6L4;(~{{V{WXGoH)UPGind z+k5S5BJv;uCRXs#QPM9o-1q;zvF^_aODH@}=+^{ur%HXro)%ly`h{X=TWa_ROj3IG ziS6$WTpaTPl0}wJr&gKkxM7=*eet6rfw!w>zwFqZfs}n&<{F)T{rHw2$fYIDKbbq< zGi)+S{NR?N@qp95e2d!^g=Y=l(!)!j$39-fPvmB-%cntw`1j-V+&yL+bCW_Buw3b7 zGwroH3{ZesAU%G(iT=yu-ESrRQ88w0-6L}Ty4RW4-%4tEgxlX-i+(YHgigN5_maF< z&Z+pVB!zDxAxe+A;1yw9AOBSa_-`6?+^1Y%_*PQnH<8$Jbr*~&R{y7!`xC^uW;68q>CL+xbp&sw?Ax6=3EU<(m5TN4a11wO>F9@w`;yumSDE02f8hDfK1Gx=? zpu1^;wp#`>b5;$Pj81%*cH%xMD~8nMzdf;R7NdJ-ZA@S(Xs{9$(uWc}WxM9~lemv5 zREoAN6UC^dv^~=ya|G^T=f3;kR~iReskg>_rhsPdt}soOX2mR~56{`D* z)zs>wZ(xp6qdJw(`$UI*gL~oFD}wa_Xf0dl2UUiZr39&*-NbiS7p~8p>nNnKy}=K8 zg;gGo76x$mX1Sjh1Q*K!SNu3{m`tWwZZOLoC>q(PRpvT8g=3}WWow&o3KGY5kmcnx z9$oAj^&Dx0mnXIVoGvFL|sqb7mR%_q735*tvv-3*cA*4_8(bxkH|qY;H$f~^-qEw9Ag z1^o44v@YM@j6(2SI))^iWXdP8s(IU^1&j>Ps61$eGxul&SEK7@2^cu7YwcXtmoNl5)gyS+K11y79pdy$F*=oE2PP(Us>GAk9|Ow6)z16(xo$d&RjAIQ?UTqy+Z1#u*aFjoQf z1`bR(dW@>8gduL@KX#MlS=WmuoBNtewFVMLZdr=pjL}D#USJu2oGLy=I2~*4T6484 z+tC^JD%bx4+iw%0ZmB!pn^BdeQBxxbi96|3&PuW{vI zBwo>S%(H!DzN^-SG)1Zn0J&!;3*E3c>S-zPYftzqRI?O-d$yN-H;H{JL`mv|%XC7! zB8e|?zEI8#;x%VD;*nb4uXHBj?^7#Wqz5(komg+zp$KOf}*lQ_IoDQjL6LM6&{ZliJraPbU$Y2G&5#nRE} z)|Psri@GhVN(y_%P|RWr0Fva@11oLM`oqA_hD~38e3E9YPCjeTemiK0^UEiLYcqEE z7g~P&n^3Hs=tRq8%l#K0ocm%tLoE&tDl#lxxA*AQR%&1xNqI(JSU>RTu5W4D;48cA zJ=g8L?i;k{g~mQ`Hm=%2z%7LV;GiF8B@FDIiiH_8&2AB^`cDLJW9EJvwnEF zV@Z!O66FPf%GLFHmG1w%wcvgt=un1jz#Mu8ystJWcK8ooT3{;mtxbB5Ji5PcIi254 z1tuJz<#nwrX`}CdVnA$habQ|^be4*eC{b2Imeyjr8)S*mnEKyRc*X~MFkB{;fpd0EOv_PHIDqB7je{Oel|TiOS*z?beEz4ww}n9UWmh$K|3vmY zSv!}Xz@651D(W@TL1rpESSPxlhLA$J!#ZSlO*9;;tjWckdDIrl3KeaWh! zzqH(O?yLiMT2}74cgKb#S&I$um)gqWMtYu}n&?mh;T)KV>=kv#{DZ*!X@a$TV7F2G1M`s~E0(8Ee74 z;lfmyZ`xFQ=@uR2*W9vg3M7xKZSsOVuW%+__>>lpjj!WAQTG<+ygTK5DHMPyPz7Ra zu2)#M%;S6WS##C$_V2f)*w@t$kP6m-n3OwapO8(BIB@;X3E zzOKhYe`T6Qtwzf7R&=|rAXU~dg&$uhF#R4vTzP%m&K`PE7<*mIDK5?9stbqSR%}2< zWrQ3u_n=*=Z|rl+KJxU_Z=VgwLen`e(+97y-+t~Psd6;;`_HA>uP(xmsqo$h|F{g{ zTqCo8@~z5k@E(myE?(v8e^~7V?lRd;od{NLblIi zZyt^x^+02 z^0fh6xeiu0ObF)&-0T&1OkiYUj)kVUIv*IYsuOB42NmzM!0mAVW;I56rxKSCDl>u` zts?B3T_ediCuB1gM2~b`?(s~^9bNeC^QZs2o`d|-Bo>9V&a>r^Oy9)5_f=#J6#Klr zEqTfp^kL>Bfdk!{&dckmsW7<+m;2DWDkjDomM*)i(#Ob}{q%xK{J&}T|K%^PbFLmA z%G(nz6_sA}xE2ta<>eFM0O@i)%>)_bwke_w)T2MY-S+URDBVfbsZHCvL_t@F6_!#8 z!}2|qhcDC(Pa%sLF5R%*loSOz=~)GUpF|!D%8v~i57*7B;K605EBy>VJ&ddt4HJ~T z72of0wQ+=<>KOX}5cl43O=j!bFrzc-*bymG6;Koqq)S(6(gjlJNSDy0MruYK5dr}L zLoXve2_ysrOlT^-OG&5!q=()+_&v_vqwalXf8ROZ?>)blf0Ep+XSHYL$-UNnU)L43 z!u{~?`glSkV3xRcy*l`w%kS_i9FKVT)`Tn>@i8i2R2|@}8k73BixgQ2ka|O+=VT}r zMBvCys$EjoU}8@uwF7LQyu4WK2JdC=<-nFd6w?OyLQONlHXePgB{}0)kqSm06nm1h zc;vJu59euz6)`MzFPFsR#ExsOR9hk91Dq zqs7{*{(9oiE|JpGw*jy&5mN+^t%bgP^%tV@-)5cxNeSL4=8;I=x`_Vayj&-9OutK+ z9DIj?@~;>C#4Jz+oc~M2Z;fBQ|1GSK&Y1yDEpMT}pJX1n69um#^N1Jk-#@1tUzt;R&;pc|x69>|8t2}TUX1;`NzAuTxt5dB zW3~$yt_|6+dY))P&K$RTW=v^?zaLu!-G2VDQn?np5r5<7l2uR&;Y~tAbIFncaCoV8 zDS0t@*NoZ=PeG=t-H>W0jxG)REI3J7#yJ{Eg>Yl@HwIUR^J>AWdX-Zzm@Cal(YeMP zmv7%PnRm;rr8ZkHQJZaDC9^in9Us7#tM*OV6GTd-3 zRW~X95)0E&?JM_Od~l!4(~CR{wU4M0`@?wEc^g`{#PuA@he|Mw$T206BeSWj0TS_@ z{ld=0($>vAS@XX~A?1ALedT(>n4_zQ-p?=_NFOFwNlBkwSV4qG@8WxLT!Uj@7+Co> zEC`T*agDAqk!9?mI4Yt=w#L;YWpsj_TTv#Ph>AS>@#$Q0v2!6~gblQuGxa4$x;#(o zp+(|iQm=O?w%pY~%r*?=Mb(hXLvAdQg2hjj2U?9y1OtjV9YI`Xs74wxOYd#dq=pcO z;*B>NF3I@z07m(dtmaA%O{6=v-G2FTe>VR9Pp7j{d2ladOpEBP0T;O>e$MZA5+7aa(TfmG5S75>>$mT~aK`=tdbgo;aUFbpkq>Goh2CsXuIWo7QW9%iP4|hm* zg4X(DW^tBfukJ=~u|{fx!# z?2FDQCWn$^(*UyJmm3?w&(m|&HVu58yDN!Dg%-Dv=}AdeC1U=uM>d^SV#7_9Ul_Nd zgA}hlPg0QjgQZIo`zv16SHXs4tJ1qfnAs6w?}~r*x&_vkgmm&P1E$KP&!> zUr#gkHy)I?i!osY4;|=EI>TY|lcr6TrMKo`%I1ytXcU3D~K1kA7mANL&99 zy){ZVDfyzt3IS^O_K>BWH%`Racby6({>PP18ynW7cav}XI|zqTi+$^(G(_6_&GS$u z}(WXZ*06{Y~wHN-TwFRAVP5&DS2W8T7(RU#~V2H4Rpq>|@umJnH++I{7Rq zV5^rtFyUam|JbVB*g0lTvRNowilv<37BMw8689QK@eMrX+5Ca2%O|y5giaPC-p4gp zG}nR*v)UD5NVXy2EtBUZ(tqR^fo3kpvDnfEPrmJ>%Amil7joxbuE4f{%x4E z;AF=Il?un$wT6Stziw{Au!^O#8T+{I!(O4VY(d8{WbLQ%$(ej;JhNMktrttsmh)#2 zjf+~zQK|=ae&h0+`jZ$J2caz#NK)CCWoPF(>2RPe~2tGS4L2yIE@xh zu>0ry{xH(tspb+jE60yYGd*Z})okMkA;UaJ(0uXsG{%`;0dZbn3DU{DTb(B=mGjq1 zh31l^GqYc}I`zxlwr{wzo$+=WY&UOHKV50M4$TD1_IgiR;$35&>b2fpWTIE9=|d;Q z6C)@zMa32)hpW*=(&nk^9Zlzy`GrBzDfrjGv_S@620 zV5ss%9Ar&(2B**IiYiE(2u%OX(K=Px*q(iV6ApE74rgz>^vYc$yuQe6>+!4i=#iVq z;s#{goV|CLC|@TRQ$m4y&R#}lY{fM!Y*4HdkR<-EwA#vhqa_R_EKh;zLWN3I*# zct>&JQkJk&o3tsh1N9pW=Irrb#VgK22HWcNO66#dr8kz#02m2hjEtRa&Y^Gi%S!rI zTjy+F83f-7>era~9QnWoCp|v!@=1rlbkv?+rEu}x)Mk(mj>Xy@wn`M%DiSiE)`{$g zj;qV;o$h+c=tX%Kdn}}}=tVxZc@R&8RJtIKK3ufH7*ce7X3kP4V}N(vaU zw3-4dhdo@O_jJnL%&Jvysj}L-x31H=fKFiuG<*CvKGJa!L!`Y}934lMB%b;V&2TH2 zg5`W+0G{*5g~sn!bSm;bxYWi78d3Js5-s$sk_>NS>f(BiUdgh2looyc#4>$jTCt@w z=%1EX^PB_}@0#j**c}DAAioaJb*qPyfljPR0$K9k>N|Hf-O_8QlC@9Pid}6gjDGe* z^LCf0r2hTaM{9C>Q?^9aHqS!qqx~}cRsL%6D#QP7LmCST7NM&*+$gn0o3%u#f-tsF zWFEG1V`TY3EYK;$R?PCZz1FWs6o+?b0-HNlE-Ok~T}aOlqNDx&IUxx?*p_QE4&+1s&MKzitcGKP4mpnLfd zEfOj)11SL>!jd4`sVl0zoWFjazTjZ8Asta;zd-oHV3wA70U;O~1$YTY`qoP)Gv^4; zn+&X;I?ZxM$RmtgcoBtXQVQm1?$A5db9VR-k|jBnrs3%qu64@!nK5x6P^2B@2auSm z!KJdmjMT~!!x-t+)c`2Q{Qv3q+jNY^QHPT%1M(8zE;eLq>tV1HY1U` z)9R$T3!d1$DhO$)@*oLU+L%$sTF5GnCYG%BVOFJWy$g*Z_uY~pQs$9f#^L4B%y>1B zUN&rB%X+@JKIivOBW4{Fc|>YKq2RG+$BB4pYd zG`T;hDDCMAz-=ql;6_ds8u%w>_flt^dU~)4dsJsxu0A*7=}vwAv!E%3V!)}@n?wh1UtSypezM#vWi ztMCL4zoy59_8wjiHX~UL8vZiI4von2`ta6d-i)pC=9laqBlq!&Tiu2aA>r3dJBkwT z`%5>Ypu(_4*XW@6B&4 zvZ`7~;u@zGddd1uO21C5Bo>IG%ObP&HpS=N%Y^;HNoO0M$;n(sUFtuxH{4|gzTb^u z$8Txng&xCTZ*SyEzP{aHUaqIP8Vf<9j9u%CO*L~OuT@D4MO)UIuunpkiVdKI3bCPp zuAP%50>Ih;i|A~_id<4omdZK=UZ2^q%$x8^s3;ft!f+%*mKhUfd;1)&@LjWUpV1k& zih>WD;Kba-7|Q%9VYJCfei2Q!sS-Z}h!Rwmwr+{vd2%j2mKlRv?~!wfQ|5z|Q@UIl z`kIVO*hzkJ(HufDgFYHkzBEQ=6;DiE%GLdi2rid6ASbgJyf*%Z+|U<>DV?3^^h-*k zSFQt4u9CW;Gs5V6p9s82)xG?)B{o@QnJ$GN!^n-Bf{RpM9~@e`@58p^)0Xku-EkpQ z_Pv!2t2iGH+Ub?LqpoI=wFLoL1swL!%De*O$#^t7W_V7K-1{^s-mosUo*FDJ9E2mC zE(loF6g2gwKGHTRY^+5Yy8Im5puF>UMB( zgSky%i-XXN2EI!hZw%hdzpm2{?FP*@YvW-vCxGpMkkYeNQMsTiWv--cauLK@%wW!wh zT)(xwf6^W@Gyvyt@WX0w5PO}qX26}r=q{xmH;7b$v!N6S?1}%JsXHGX>5^|eq#oH0 zJJk`iNfs10ii#FA(dr^W0vL0eH}ovfU;{WvZ$&=qNi)qJeuWF5XCSC&t$}sW@%LWo zN{W+j7}vT)#`;!9x-Hro_<>Ea$v0jajk08PlgybZbxsR``_4t~E=e&pbInb{7On}o z&N2B-T_x;!ldA5fi{ZGWU8s?Km@z=x?JfmD6s8?##aKQcr)V{(=91KYwbm>VT$Y;;lx#~tgm`i_pNhc@nEegpcgH5;jB}xD) z>Lt*^#1|+E@(IaIsyw}EO3iQq1nO{w>=ZXedN^|tG{6-Z&U*J#k$LRuV_)(72#sP| zW^cT=m+usyLjfQW&QP7k;HH`!GPDJdnngD*ufcs8 zAr(PsZ69?W=SQLj);jCV;_llRC*GwnV>jy$QEgK+EDB*LC^9sd`#a~E#wj0K3n{5J zo-4i#vfkC%F@h11dorhX_LBy?RE%d8f526+ZE|a+#r@;mc6#_NOw!Klks6Qmz3&o# zt1?D=+_y^BhfN`~ss5Apn&zljQ@bHbKeAjixxgf(`kI~#O|q_%HDU}Y;+e~_>~OcRRsJA;6e_s{ z1@)<1(94<~@#$v-Jzp&U70;0?K7bH15X1s*Qew<}@F@{Vp1N|``RwCK{`lWPRZp}VZ#!u;&9MtK%+j9xwMT&28OIz4>u10fp zk_=*sVu*u8|4v*>d0LQao0UMa?E`ma2RHpo$aHlWdw+OaoLg^Yj|D&Tc%X~VOH!P9 zyPlJ2N`Y5;Pt~}ci1NV{kSmlbv)t3lGzm@de5t;4!9WRniQCWC~H zp-f;{#mi}Hsud_WWOf3q0<5C{t3oLb!Hq);6&fejF0Ocb`&G=={Z@~Kchxm7 zE@)`(CS)(^jbfc#l_NfmkI&@UV(auO5aFCI>Qc(Y^Q{|%eX-5EGZymO-s?1Zxtwv< zWq(KBo}BRA;2kIWu8oStUyl6IUWJ>)Q)8Z3DS8nW-gy1(HQwW@#9kNY3yMS>TkV7f zR;W|411g>&xF6sXcm9`Ci%frXUlNfaxo9|NCl~Q!fT%BPOHo-C#M1@e50)7WLhHTT zzMGZN+|^Wk{BEM)t!!8shvCJfiu=egPWK5~fht%J1kx*-P?@c?`u$U%$?EP)A)_-9 zFP9h0(R?< zY0;-2A`N*Z9z!nZflZQ~)rh-$h-NTmICj81N#S3din>o?K8mFpm zJM;3N-`FDYsT~L&^MgKkl&WiXQzOJ&BH0|=gx&P%6I-@j-lUNii~18oV>ht)l_JaC zSbvpg>{UW>o-CsDG#=x(^>=w^QdB)HjoEwDKhDLm6?hpiVkj2Ule*|LlLhKhfVl)n z2wA$adrS|Yr(p?c*6J^jG_i2EW(^L~M-zROXP?T8zmX9^@-?hQUJ z1tB3BnRf2tqC(NkzM#1|qj#LZo-42Tj0O0mcUKX=DWsEmQGID~Zr_d@sy8#gX_I3n z5bk_ zXD~RJC1d~RXGYylayqYUy6h4+FX-LhAw!F!SKYVUVK{KWY^rvTd4Oi*^2sW->W2&0 z5}G7SB|XH|+@vDsyK9cL_y9`1dU-u`$m&fZ$eC0sP@Jeq}4>XjR$C@>eajVQ}wptigDh;UQN6AQ^@oF7D{(g-eQ)>8lm4dzw({?~T;zqZrxayHZcmZ^r!=}tS3ZS57k znGqpiEU4&C04@gQi-tphpf0p>nb~gi@VQ%B&+SqTy&DosZ}&rVQTX_4n)6Chs ztPh_}=fH(ylNS`YQ&Hl$s=FM9KhL*U9v)D(+N-L4NN@gTvi=-ItSeL* zS>)nw30S7zSLEB5<*)hr7&zSW%&)<=CZgy5+r`M|dfK_;^$*A2w?=A;xe!i*{bk|4 zE3VDu1k=S-$7?bwz%o8_x5r}_p=*#e5sfb}ML!t_#l~i-!K9dI-UeQQK^!vs7Y7D$ z@0_wrhEKNh$Un<|)zF?SCsT`p;G0w0JYA+_WdQ0KHT|dh@wWk$j^c%Zqv3ujnNo3J z@85f@xD{{M*%w4VvyYSEvxAfYGK*A_+%DP|>SmnRTnSk9z`A*{Ytw2R3L|1I>ZJ+wG6M<6aiP0=}*>h_Ir4k^}fD4KKGBtP7cK=~^C_yrb#J(39KMJlLlGNT?2B|{!q0$8 zd?A@W!@mQZ56{t{f_5PSbSIeZnYrkVvewyBgme1Iv@Y@)G)anQAps@ETmNg*&ucKn;FjFqrQ0-Yz9# zo0DY+*Q&lSr08#&CfOubZRVWi)Pr-RJFH$Kh&*YES+yj~Qx zcUqO2AWG|Bj`Ci+*7|m;gz>5;FRwrV=KRc~Bu@GhJa(>{Tr8&7Z*^B^L1q7+k$`jm z2=k<#6Tn5vYE@koO1P1lhxlip$@k6SpMjXpi4Bj28wy&`TSoE^zA*eV491t4ofzQp zbLq9Bfi1(^G%0 z-%MqBh##@CXyM3QnRSoa_T}@H8r&7cJINXDve>Po!5NhdNz=?6M)GFp#BLj z$dB3@fOR&=`kE6(gjFC8O!am!cZDSQD zkVJ~>H*B8Nwv4ZA87Ncl^C33h9q3-IXIJ!j7oM}q0Z)wSin;cMp`g>;{h&VY zm@EJ=IhAOoQa|HgE^)`~3xg2R{ciP!chumXhTRHT`LO*H(-(%_7c=(~9tI$Y64Rp#7e%159`ifTj6o$G@2(m!4pDFxh)XtQe^~Vj2J*P`v89iEDVp zXw67_Ge^`A_M1&4fa$ak`fmE44tIZ)TGf=M;ACZ=mh+LmFO~9qcs6iX%-$URgb{YH zIv_f47{ygBhx0Rni|lP+51`3Cvd9XCmWc`cJa-oHUd<&-SrWCN-+W3eZ*zfM3N4Y* zJEW<1K!1(Qj4lr@Ia#t~2_aMR-Z6hWpSo$g;VAm&WykCf;P4ap2A|S-QkjKoadUtkOJc>qMWi_?c8~@}gIn`XhClD|Irz=7_Nct0bi%iZF8M8KSET9b^4dbR zs0484@p&oH%t*?FqT`0mH zH}gy9wP5i#Q|C5npk2zqPSxw8!_x8N-;5a-D32nuPlzYpM2{%r;@RFqe7&j$^)5w|&UeooQ@l zD{ zRG4Yy7lt|`D{*d)FAOzjZ+q}S2gUyUq8zOnbP~U;F|gkcjq5JUh3)Fl4tbJub8OsU~0aOySa-mmz8~ek=j;3ysBQ zm2!s{yPGRL6@#T_RRKsnBjb_dDv!|~CRr5!;>$@mbHzv-JN~GcD#gg98ZBn$^YzHLbid^9Vl{5*%b9bhIx8C&vuSi zSbaTCk-r0AF27&!QrG`ePgKl_#8WaOanhMah@O{)j8YUx(<=t%uf6)76T$y|Ytz*- zX0#DS7Wj`z>A;2iUIvYMdC2gdyy{*In{BMZ5mqPLZ6nV;||XX8HVBma1!C={A@Rm5AB?Br`5$ z%8Hx3-dk?yV1jXwZadwHUx<#>9hk6s!OVQ|+>`&_Wd0v3b;8vN3wsoFCAr7smw~uz zuX}Um`oYme%e?e#18KqFhPIntnvb9B-+isWwK%WWJjscnmfcjO3XF{Ruac@Uc`AFn z-DDl#m`^%eZWL1UMuB?j;Riw`PJ0*q%G>!cQAy$-=hi=Q2D(6Sbpl92hM-iEGT zY+Pm!Xj9t2Dd0P^<-S$YDVqx&%%-o@=?-a*nU^?zz+!}Dn zhs}t>F79j1^~}HsHKIlndO4mYe(@heIBv{GkpjcC=&`wPPh9%D-so#Cfi*uP!y|KlU$;#RN96a*3W z(`AkF5sPz)CWrjT;{HtS>HJrE#DA|`;c8fH?RK`U9clqWiqh?DtXv0eKWKcyD4fJ2 zkoOMiv1mEXJ!mY`Sf1bKH#GT_5nBDJlK*Kif24A~inX|iVo$PW^)Gdt-uf}rnCOFI zBny_@&T9!OZHrxwQ-bLAY>$EtU$M_9O5Lmp&X>k%HO;lwH(ex>ID7wu^}#z0;6q#g z-mCxJ&+CI_XHLeN68WqNr?~iI6n)jD0DaMe6QRcpfZa++a8m@00B8ZH(ZXOpgSGGxg*t=7w_>FI8((P(J%TUCLkc7*Fu}nk(gIiQ2yChbSLs zxh>D{@-W|L`+o|_`hKNQQdF3!hQ^xj9_aI9?C`FgIO846`p`38$H&Cyf}5X~hkZcx z)55dI;nBBl;}S1=?%$u`^+&uF;9=?AE)Uti)3`Kj*>zQSfA)UqVP*KXk6rjco;ZOV zbzXRbGCJ%aO&BfMr%GQPT+bAUesHij7;f~1;pt~z?lXHWa7d=_ffE-rf{EUKYTys? zs)3avw^DlQaTDAD>nul+tg>ZK^l>{65|GHIaYy9~!?e5R7ly^8TmBycK*yj>_0s^M z(W4WH*{|lXOyZNF>Vw=rE`4F3_X6PJrB4qxo&q7_`Li;jUl`mT9YgF&O(XVAf3900 zK?#O4$8zh2HUO>a?Fly9+w4H=6pymi^gF@rmWP49I8^oP-J_eHTWjN|9ghNy4dA5@ zjb_gEw~TZ|{!q|5Vid@)-vif=Gza~(CmXP{@I1iz%?@s3H?F0V;xa-@ z^X`69@}H?(jFH^ZJ$!pFeBQ0bL*w|%GP7`5_8qRfeU!Lg!sz@&=u{$OtYRK2U?+Nx zEVv=)L-=6XT(0=E1$Nr)H74)s`?^;Pm1RxgNx$OsNU${%WPTpCATI|+9ciu&ZXC9> z*C+|wVqvB@+Ny~uU*EfhcVv3JsPW5~IXtOh^X$Z9%c~83`3UQ^G=#wFi%ymLp=YHWD|HB9gHDavwl3NdLW4u8N*c0E4ke5&MLvmWP7!jqP!b8s~XoKd;>8}|-h&4-Be|VwXGR_cb zICFU+%Ki&OllS1J<$=tIELp^0918Tul{(C!{eWnA3Uq5@n#5aYDr+5vPn@B6mV{y! z$N4h{7;TBs~SJ#r}w54jydN`p(#MChe^P6}7emmbHKfv&dG6K%YkK2@!aB->uPkX05(Ko&0eS$PugIh zR#nl)Z$~fxEd=w7@Sl9j8SrcGkM|UQf3*MWyL0BtYOr6gBmwRy3Zf*Fv*7iobndPo z_xoeY?*lH(;Q9}lN21$fbx6gZ?a*+a2!-a!f+E6aVG-v!!tOQE^;dnTUq-#ocY;3L z&J2ICO6$`1pLp{^#wTC3{OY?+{g1|-`Kg$dnzD72C2C+t4!j6Tj1%lb71c?)O}RvP zy7lq`;<|Z%1ib&(j{Wa_QfBtm?Zq$%&LSw&=1YdCdZG+ECO{b{1ar+F7v-ai5}LGX9zuU*z0IecT2>9^|( zl`Zg2Xdqee-_)i4V!79selk$7=fJ6#Ec%}0c5|g@t604KRd*4D%J|s}E@JI8b%ie2 z`K-liYfGD*I1Bh}ZSE37C^hvG`9?oimz?&X3x_eEGLMO%{C#X(n4RnUY{F8f#4yDM z%J+DAxtCAhIYO-EzGCyv{h3aru0xs$u*i*fBj`6R3zyzMV?k&x9@eUY!K!MYbHi6w z&Yi2dDSORUj2}q}c!<+0W-*g-k;mS?jFKDSi^s61XG87OK-rJDIj4NCWj_z)REw1A z(Qz)<|1DBA2A>|*RFny=yc#dCtyxWRXw&zh{Bhe0-2{_%rXfCc;8|wrl~YozHC;^WZ!e=?{5Ep!}a!evmitjTn#tUu&i(@pF{&7I%O@47?Xte zxyM)J%esf<8vt^MPFhvk%CIuP>X1B3-Dhf6?fbj`p-e}f`Q1vBGIkiNt`DLa{9D^Le|i3 z1&{c02P#l+?AUMJRLB{D>;m#@16t#3K#WokmA%KV=qg*{1$E?Rr2&iTET~@^Bz(}I z{J>{+Sb9=ic-v`I;Q1*t_ZKoR{eZ+go9;J*MlxWX)z?x5y7}ve$lQMam$Il2;2jtA zyE!7FU^etYP!U;QV9~oy@ovG$3Vld&t!7u5cGmgw7ltYBN{O1tGfo_-$x-$6X}hwK zQkiVm7FacX%4-4u(>($v26$cgbCUQVZ=(+6ayMTuJlHE9tIwFNSzhDF`3yHTp_t^5 zRrS}IIRpg{U!Ze~6pz+cjF8(sWD`o2m*<>x_@#D?#xz}TzC@Vviq1+7z%MsKBI}$o ziI%EUb^semuRuLAb#2IR3X=mIcW+TxC0O^kB}+AvVW<3Gf=K}fA&bz#k)n&2@zSpY^i7Q^t%->zVWUu2}5 z3#EcE`~|-Evob9TVk%`FU^u&UZyE}ursuE`{8~XCas1iDA+C6~B~QN83aOi#D*3Q# zrW{ces|uEB4%yqLi`Mz|wcyJy>W9b+g%%cx%izHC8r}h!=J_^QINF%D*BG$(y%MQ4 z#6eY6^R_p}qWbvX#dp*l zMpXRO#A~;tuw|zqkf&H@V{^1rtG`PD$i@wsekA4&kFtgFY*I0d;pEeAv_C&c133MI zA(e?F&7hS1+uuDJ{^0L>uY1)KS=tADHsW}NQG#J+*x0dS#S1VlE}=zV$s3DH4?KCz zvFYq&Ne!Zs;q~{FyEV_+I(z!GE(O}hnKxKHjl&tE;4aaXc~d0idl?z2@Bd@}WQ*Ya z$oj!@J|2FbjKFrg054f~BsPqk;Z9k`GD=*mZC!lYb;50=e}zSb-n)@mwi&4QYS-t$ zX}nkXHd)`ku-WcBt-5$j_+>X?PQ!hEJN(M}+-@h{*uy)m{*ul!j=wH=v~ZBlXs48l zFqLXKD-zpRbK{kY?_o!15szMV0oPwOsFSSgx&qkj#s8+sM}M|xdphUtnZZ3J-o_xg z!?)jRV4r-+syT1{y75Xm!m-xmT&@*0@>{3P3&-e+5#otI%Y5tLw;G(|I4uN-Ax4)& zzI9OkuNqLEHQ`yCxBl-AkzPC5Em)dV;+T8Y?}AK&GB19%$5YT#wyCsT|MxD`wPt_@ zp?xGPR_Eg#27mB>ywQL6kALwxPN(UU!NwUDgZaW^vFMVN1+;;gpW3YyLb4$%W z#eFZ}psE}v@t8s8fzU2O>$9W?zI7JH7Rp`KqZSkDtvWIu{; zOtraD!VF7J+e>@L5&GbxHK&xbCi}rq40|ZvGt&Sp6sY)l*f4MlE=T_~K$TFP!5Tgt z+IZ|k8+rDN)yHU>1^=MihHk6_?-j_V&z6LTjnO_iih~VSE)%|R?ZW@%TwJSz! zMD{Zct;Y!Rwk(>b2TZ8=i2XJFj7jMR23>Mq0x3-`pKOVgtP%%HsCUmC%v5xLrz!5^m~~d^>qeAQ!Qzwv$|Ur(aeSv%u30coY#$e zLrzlK;H+nldMl=6vAqHt8JHESa^FgR=JQMPt3H zhK`(1EAg5sL|P45>6Bxq3zy+-;p2m-wKX1)hG;ub*N!Byeb%%{J|@W|A))9Hg#xEl z|KPn9p^FQV+3#q=I$^e9vxL-8JlbFh;Eo7u*7^Jnfm_z=CfbO_uUzthX}|>&PuOL0 zai_r>^d6yScle*(U~e3*hks$nZ6RL|lBa1s5kFAgk33nS{st}#E3fE=uv&R+ zbdi^*$Sf^BSObps9VFOJ=EHw2;bdzxZR3AC10|rsC0=O15}dvCCVI}sqDv3D<|XBq z1Cg^JS%!vc$-LNoUOpprO!P>C0_W*m<{*X1eCqo{GqHl#_a`7;?~8~tG)e`ay_&dR ze!PpM7^Hv3Bu=CR{U)#z>O2u^XL2=~s6MsOe|19N%^$ z)2B)lnV5nP>+Z`xB@XJ`B*5~nq-TO$&e$O$^YRinn_)z5A_tSE|1-96OeOI(JbKN81i`qMkZ*71l-^o(QTd;j2Cu zF))c}i@FHxJf0qfd<)8)6kOK04P5wS`|0`$qA~jHXsI(Q!}>ZVvJOVNk>?xGKBixFvDi1n59#;A93?rSxK!!(HNkzyyC>X#xM)Jz*1ZrBsvulxWjvdD zhwLiUcA;8-Jm0(hZ7QEp44g>g5%u%cbKCkbqPWX^QMZyw$`y&(i*H%DX;N@&mp6i? zm?izFunu|@d4iv)uqr5+$%m9Ct;#!)fN!8LjNo^1sm6ZJamALH2bd@|SU=~+KW!CwoEbL89_#6-J0bNI5#@Y4Ar{d{3!0nCME2d$xz2sy>Z;V%q* zx<*W-@gVVYNktV5q*n#esk@e0{X&u@W^r&i?&!^YE0=@@9I0&jK6XpX zcLfTys?=e;`e%3i+{EV!dRw7!FKvZSS+EUs$(r?>Nr4-Q8TqihsFC2cixV;`Y1Dh{ zzBg(FG&^A65Rv<7n`?ZWUl_dekP*5Gi)Aj!^T~^O;jf%;^5o4sb0#~DPE|%VP2ciU z>Oi)hjy!?WX4Q#w&T`&~=AF`mUtffhMzzpPJYJ*3 zQWxxe0gyRZ3VNwp=PxKbLzPoigT2!=ig61v^s@5=d)yv0IprmN68y${O=szYovWHx zO7$B?X8ri>>P(}%;G~)rws+pO{c;2y`~F!qbw94Cv>SF_*V0&o2G&tcbT&E?uGv{CAch}VYM}zi<~n)22+SM* zAtu|BW@4u3%vfriZL`=*Y$^u>KGmB=CEeynTq;VYQ!!;Zw(X8sdVijE(Q^Lzy1O`- zUfsK4zqtE`(xk9r=2hOBVT(>pnrr6#LrF-fucJC%Ma*WRNEwh*MYsrQMx&Ogv@Y+0 z0V%t{NSOL?IL6nau}+p%2_V8!!q&|UX|I|DScDr8>>d@Mx|B3XjR0GVjZoSakfm*k z#4TT0v(#5#;NS6|jzLegjgg}6xR7oI6=-n~o#>J@0jWKX(4ij5)`cqs%eK9AiB9bKfG( zGQ|VKq66xTJJ!ix$|a%_<1s-UP}{{p1~I zSwjiIX|U|E(J^Gz`s+JH=Gp|!W;nT&2-vP30K54l1Pu49{0c; zSeHrVxFpCL$a25T%mu0hxkwxdci*$qx}yfk0N+qZ*2k>5h^1+@^b_;uMl-CEqFm?S z`fa=~6X4eidt>^QN%$;_lK8JqEme8p&!r31fNnFv-i-Ng;%QBK9sNSW2c zzZK6c??P*x&4>U|vNPw}pafsq=U<19`2-^27jwykm%}-682jnh)oJp}h9}5C+PZ~v zKmV>DTAo@_P?_LNt3o?gv;_^6t;9bVDmXR`V}(@Ds8I$NNY`^sTW~JDmjJ15yx#poQcYwA0fM%=YFYDK>}NXD)?4g*G1TJkfmbr z7Wa~?(a5x^YQ0r@6Qq86@w44dm_K`K zLNua1@;7dq)$r~CIHXTdtDmzdF*&KSrGhK?`fZ#zHlvu0=Gj4yR zOkd)=UDHn1Z1&`L72TC*!0uX~+gwGx684X)%xFF7k)uQLnh~!YRZDEpTcQT)$t-a* zXhVBZj~Uon8^xp{!D=%4usnpdN(*oI;oRluv5(~}!IzqF%{&`hfG*oWGuAqb!!8e< zG`rBODOg4FRF>3LPXI(v7_udxWA#qT%26mEwhSDXUBq>uStF*y7uses{MwDT)_Rp~ z_R}$<&_`j40!>bC+gn*SF5La$8=O}DlYC(EPGV}w$|gTpv5{@a?|Kxv-TRz?YX5Ri*`EC(U8#oUY%`~2C`i$BZJo0sVI<^q~`Lr;Phg%+8G62 zJkxb_{Xly@%(Ep5J7do;4?(GA4Ri9N`$*9V!i2o(+ru$*^yi4tWJ`#>38b~S&BiI- z29DMr77VktY{8I`j#xzOE0EaEN1Y z93+rIP@}uapS68ImcKY3Khop23zZc#*VMS6q;DUUf&N0YTA=lgZVB2W=Fb`_Q@}po zsHP4Q&Ap*={k1k0svQx%!7yolB?%`@_?KoFSj7|tZ5}jMlX7+~mx`}k93xfo>?%Ke z)L1?Ta}`rD{%yq;jaI5+zwM|60S_FlwuHz0*0W~8iBaBBHqz;787gBDUHvwygLEMKu+P&>V z5P$8~`JROmA$3N^X^5E_t=({P*@QK z3Xa6h{X|QoOmMB;niNfA*=Snn*s2Ono~5z-(T^%NBfO~6{-BID|J&+Y93d5yEU2(} z1WDaU%v)grWEJdDdn_=KdT3dFYCnPh$5RJvECM1|w?Ne^YrBW5dF`L5M!%Pgs@!v+iE4ZRfDZ;~-L3X-@Xcwm^=%N!85lyb_@& zh+i%bi)SFsO0|1?nMc1-u_x6G;3(4M2XBCsEuF2a_5CBDUU?H;M&r+QrzH?FaUjjr zaLNQ$Lcyh6+D+*9Iuj+Oy5TF6GzbMe+TH?JTk0%q`zE9=IBD_oQyd?%7ZpvHy)ylq zR_^5!8ZyS$(^KWSZzq3OSdwz?!sSujjzgS#a&(qg%S?T81~(z~P|MI;!#nx3d%-vy z_Mn7$XR?sax2vuWZg}{1@2Q+O%YN?33v_iz>VP-ZUqf#ezjMT<=KjfP{wHZKPty-3 zU!}zC{gG3+Nkk5>FM$(81o z0NrW7d`ok4s;yAOC7-=J2HCqml1%(rztE@bE>55IptF}uJFw*4?SS)RR;$q+Cb^)> zEy$rrv5VgKe50jj?(Fjk>yENbHxe>XjsPM1a>-It=r~xQ zIC~>xHOWW~I(yO8;l$a@xNkX(4KdO`91zR#Hd9ve#4-6n%%81N=kb15;mNS!;4=1* z_fo0ncoE#l34Xge?J?2vw43klFC&_3S?;@p9ttDx6Dg5lMy5j<+5AN8Hs|{-pSjZn zZ@mLX0MD~bKD~&Zots6>wX*sx^JINc1rcm(1k!u+)xe}BR(s>cZ~aQ<4()0j&Gt`3 z3OOliOa1W_@NA1b5}qP7K^J?gmKx#CGM=alQ{}JNQG?y~I5A&zaS|aEVAeuso#%F- zyLjs8lqQ8*iz2_f{R2AHG)phc+MF9I$sAJPg@N7DL9Lp;<(M5uMt5j|dAq~LV(13H z9*g8@k>Zs+3fPEmA0_sf?T?@`l1sLj>|O48;CkA&H`AQutF~(ZzdOvyOyTF#|t+n8>vtT9k99jf%#XBts!6CcH#6v zEffyNO;e-j$9+Zos!Q_BIQFpds@!gIZ1rljDeYNwe7ow*xJ?5$Uut@{ESKIl?vHNf6800+U@M}x zb_NFNgN`dJPkbFKJR9qT6orcd-Z`CYwS{-flq&HGH}%OIX3R{_&P1bTW@iV7SMYoT zo7gLSb8PYZDWTw>2FpLqn%%)_VGt$mm#wx-Gl$v%!jd{LXnj0=o{tD1j%+Uxv=SR_ zf|@lNlrp4D&zU3wM9zh@nYM0wEvJvOnfl(a1sU_F9}I=fhBN0IAxX^P6s8PzQ2K`6 z-DR(o(7B%(YW7rE-h#-|+o9^c={&UP(Cx^8SNAgwA3Pu>G+8}N&8UvBF)$5gTuImP zj!s!ZfIzC!9x5Q^K@eTMR7{t`?owbz;(nnVGvbAPx~WPgo$TuH(JnLr$NR?x+W#w8 zhQD?JF@;-Jg-;rdTkDd}X&}DfSZH;-L7X7(&bZoHb+=LfkpZf zL5K@4&K^l9v4a7dOH~^M_AGivR!U7+;uMfC25&AhHQtMJL|cn7l}@@yQAje=(UEvO zcIY5dgWhpFxKf|U+@a#pT!Cslx|u4DlQh%fL)8qnKpLB)NY@4ED%fRpW20FV)q7Pi zGiq3RdWEa*6-x8JKQcim_O;C5yqX>CaGsmU`_T_8Sk);6!j3xEms$ZOR+*-TwtG%U zPU+yPxl&D+*%Ev&`Vo$dCkbGMa(Uw)T65ZK2s%_4Lp>4m=83oh7@`-MR`3ZyneIR< zR~0WP7%cbMgh(~g-6}}hY!{4_yqj)?NF=WLGACkqR&~g9c`YXd^w)SaA~PS(<|DBC z;SEa<8RfN9(-hr_wzN+7EsdsSVHueVRKen(ZLi;v*j2Y06x=ZPT}x^j zdW}Je9>n=w46nFhywuh7Gg~pPg8;69O51QLy<3sXxuU{2n90Cf{g9cQbk$Z0jfr}m z>#i!`032=6OA0WOkMw7k-WqS5W#9MZ_eDHsWE=ubl7Jw$;K3`SCOF^BaEo?4F<<8Z z!lCkl{*z0IyjmXk45YwV!qr)ji7%2X{}D{LWtX`<1H3wDqk5DDWUw_FmFb}DDdO2* zC#CX~U}r`n-XGnO<-YEccWv-_#j=J)VpGJNs_H2LCTdQ0Ryg^?nF8YKr(1@-o=Jb6 zqKZ;t&6~^gwuX;IgmZ;A<@pY`Ok0%qyHRunCB>Non%XtOdxks#(J@(?xG;jXt!MS8R8vyhsXexyFCx12dalP?wXnw`sm$Q_xHXU&2R2esrGDeD%ocvZEOg=H_tjrHG) zK7x5E9<=mWnl$c4IO$P#Qlug9CC1a9*<+c_nEqM{WOXI?D+MwupyO}NF(glr<2asi zD9p1yQhNh6u>6ioEy;dC@p{h(?t}$C-tAov+=|Ys!bPmGvw3UyeP>=8O1XN9Ebi|U zJxL!n{QQlo!#LrvL9y7&eTIAeJFn9}FF@Bs|GU^)qg(D*kR3dbJH5H|L?`+7A%{L5 z0yEj;D4ng^mxK#)i5<*;FClUT8Q(61aofdo82Jahp{3a+?lLaX;*Fg7*UDArhzx}Y z3o^ZwQWqt6+m!HKwP{h{dM=zTIcJc!G^DK4oyD7?U%9Xf9VOERWS(45y5E)6J(PMa zabb9OHW)M8GkV^${_a|y&Cc0!>a`G;ag*jn>M7Ye)&`MazU71`a;1{=t`4EQ8KA2p7)YBbY+*A_GY`X z8DCu9S`lPm<4+@0>=3M+PiAGUgUYe=!ZF$?Lpm_aJGX*FDPJ9E`XyfF`cQ|TTR{bd1}a0c z*VbeJkQue*I#AS_^B$XOe@*DVDF0~_oTl4z8CqkW8yzALBcR=~p+Ja(k2*PUSsT}y zlQ=Xkk=XMlZp?Y zRV^6xSGIaS8$+F{x3L;i)cN)C#6#7RhWilD$rKZNU*>l+IF|It%5LR~yvM08F)0i5 z%-Kcs%fX-RzM|i`n99a`OtXaBu@^`4;J6B2YxLOTYifefwF1#>ocwOEkf0T`$$KK^ ztoY}Ry>mH$x&bVzWw(6ufld4cm23BO;bGR;dm`h~2P2VnDH8=S!MssJSF8a%sQ?hd zn8z9;y6;FI$LZ&>d3`3TgpRlgSW*$UaeUI$fTwIOvKKDMxA;agzJL5jBkr_C=T>Z? zT<^_le`bPl5x-1vXG!agG%U+dpEjnmO7F%>VtPQwD02lrohiHA!zb=5iXwV|V4S9d zRfTaar(3icn{x4jWiucFw^=0#h$|S~1X85T8Q&ArgU2QqNu!!nBN19j^rbEM1)(g)#+E4LqEeVfC|IvX2hfg7>q-28^$DcsO`$m zsR`zN{J4n)1RiJ2=i<}&uypvGa*rA-grCc@&h8CZ{@L6eVMWV&yV;l)h~fDTihz)U_p2`_en({reU5MpgAYu*exKV_q-8g_=6?rW zGRr+ZfAb&TlK(^Q04k~geo9&O=^1kM^}d{gi_}sqfAnC!%sbxP6un40>kqMk8D#zv z|1egrB3|_*nI1yMv5(jO5+>06agW})wDNSfSPBE*g)1zlm#_L@{C)#V1zgwb4NI0} z?+d4A_Mdbz)DO4|3^1h_kgvg>re3R@VNm)`n#Xi{0R$hQm2DcejWp6*bZe0>B$%CE zwOHE!Ms;dO@tzchPIoi%&k;sQ}O}CSCk$s02QF6OJ~oYvR{HQ>c!NO}Zczo+)eH@V{;W zc|*p^{<5EQYXE$Z#DpQ*Rf}ih3HVuJamo&d(pd*cS>(3BQgzxNLd@uVJ>=Kj8Gbsd2fZ#0jQ@mV{>Q6tq^AQPskam~Ryv z?)tuOZH>-ZY}Vrw{37Fn`_vrIs;&D5ZPsdK1M+2^bH!kz^)V@4oz{L{zKp+3woN-_ zohzz(1vk7OrjhBG?}zferQvB5-;@)fx&x%pz=k+|r7q|^Kijf?_&Tm-M#v&E4`^62 zD%qE8bwPAva26@M7R==oSU#%)Jzc0;cRLC1Xf!tuw=hgBOpG+0PUUYFaO){Sgl2@V zEC)oydYR<5)VYEf?0FUuRMb~Qtc{3aWAAafVq!KfQh3*~7nfP{H7hhg1oEcSHTA+7 zQ#yn@1!@}HmYDg5;qz|`8qXtVKeX7TzA7nMC_ny)DLrWy3Q!Y#QWReqCGBZ3QlJb% z?xZa}q-N)^8fA7dc%A|m(oN!1%En&*lILlmYu9=pI%IR{C>Ri`s_ZlF;xoXU?vim*?gyIo3OMBLK} zw_~_@BJ<2ubk_m&@j$mMO$%!|2KcGOuUGi8+` z@tlRO-``tM+>3m?*vx^KrnE-%NX1U#le2Pl>!c@x<^}gF*UXq0zoMX?X@p!l`f%f; zl+)J!s*^xk^EzL4>qdJ%y8=7BcV)dY^ zi?}ndjCVypzeouyw^n@DEud2h2#>3(^Ocbm&)5`?srS}rj({OISMcthp*MJ6xK8c( zm81ILx8f?_wnOqfGeXm{uj9oun3&b*==CkG`#XdA0kpLGQsahHj|MHR*=2!m@kjBj zFUt~d2n`3&+C|`G%bPFrg1cc9$bUpPTJ)i0xm_W zjCSnrj@#_h(zu1Te>F{jbSzg~pDEb!(hJwW*vn7`6{=8zYn3c}fa!xGR>ax(Xe~+o=-TguN zLx!A*uQe)BnEi@d4_`m#3AX5DiJJrN4CGdL?CI&0_c%!rf2+PNmU_Q5m#sOuzojZ49Yo63wR^n}#I#@cHn!4d%Au1^rNi z9TXd&ImOMU{na-r8Rv=I{*jmC@0j#HnDwSCGVAkAKO_q4uFTb-<_Bf&hpSL*r>g+i zUbRMaNoqRC)ERzE=7pc+5hG713)}|p>ZGE5(UfF{sh*>g zOh_ru9~Zj+M27xI^{Sz*q*W1x5P7<-`Cc#? zx?=|UNw1CD&27YR(HO}Q{K-bhz%Z{?mu7B7$~25PQq5HG{LW{e2-jD4X6CKmx55O+ zAU={AIJVZS&mxJ1&%P)yxIMsChBQ`G_IfN)RQB@HVb#`A$ypT)m!m5ptGf-9J#@*i zrlut|372%%Au$5BRf<1br7w6~1uRhdJ5OBX?xXB7zU#kR@wQISndy7bB)yhp9{A8` zRtm~fx0{~tYM-7@8)TdX`tTq+@E$NQ#C{H@$5(y)EH6nN z_J38@uBQ$0#Qy&TdWxZxA>}GPnrai z$9BXm#S-@s6z*~03GZ^;_?3@mwuCf;xc0*llF z=r*b(zfoybr7W$NO(e+P!JDK+s&0=Kz*a+E)#clL#2dtDZ39dhcfh7Ob))9h)M0uJ z`@<)~hrWe1dxMb4V*;nu-W|D{DgPnqoA?F0@73anl*fs7`l7>N{KO6mG~JXwV3>|| zkI2}NhE19oq*VX{@Q2*T$~{bw8~MX^-6R9Zx|aSD{cGtJ;|$93nE=6{V1AE7s(<0q zt``l-Zw?{}1=Y#k*)=Pvx4nUpVP4aT0qwJI?^j)S-YNVP3{#9tx-uEd;s$10ULZLa zy3)G^#5dzx*y`y+HzSq#1lw#_A{y(1+MxzGXWaYYR<_H@! zg&qQE=w@WJmX=-P>LkR|?Hm*FkgDmQJ*A8AZILXCe!ffx=6#mSiLxVPU9hyLPC~^g z!_jYVt>Lyhgu5_pohDuFxhCu5ijy0`1I({tT-*Mg)hCBOL3UhDt<+=Z-BlR{8J@$$mWcoa&N zf2EDA6Rn8Td%{WaVnWl76eym0&h;Ex6U_sU*E+Meo1b_S%&zvJ9+dF4|Ff&Wzg)CR z>SAl5?7Ytf_$y|~MmJLI6~~8x+OcOrA5ZSiod0*y|7kPXLuKjBt~Z;RqMS8XJ+aen zDCBZ*IW`(x8RYTH_JFDW-JCSefVZKuf1D}*?;rZ#$Dq&ayP;{Q5%3ZYV8;s8cP9SK@c0Syj;53c+9(&phzhMA>0F<+Km`nP}2VU zhxp^a0P&Jz)1oP7{Fa+bZ+N?nYn23r7oOe&mR*-RU=s8X2s1BFX{{;3T$GPBvBi?D zP%g2D>vK)5u8w|khr#}e_w-oYDl)ba-pRAweCJNj+pr&@M%Q;$vQTfSERAQclU~~Y z2+1a8ZVYWTlf<;CC8hyCLZTxxBB=fporTDUkFswu{RpAv`20L7H=VVk&eBL@n$HVX&M%tEsoO|6C|GDe7iJz;H>r0rjy8sC9 zX;r!q9DiH#M7PGqb#ge&B;B!a9B+#j1W3V4!fEr331CkSrR$iE1VjbQ`JZ&Z&*uN` z*?&J={QGtMJ`DOi{J<`&|3#fcMpE5w4!*3uTQHL7F5U97nN6`u+wzd_8`V0qsWJsJ z$J97VN4!g=kpJ|@nEn6ocy`JM+LkBjIcQ=3W`O_WNDm&j6LstCL5$-I>105<&aN>( zFF(L%WOg-ii$fFND`u=k6CL_XX==v!$mX$cs?2)oKt#>nMxpr(PA0(IOd`gWiJjA@ zG#mQ5?ST?3Ae+>*?bFsE%^Hg5+}y;h`fCWk%M?~|5>ZDJM+FwsvhN=#vKcz7VeMZNNoRV>ANvr#5)lCwqNdkyNlTa`$4e!l&|S!-2SXUfyY^B!$>rA zT2*TyU{Z%I$LP7}4N$XmD_4S6bjs zP*1$%p5t0&|N21!^BV>*Z)k-j07YQdI)}k?p*8E*qziO2DGmZmH!NS8T3mid$ni3@ zE8%GmzTtalyohy?<`tQc&glhV#f~!^T4simQETtv?>oyp8^Tn}n@v6qW9_x!GLCb^ zEPPWKfyHw;BU~R;REHgl1RC#T9q}(ezWJZK;r}^{;a~40jf|HWFn15_=eD62z}dt& zu!h4KlVNlG7>W!B1QSII)cGRwjCvG&Z#N^aADh?E(6p})DYP~(P$e4rchN&uVkc%S zgY{SrtJy*_o0aeJhS zku}BgwG!n%D7CaG@8%vL#b+REl&R%zqcbRRm4YG|M`Uv@ryCO{L|zWuT3$>rT57eb zjk(Ba)y#z#fb>ylERmRkrl4fsq&VT5UkSRvcxvJMRnV6q`L-CkMmb$0i)h*vWZE*x zVgn0VkF9CAXae+*>D_(!+9(0msXm920(Jzq^df;xp{pRsY(eWfzetToPfNWAC_LOp zc=#wouQ()6h%akH&<&HR+xSGbK->BN=>zk&XNs=hk+AgS^(m1_ zWNnbCCnjEZa!sQ6#wO(iVdj9j8<;fD-sfbT3Y_n`24izNSUU%$j1(zbOUb`cBM}O7 zoJ9mzXF!7!)3(Q*U8?Tn&J6FO#-{up8McB%lzt#pFA!BvY*WbdS8tud9g+nb@n(lczG*TgLTOz*MBGIc4%qT0cfbOpd< zx{DBt)?7AH(~%JkLo5a*Vs_jyX#oWJlfRYo^Y_}cj!-J|Dn8Gz5Y7}(G&VDs@7N9k z?MLM;-!^S?SI6}G3fynZ9IBAUrSS)r14Ob#biXWg-I>4~tvTqJq^(mS`+hvve|5aL zaI$IjjjBuU8`V=ZAbYPll%nLMc>2q3;CDsoiNAa*a-aUIJN)llJ99bT{jx+%c&9zr zAfVwv%2Mf?6Dz{!be?GsmwmF{mGI)hS~-kHFSZF6Kp!krb+Pmt73R6(;y_>9(ZF7I zYGxVJdt7ANuJT<7DmAgHNQS3M#jU^EnsZ{-x%ZQh&c|ne7#?d9lbXx^Ge1COrzX^L&L#!Qi*yqA5=U&sf`G zTNT~3kn&;h6MY#rw`Kw&A|f}Tmd(r;#Pp3yF`wBzjW@u{Fc#}6n!II4L6sMooT!B6 zN7Y*tMm9pMG|rVrmZ)dK_LBO6AbLgpAzLOCwOJ37mgyYH|2}jk!TALKo zPUMZ{k4+@YfH$`L=7X}02=tV#>_L-6M}DJL8ZfLP!=&wH(7cG#xVtQ0ks$8@UvcmW zj|9!_|M(35TbH2!82v|xzTLVmT%dNSJ=I`Q(2geJ_*aqxx=Qa$17>yRghs_6?o?*D z({Ysky}M+tnmc|cq&XxbcVoLGIszFGqk3}sOP7ja$>eSxb-YWZ9XXVg*AVxGo~^&j zYDpuutarcMq5L*FP)~VU(QshuWvegAEQerRf*wWKnTZR6q60YgfVLrQ)%S54wX{_a z2#Zz1kHaq&B0iA!wFSc$O$w$tQ7V?fj0Lk4j^J0O@{tJ?3BUbN4h&GO?pQLhLQv~4 z(kNxsJ<~;C}(X9_&`+c>WHmhC8FpX72kW& z;crxEpRw_k(7;`K1%8Jr!CAK(dUS~`3w{Lv!H<)x#-AUq-h+R@iQhu6p!=p(3E}8Y zB$mOBFuHo^Pvuo5*+Pa7p(ZA|K($FD>s~c-Vh%vFbTZKnmU2xnuSO zgwhM|V~;>ULdTSdSPQ2t8{%@;ANj-SHpXmRYe;_S_Bk;B7N=uQ&}-)yGSl&EB{nnR z74Ry~yMSE4o;-A8t*QAoH=M5T4I;b=uh~8Wx84UaM+_VR{+iuYrFD}*5f%4=Lkh{7 zGlgXBvazb_4vZAEQmRTcsW)2V$5rgTg>SFNafnP7ujW@{;f8HGIk&PE-0|c7S}|6^ z?dDvtZO1$$vUbpX7{D5?mepM9wJ;HoGARr3pZ)~f0dicrxu>I(YCG_Cgi;KNN@snNz~D5iL71@Nlk`X z;=6n%Mi}T7WqPY^({>tit{|khXD*Ml96g`Ro`b|L7emWD&(-U75JUzalUyjkHGk=Q zt^)r>;`5ZW=h_O(g!u#9a|2pcmfk!uH#%N2IEe}Er-=Q`^}J&ctNL1&d(fA8B*aj_ z_Swa7D_?6DB4SQ~wWaDlFh5Wlw5&l0!k}khel`#yFe!#jC%@)FPuOcXf6N3ly96wt zUqJyMl(bpw>X148gDbC17GC6RD6)jv;=&T7S+sNoTWuX=oes)X7M+b3n#e{=<5h14 zGT~rJJBzwORNk(2@Fw7h9q3c);TVc%v#iaZ70OLR1P$*RJCGul`1f#?`kS38&-`weIglTJ=9NzVjT-p^@ zN>AbCtc54%yTa?c3JtJv3k){Cpgd*d3CFPgei8R<1Y1d9s2KF|)}lyS;3DctEsd!- z;(TY0n1^_zy)XpFPP>rx)vX6R>_SdC^~Lt%tBm~AXQ0I?gK6y)MeZ4_3;fwB6SG5j;yvIu{<@ zUlMKE)g0=Q@9|Iq@dVqzu-;&Vkrt|Gxsri?eynE)AA^*Z?9G4oY`>YSu_~QIWIVE; zUy{j6gMAem=n)d!L~%~}imo0RoHbHqBnlaZ_WZcso?|`3& z;P1xu4(7r2CE@xMu?rdW?|Zw0r-IGi=}lp*`W@6jo2Rv)QmsE0_C+jlQN@k=YQv>x z-zQjBtM%=VU}h_vO4axaj@J5#Iq&4cLzx(tKHm_(8DZu=g5|ac=Jd5SN`t^8JZG-o zU5-$Y_Pz^Uz&EPpp`f_%_f!YFPk(&o{>Aak&&BpNF1OPI(ZKoaZ&aV4o!|8*DmguQ zsVl)-sfmXs%T;J^P`+pmiPYPK(h27{gj;k^1EnZk$wlV zcR_(e-wHD;8s%P2D(hNN(cMa1Cp521OBz9ojd-3iZn@3$EPrkte?dWRG)v5F#-Rrn4=LW*$)s?aB~nwf4}PmGN;1#N$$x<7dNE0zn|-_lVsiFh|r zZ>*O~I7cmRvlt?4$f+fEtlzk=XZfWU#K-skZd8GMUqL_ZLdcc1iEU*#%kF-vkBuqA zPD4|*seP9mW0#+N@ll-lxySg(z*jAUU{jJvW2Y6!4Ru;d=Pp|1eW`QwjnUFomk)Qn zBMBBKI&F*D1?(}cW3JY&7PbrP->9C$L>l`7PFjH-g}VN>b-wNb75M|nOuty)(%Uqy zjnTSt;^Y^YOY@l8Gf>;yJo9nY<;MXWrtX#OiJ4}cr=`=guz?DSzj3sc%J)3^+^I6! zItJCLZvL%5{VyE;|FTrFDSvTty!+tsV&J9;n-sda;)FXG`fn38RThv=+<%75)6;&2x(P{iMQ4n zSri_-oPT2RD_(J@;dP~p-TDsj2JHD^Xcr)4K3Pln9mtkKwk$Hppe0EM!-m7b*9gD6;&SQTrdFn)p3G+NF1S}H!&&Q}8nB1Kd&lr??Qush#o*jS5pl}h)>^Sa)T-VA-!!9^_B zG%PiX^%D7$3Uo@H|JW~uZnlh;SUf$F%UeoeT7dFAK&9k->TXxMwnh2;aW1_ z{7+l4k81FmS2Tr#tpuocjJ z8>XHZaEas-p)L2M-O3AVuQhAZXA+a?D<4ji>F(o_;lY)>5^n|1bdBWMY{*x!NXcyp zLq02>r})OB0HiJll74s##O{QfM>~wbK6>iKRvh+?$~4D3BHW#W&e7%SS+MXatA0vd ztmx(Yv+wi8)BGe0m43n5B%~o*TLl6?Z--NG!mO)C@ZvC`Xplu7TCv#QJH(R#xu*qwb`b-@7ZUA?$`k9}O{kG^N`c$tAfu9@a_SI8d} ztY^Bgkks*@oaFA%V)7<4__}>yfOn5`VNO%aS zZ)5|X6Q4)%ewczR=B+mB;&ee!{LY(F*JvNyaLgA z;Rs`Rti2;n(FU|=S&UWfT1dPozxcRn233-<g?62IrrwR2_I#^4i$ezs>;MFwD&?eLJzC-pt4f>UI8MD2lC!w zHf0;0(rmtmc8MH8(WQ}@#C(7mLfvKIQRT+Au#uJe91c{d2KWHY=ESgWx`cusCPy^e z;M|vz}9JYxg&$;YNcRnyY4#g;?n$=d-Jr>%2KcmGLMk5H95 zP-cgOC}WZ;N|*e~L{`CAjWz5QD#aKvqdcbC_$6(xt4CDVJe6hoc>~lj;D%rfbC}6a z$ddD>!bq&QK@q@SH7BUhm$t(dP0LmeC^6y%cTL%S&oJ|!Wf*Aa0ycTPqGx9wL&tvX z#L8)dzmAzEue=I=)aHg$UtDo3oYpy%0#R?XyKs@^?P|u6+O+l~wfTgKV^06uDY|V#!-5+6Kl89hSE; zoXtW?KIsvY6xP4_vEaD|e~AaF>8+q#_yS|UK$aTk+A6&yX!qg%94y`K9P6vQn-OhO z8y%#8%1AfzvT4K!cG8B8j(Lt3EJ1Oo+!Hjqhn*jxZE7^MTpm@K*ssP;?@SfBGrXBR zEsW}qt4iEe8zo-@Jx__xIWm=e5FixZx+OXq*=m4<_$ciK15g<#Us^6B5RB(&)m&%; zxV7%Ah@Hd~7ffMn^mn|wp;{mdK|N~=JfJ7@RTFtoI?8rXYCtt2y^FIPq7~RddaivL9R*W2kkqpta@u!3wW-oQXo+5yXJZS! z-p~56We({Iq!nyQ3hu3-aF6DM(y&X`)3#8%^Rcq;p8tARC9hxKW2^+5_`yvlKgWd{ zcikBbY!;{G(#g=ZK#%(Cde-FRZcjNa-T*QW4-~_Anu1YL*l$!R*369|<%Q?inAe`C zC;|fM^sQqA9 zM}RH*ZuTav!8o@W*btmMUW0G)$krR(cEFiH_R5?c;~)Kn5FQ`lo3vk|f+SFEaff*> zYX&nCDUvHRvJs8bc>seT5vms4nsMAoRBgD;#U8;*U%w2Nz&q2m@tQ|(}Mw7g|f&c&5 zd+)fW(zRU}$5BT`9Yh4FN>xG`kYYf<89E3^NvHuK6bVg2@6L>c7BFByy3&&Xfk1!| z0;AHal+Z$v-a_cTcrtsB%$%Hyl?WkD(H8g#$^U>j9p3h6&9nb6-#BkB!t(w-or;mp2(%x~$vr&Srd+(ij zPyVw{(u-C(Q}vS)R$#FRYxcGR^+8Ar1yVZz_w}``f4n=kt%2Pxe7&1GR+){C9s_x? z$h$_9jUs8ZipcTxT6#=JtA7!n;?cb5*>|Q_Hfa1LMe&Ks;N|_SQv4|3MaO5RDxDvH zD!Mg4p#G&oO(%zH(@TsLPjA%8Q&z@3#eY)S>2sBNdA4kWgC1-jX2V8!(h^p!l>H97 zO_n}^uQKwlQf zZ2h;g+M{o&p--1jW2>!>byu6nDT)2bgyNf!MLFy$jj0cDQC`}lD1kgEGoNf zoynVb`A&Ees2FKSYYei`ee!}&mTq>Vkl7f6wH`{H+g1<+nTkbFN)5v?20vOK*tplP z4DJ8p%=%gE*Xhvw|I?`@`gg13E@oP+R)|N@glgWcwre({*Aa;T^Ji`fk3G*=5^TaM z?|Cvvg-Z8V*f64b?zhISIc;3d{@rGzh3wg%s{hQC$-uQcu~7Oe8T0bFj;T*fd%1tM zZ~WI@I}x|fqcX+~uIyEL+BSo0G2qUK<-VLFC%G_;-3L+0!@kH>ky z8?cFo;SUZGcLIu2zxw!iP_M8v;`!23lg0Tw{d7G>qV?UFle&LV@kH#T$|p&@jrgyO z(fxN4?B9;91lj5)T+w^_u#z|5 zBk`I;_6D94nA=MJLcJuypk5*{sFyY~GY{?sJo&8~Hinr;Y5%I2nBNO4oehz0*T6% z<)JR3+sS1Z>t$GI0^{F~wYP2@QMyoVLd#Bpax_p1Dhk9Mv7nazs#AU%yDZkz^V}5Q z#hU%iY3INIYLHmNOV^%%A1-p}%<$qx2E784=oA0lnqPeS1sLJ7kvUexr${_dG~ z@AIb%O55U0Q}Rj!>v{m6yhd0PG>KN2G=VNZ8}Aq|NLy4%{uAlQ(Z=CZ_b;>wf~N0- z(xVPrXsA5tixCH_f?T!B-!$?A(d;6knQrCHWpw1YvZT(!i`guxe{3iMX97^+MIdYZ#&5m$Kj&FGDdSPnbFaBxtoB>_r?)K&sZryBLrreC z0UM7SSp$Vd;RIg1 z1+m+EagzKJ-4eY)s!<~E^@I}DbUAzlQp6*uf~?x-se*``4`pk=g2>qF1oenYEg zT1$lhF`{L*-rlX`NJL=hs~MXm!TpH0EJX_0tuq8GtLq0PX%FmQBF7ON%^!N9TI%DpxsUd6*86z@>~;Xd6_t}{A91T!9RzEP z++txb*1hh$yQNZ0j8}FH7$cv6mxV665UYByIITaC7mywSWQ1P40AgNMI^{_v)wgtK z2>~ub&30TYk`?gqI;5-(1gDicg)I8>g~lpstUf;^?J8t&9uQRs#x)wO9_z+ z!UZM~-+-L7Tc({pWfIv8YbIAhn#2B4A|nvo#@cXrWmZllODUGJ^4-+JG=6Pbs$3{0 zuy;WhUIj{ufp5@|TRF%$j3Nrcn#JfVYy79tEAx(%N#9pC%B6^IvENH@)Toj`30d3E zZtI(~CRvk+)S?Aa(f03yHmrB)o2Els`D}qzrOUS&Q6U$-jPVB|-2n|`@d*yh?hJlb zRpuor2W5tfPl{331Y{wa=z9RpU(rq$(C-d~v}r+7v2hwz)YN@;k)-Y|UC!3C{Nx3^ z>|BF;Kb--OM)g*g82K`Cs+GySEXck09$Jhp{cQ+uKdmyCiil0&5n4e1aNkMdhpDYp zLi$EfmZ{D*Fr>#4kD-qsIrGEALnr+Wb4&EHK2j1LHK<-Ux5G^axKdgn9>q_kXul();+wa$}r09-IKxvb616e|x#YPdR<$)Oa`tv}3 zZKyWT5zI&<<_8*2UK;0p70<#e<>~Hrr)1O9laP?>l7%xr*zCe-uFJNCc4)H%Y^zzj zXA8^5o=?m7K1?=4=%w@k*>hK>U>4?ST;&TRaqF_}V{ScYkYb1a?%MYG9Zv?iU%l0l zh~dI(r}xl#Zvs4kBRc^xTcf5So5oz+6f^A_Np_za1g6jja?6fxWP(`b+aU8iUE>`d zS@^qBJ-Ze?9~=Q4^LrNql3tZHBW+>j@^av&SQjG5(5j!G6eE7)L7jaZ%7R{oiinj_476k9sz-FJr&!sxiF1ujzFL)AMpX zG^wdS*r1^>G&pLlRU9BqL5Y(i8(ZSkW{BJ~z;;NYgC-*=1rwB(H|GrDGiHgz4ZL1( z|A})&V0a1<0q}(ZP^R|F{2sk2BL3k$!y4ln=#)1No?pFUAZo%CmFH&FcNm5nM!4d$ zr78fsZAon|$xhj^sn=)Ms?jxnYGG#3*!zdlopi+grAVTtPi9o^e&6*It4m*Axxc+b z{_=~(0ykO?o$(5th|325eqebOti7kXZP0W^*qS&KNCT70;M@Q& zPWfEYo1=h0Ei zWS(pRoBr|P?%0ClzlIH-JUoo{o+12%{u3JrFUTV`thOX3wXYcT`$NAQE?NrLW4E`Y zdXoG8RQzA1Hz;^nyfgXzp<`=DtY}4t%Gf}ozKfY?+Of`azc|3XW(vA%#kF6z(2`;b zAzh-P#HM^w)6#zP>b0RG9ybTIA&``}uxP{xfP-ne;MczWxz_@47AvSZJtw!8qbLKk z4?<#3J#}%kBe1aqAQ5^Ld9^VIy?+1TiZe2y?)T&Awkaa6wh80}d|e5FmQd}Jt>$7K zJ~IAX*nI@W5{|}iCf>UblB!bI1-?(ao$qc&bdPQ$E9F9bS`rJu#my<_eu!b@yW?V) zotyG0YH*J#i3NYixbW**q$R$$d~nR1AUp>LXF9wds)ri+N~^hcXb=q<3%q$n((v)u z6Idyoj>j%q3(9r61B2;9Ws`3jK7`hZd$W*|g|(uQXb}N&4`?52g~`unte2@u+uXHE zbji9=5^B0hQ509`>o4q(2eg_u7xQo#z+jf&!G&AUqo5ypPm7i^op`|XGX z{pMr>CFfaZDQh-N_6G7$E7rrBX7FNCwgitEsw~Y5j`-!zMt0WVuS09h11x-qIW~9v zZt!eGSnTNM#vooMcLrt&LyF|jic4=r|(T-GRA}@53ev{ zr_Nqh2n&8)yTPFF{-kvEuknKB!>LSsCcpe;8~Fe7$BBgfn;z|&PdJAZI;KirW(~b& zSoQtSQSO1C^JyYsvXhd0Z8{l{7SoT+i&j{PFnJPw*5ajc&M#Phgovgq6y_ow4dQb#OX1g9D5bWB3 ztWZuS3Xs;so!}oBTYAPA>fN;0U?PcGFn69RXJsWGS z#EmV5gL|%j-aB6lkT=bCU)j{&kUK^Z;~r5N*X(1@3cSbU$@%0@pS!Vn5z(_(#rs0> z=Z2X~s(b7WBOtY6A@G)JSjmeQ-)YTz-qGHuULa*By9l|kx72dVRY!Yly~TXh1v0GC z09RjbgOdALBZvAqrw%yi2Brdhn>pdUn|n^P@YIL(KHU=+)7oWKrq(T-X>i7?>wAZY z+P&wPvyCdWA0!+gRg?OFB1U-EZQ8PjrlMo~XC@mlRJOrBlpbFfIkuX9$ueVd$^C7X z?v{5LQR>@w4@aAm-xVn98r7$l7{)eh z>`ae{wGCtlK0x9OKx0!psbzW%Ie}$}~&fxgO zT_Xw-?v>M3E zED~FV*+kE;7TkUc5mSjwZ{pF-mc3eDKgn6z4leXxq3NOQOS#OIdLcc9M&#Gl;kDt* z-R5}SroM@XrLQYu;)yaTH^4PI=OcG#5>i?9Bv#=3vXQ7f4N@8igeDnsM>-ol{`rDz zvs-g)p?H#;u1|N}Bzb8<&9Rw+_Y24HHiiHYfdzN+GdTN0+#5?^0dF*v zWg^wJ(x>f|X!@o~Ty0Yf;KmU@|GsPQyx&#^6l_|1n87d>&pArco?T$?e+!byAG;N(Nrm_!;>m*(2MaM6T8= zQKe>NSa^6uU-Id=Pe->^tEj7Ds5nbkw`5&Enq^Q5r>InQkJ19;OD~gO^u`&)mh61A zhA^|6;}lf~uYux^e=ucFQ$}F=d=;u3%-A?*<^3r&(;#dw=@RFMI}#}Mnx@8@tz@WY zj8E{ZVo+6dg;@N@bW43qub1Vy#;%P56U`bkN>fxzzo_dE)?4bcq7I$`Nm8ATNzHan z8SMJ!CDQA6Z30oSPGsRT2>Ssv6f73iDiUDT>x`Bxnbh^}wRe;)_GNXE<5(Oixe`VX zxT?jyB|Fzoj0M4!nuq1e~fcFe=#hEaNwc6IJ)o0F2?J%cHY=|dVn$0=kPDS|@n4|cUwX#u|d8=u^ z+ixQL;Fvs#ru@kKiukk~QwNaY3lGL7nlm2(4W)Ll@ATi^mqZH@%4+sFYq=-r!jVm@BHt6}pjc;F^pDJG2(pT?WkS!K4Y!%ak>)M8=gkFAk zr70uFQ2TyZ$>R5O0EJo;=;H_4`D<&Crok3VwFK`tCuL1RSnZQuQw+Z>i|;Zfe(lpE zN4xiCB#1~N7rzAtGp!Z_`bi5!<)Xgv=8WFm5_r)zqK$ zdPc09wuJ!(P}o3n3Vxsz@o;fKeeh^W3%IenTR+F0gP(wMwCF`$Er6S)UlqIW&Ao<= zE5q|EmAKbC?gPrT?q=|35$Iydxnb^(6zA}+>V-`P!%nfnmXg#?A!RI2M8wg@1t zx7g?J*yc@<5u}f!4#UB&&jC`?;?m{x+c9W=I&)3xidy-YZN8;>h++{Ru!~IcdFE1a8GLg{$-uq&m|yf z4sIV#u(-fAfcro}Y@EUN?eu=E)6@uWAxsn}fI^c?5lM%d5$H_OamN-DQbPL{Pvyp* zQC!cY&ea*P+G63Hujc!DQy?d%uV}=j#4-NakfW9Q0kmY%#G-Vy*%!%3bJ)q(& z_%r9*nU5;2NY3vUG?-_3+*0KW;tOwfSo3`ov*%6{;6r`A!L{xusH7JY5{#gp`BJf~+Xp!dYQ2 zIDO74d|+#Q~)Sv`9;m!32W zC*$(o&|s1Mie4b;GG%;aLvjpo`R7Jz_KKMjG_zu*@Tk#?AH4vr=&i4lKl6Au_oq1 zw9wFJxWK&IseSwy3}(A`V`|4Hx72)h{Tk4+FSx%ok+SVhKzs= zW6oyZ-yAhS4US8B+GVg7Xc;(g+Yr9WJe*e`b1z|HJ#l z?%n&26OTsEJ8beS-G~hpN}B$$4=oMyX7+{%w{n>lk~WG)(JkMGLU z`?o56GT_jgj-?MqNk=m{fcL0+WHTS#B7Yw6>*2R=8J=;;5YNjhWzRsSGa_Olh%)W$ z4b8JOx8S07y~4*Pn|F))iNS^8K0g)$rQr z_Q`@SoRV1YqT_+I)~0q2xTN|s6Bp>RoLg&oORvdbV5i3UpLP(6j%mrBTKgac_sIIT zXDLR9n*!Rv48ZWLJ5nQk-qarERx-l)#(Zw7Qy9JldNiyojNk!z2^kpo;keCpC}mqZ z{+VS6wWMg|OCS!WlEl&u&&+g>B(LNC*jZes9`$jqGU5dbVf?h9i#*0ovigjU=x2nd z{yq>N{^p76fRJkjDo~dheVKjvjUwbY1L8BQz^rLOr}567e#d|1G*qNB=}_5t!Eq8V3q-r0P=2oaC)HRjU? z=GgCkBd*iXDt4I><6kZV&phJBiemi+38@*~cSI&f_K=VYxkS5<5z@FHSM1r=wRsgL zOp9kVKjw*If!R>Qj+yCcYe<(K>#esdNx4o*zOnZ5iiTy<+}-4>k63UpDK;KD%Vlkq zGY%sy`Etztj0Td3$ zQeu($BdC@c1|p`ZpO>tmAEd`ldiJCYSe5OfLW4wrXd_!V&(Y41W(R|pDyg(7&PzWQ zF2L~k_~ah0N`a_fD{IC8G>&YzE0b64Jtc^Pg@h33bB;+f(zTYYx>?Z<>bF=61W0c* zqN8B(<$F)(+uXN0VT&Bw6L}vRgYX#LZr8@X*%@kfjQko#mJRs2(Ut6`E(WybaUSk> z1CPq$bzeQNW*4!?*>{(p0e+O!>K8z^d7&&eOyCl&wMK4>*bjP&2KT3B_HXGN=<9VW zPu;dm*3_S8xvcIryctTT`YbMjK-L5hh{DD3L(mO^vFEkZ1`xCtYj&ZE;Fi)$tQW|- zZwSg=qSfmK9R>53SX8%<$U)lANH$LQ#7(3}WGqCJC;aYfZ-qq1H`l0U%I}!TSgn>>e^`E;6X# zalf9GOA3^YCwv6f-lz!}-BPw>skwz}2MrpwA(y}y_~s@*i;v;De!al8hBmr>;7-Rx zE;gO$a6OM_uz->WP`D-()aQ)BtAPb|Vl?XL6{QUNDDZZBeJa_$?^4N+4ZXNL;h&;r zGQ@>@s0jq^6fQ$TDjl)}=g$PB7J2~KY)YM2pISJTeVpjyj#_+YD{hL~jfyF;R&&yb zy0R##%Lx~)a0IeCm{1*zbM-mqn;#E~Saz7nqC4RG*l7mhngqCe_H}fc+9sKG&S{wvdn3PM4CwPXl(pTcNr@QQfBVg3tiL&?UPpzd&HS{u+NK(04|>Qi9XD zUEZ#2Ly8^)TPhnE6Hju46x1+IU}=kOxZwM644ssT+eoXeWqI@1Oz)O(5>BuClMO4j zkSjr`tm9exv{`(P7fN7y`(~ZBiGH@)_uez2eu+kNsp&7?%AqUrvs-6{3LUl=!OwU& zp%QIK`M1xiqvszYsQY=sQ~-+25LV?kcmYW;yO;y${HSUTk6-B8-N@s{mK z0jy`RAhrkV==TuG7$Sn8kBBs$oV1rxDBNcen1uFeNSnBZ$IBLZp)Tv&>pQuP8T#1V zNP{UWJ0)e8%HRBStE;@SAYGMRhImFNRtKDglh+x224oL-y_E?dR&{}LX3y4%rPW+- z&%sy1{F9)$ROXb@sX(e90CX7Bf3Ge<4nVY`+rveD8p3BVO}g*N;!1*f5<+;ej-Tft z>kQKPO@)9EzN5lty+%&raBGPUV)g1|{c!&xm%OFqdFiXtY?)@Z2}fW`8G?Z-%i!6_w~k~w!}6kb^u%5?9tkkWYH?fps{LGV z_zU*u8xJ}LZ)g;+*r2>Sap>yKNZ%Z4+*O#;5fB(|X%1YIST- zfkoopR@|j6&foY$P6}-4_N82Vo4*M2ByMkL=y2}|I@2@EQ}C1WJ82f$do?nuR=~9@ zfayo(Iqt%p;5Pl|kJ3{JG)8hJc8`ti!6k+Aw`4Gv?3C-r`*m?Z4iaI>WQ2``ZMF_iEoxez{(En%T0PO zW40;K8N<+n7xD%>hMUjkMqe^e%{okMIld1k149UOQ#;OH0IW2>~MYXZOLj$q3iAy7h`+<0lnS~t>T{tow6+k z>gve>!_z}_)E>&~6@u2CyM56(566%XJNSSZC7L;J1cJAT52iXX}5F@y>e1r&!IX2ZjvY|9ej6d z$|uib&o4>uI7f&%V18Hx?-_f*>|Rp`m#n9X@;L9IHnVLO3imENZ3&61Y`yg%bbhtC zD!3+wbTJ#trE*TAA7sgr*VqZ^DfL);*&`L8KrC>$i@23ymsV+RcQ$D>*c}EeGWeLE z|HkK!)AdXFe;x+KbfOOS<<9@u??_7MW+~t8llnR>JifxyVtdyhb{!n@)BgRejFJ-3Z;GbBOBZR}#VWrW z&SkA*B)iBu4M>)?0Qb2r|NFUr_sjq7`J!&V-4nZ;mNE9k@7B{*WtDdGEgqTTfdlC9 zp0^7qDBelo8;g3AokV+nyQ=d0nku#fng+}9>_?Gd2VY10{;9;9q7q@yr@T@?*Jrwf zdH5e&Y5)1VuI1rPZ_Ay361Z0Hj)hM+<=HqeVply>dB^h7HImKaf&{|G#5BTtT2g5p zumebdz=8j##8N>6N-OAI_r?|{5AaEYoy%vY`Z-W!L5O8gf)r;4?T35E3f&d?N%6a8 z<^tCeEedpCV}v_0MN~9cLzm{7d|%>K+apCIV84upzLiV}KYiP1P$-*020gG=H`dn} ztWgEst=&0AL%wq`UiNSIM1*p7Zzm@%2+U%pZ4fI}Jt_toy(b?Yi~2+1I{re1slvV? zbe6=7O1iqDECVJM1r{AFdrXQ1!M%Bdf;cMjP8s`kNy%R)IR(`LFWs`~iy0hUy{Ot^ zx|uz9*BYY915uQWc>pOTPjJ6@gf4TqBvC{fKPWO6JdP@G?$bXOIzo+ZJ*W`c8ji={*g(IZHIQ_m`R@IF&J+z2}und#vdV*^9h ziKKo0vgzUFb8GUCS2vP>J|Sj)U?dXK2O|r+upSCn?DTJF<-TT$>aL1QDCxPAx+SNd z$oC4(Hne>3Xv$8hmS!Tv95%52ndua}*~)~0*Kj&$@%!2%E|(xS-$Uk^1irnWAO1;` z?u}U{lr9%u)d+mhXdVaur71C~Wjhmt9a#PmJu31$h;>HZ{rXq7Ddh*{lKR`RE)qLi zpPAxu3onjK5!WBDnl`Gm1Q7-hOAceaV{1N#555!(1y76a%M`Qm+#r(V!~c+%LxRT`!!Y^q=lI%eko|5h^zq~ z84v$k;D240USsE3`*s1M&?YP*FRUVIY-GErXP38QVWe%xUP6^L+E0|FG5`Tdk|Dar zvJ`n}y4MI7r_J#!_9-%77!oh<;g}UzXVMTGM>t<8QzXJ($mUM8}<-j1Eh?y~KMrl<^7vzac;~mJiKX=ZS%L z_rI*f<0a|uXZm!tL8T*UD`sIO{Z8X%ozh(K0eC;`ox+F{QsyAZL8;g7%C-`?f?mkv{c6p$vV zNBXsxyUyY*$v=^u;c^o1WX-d|9Zm60va9@}01nEsQr%nL5lhc_$s~J^i3#kpMU491Zl3B3xRIPb zJ&A<69V z7F@#Rav7^GtGyk$WvMHr`ARU=M_D5;fE)dFr@e5Z#jboa&)(L}c?v}jEhFyQ=Q+1K z6sM88?~XnrE!#p-OHkSZ!Q~U>-*Z3D8&7lNiz_uJtZm!480%S^W=+}0F`$===nx7I zKVHy_2;v`eL$RD|$lFq05D$9MThK8*SD#AEyEQ&HJr5vK?aoYD%xBw`uoNb96}SwH zd}g``&iho-Ds?psC`Xvv>=V_qwY;AlCu|W6pXTB$9nQWxS2r>i%?Pz-csmbHJ!zQu zbd>8}@-tZRfvog{nas4;<-{o6Vy;VeSkU4by>4%bIDP%l*c^CRs_S!*n#MfS36m#G zUz?=wxg2!Zj76jPv$uO}X5dE$j^LE6MLzHMCb51sReaK=2U=%;C*oC-v-uUrn3BfW zB{s$W*_`~>UBA|emsgTV`J_x{fb_O5DZK``jm_uS)w3T~lvU2(XST4^wOuJ*`Z$UH zpqJuDgxX1|3_SOuF_7khz3Ipv@|M%4qi`x>2Xe(LhiJSv2>Q&lBwPGP{ZA{t8{1*2 zOTY2>@H0~ohU$zirdemxEQ{bB4SByrmo@Lze2vPjgATjtPi*EsnGg#L!o`w@#6I+( z6~9_f;smy?YB~_o`bX9MxxV>h#eXUPpE}#V*1)!#_f&EL&-q6MP+8z>A2WB%Wk^KM zYOD;h6wL+KJA{LE-qlK&wPIFPp1om?#_RW77z*!0z#2; zGc)S2%uF9%vOZPFQ`PzuufEu)8)S`FNd>AB*7k6dqQ$Q41kS@fd5uxG;g~^Rld+IQ zJB3Cb?9p>N z)9G&nHR+V9!_6>G(=3?#_Xn8+p z7gROWuf&HJrIGlH7RT=Duu%B^$w99bWX7Mkn!ojRtTR zdYQ$^l7(BMcDS4Ft98t=5;l)`8BBoZ#^P>q#zLvlgwkYmm1qcUoj%6CL*&CO1>(^L z;!bDZNP!n@>9dXw3j0QlHK*G)z_M(Hj&X86e*JzTL0F#!z@B1^e~768mwTV`Xc89L zur*PZMDm83_Lv|n74V9ZUS?!~u^$8WH-9P7?WhL#zRUua?14=Ui@H`uCFX2*Yg zQhdo~ze^^BPe{D#y-GD^N3RS544~PrY|<<`n^03HAZNcQEvgs0!kfFQszKsN5~NfL zH7dL}(RGe{k!enm*COtg&r)%TA)lGPw*ho{G2}$v)oz9zS6(twBe@D!0S#?B7%j7I zq{%t-RNcMbCuOKB+fp)hUHhR{ztehFdU$&p9b}y!PS(i}TJSunN3Ci(o7SND%3J$( z37vFq02(NR1ewKv7NE!$bd@V#dlCJP|*=XPutYrUBVW5k1Up<`+7OB?2>9!HkW!|d2Ks+ z0SXS0zcftInqp*mT5E=i#{RWs5fg#puhUd@)Kk-XgZA}Z0ji<`HhcbOC93w~I zx-F4-k4-4<=!50o=x)06bJnd@c2%dc231V1#jCQ>4LwTgl8I*CJd8GVc=Oql6B&=W z%t!hTBt8ta2BoQL^F_63)>=w}13xH#W-6qaip;?|&&JN@>}TxX*yKGs7F6$|-VUHOSE58gcyQO+pcP}E~+S6h@x9eoR+w-a8XDr@eVeX*5bYx ztNBSdu0}#|ClASnr}_o0>_W%F$cd41HsCtzq+Z@8h)`6E?u!rFUKR@+RT<&kE8_EZ zHiwHt=qoClIOn-~Sg0`UZmLr0$I1~v9&3`T!i=-HJx_0Sc+*=1)WD~;W=#^j?~{Bn zqsKo@Br1yQX?@R!$;^eA91bpKy+b`1{|!Ow}CH3gn}fwJgti*c=P5Aq9yV-y`WCn_&t%AQL(+q$c}b6sduo)~VS z#`Nrclg5oo@<6WPFHi)X7-*~JoZ)@7zK0Jkh1T8`eHcv0t2~wOsSpTb)r<9R);z1v zj@Pz|7yzEX%1t7sDv(nMXZx3Bmw!lt*q-_gFCTTm?sh zz#NhzhUO%#u2~!EW1>%v#s1Pi`}CLHn8vRO!WLUzB3=X(-BEPrn$R7GI4u`l82Jvr zhLRnONHXynrGs%YQKcp?_mQx3fpH1oJeN_F1Os1%PcT}u;7%(Wh|Nfr>etF=-AXq! ztqG^>eRm<$|NbS^!%s66Bwbc7aosBiON#5Gm1Tqr16*-&{-`*uQguk|k5DzJfSq7O z7Xxn3jp*84(-?VKJE3vRA=;Y1?aDRlyTV44fC-wvRfl>K8xG7*rt%a0^a*Olp{D>n zFicYJV*Hg794sMbwH$v~*t9pkWYje(*Jnc@@>#jQS=k}X5I#1LF&2sqL#Wbbwd+B%ClMjCP&fku*SnZtI)!f$m=i+}hxLV!yH}WTE_QLk1Mp7oq!{qZfEf?pL z@RtX&EP3vhj>U;6fzUGR^24=m6*j&Y(&mB4=o_-!)~hk^#2;Q{-_Y7{zbuTQ4Sg%i z*2;js`5ESej+^plOCxmqufhMm0iKDhaaPth+!dXGd=l*2O4r|EBe zuV$_=+w@%y{8@!hlOZ>n?K@XLW*=|?F8-%>i#w6B(hT+juXaJSBXvokS8NtxrxwGL zI}c3WUKfCxs0k0gvubr|8*OUL#&y)kYi5m6SRc1#qH9IQy%F%G(JAYrqp5zad~v8&EvmDP^tNU+Ahdbxq*IBVBJ^Guks9M-L* zEy&O`S-G5+=EuwVm^dWB;Qfv;$`RdKl@%58cW?Jx9dILUiHWw}He7ZYaf@mr!}6Dg zM&g4$Gugr|&AGzPhpWPT)gCb#uhaPg{Aq8yWQ&Xd2}vH#_No>(9_ih>+V z6ua-(+BI$C0t(eeO!t{u{8^9oVG@7^klzN0AA+>#a? zzNv3NiMz0De^_o&!4~cD&5b~1vNmUl0eU#9N?TN-r6nkL$&QBK9x3%zAG!XM!pBBt zsq&jyFezk7ejgz}g~5~+@NK^X*Y+WjeB$k$kRQj(&sL_Xd|$Q*7?J4)whHz+_>Jqz z#DKix6vw?#Al+|I8{bxRxc+y&^uLIyWV-M-af6J*h*8iyZXFmFDs6JS9+E8FV+%rh z&KfC=?#%_abgo_({AN37@$EW5rS8ebV6aYT$u`(e_?I)ie{&rEJ5By2e=<)F@}wo| zKjyNw!qqwy@z=wsk~VsPt2b+x$hk2LrlIBS*7KPg%j5D&SWllEr^$NektF_*b44dL zy9aKT)x55=eM5cIX#6}i=rH&oIJ2Kc*hWC(hzQ1VyBb{ZGch4HMpG>xqQbt^&KU#1RtlCAXQ#5=rR(~EFQoTdePjh{?PJApHl|U zIM*bES7uM3v!Y6-YR!vE%!4**vY>di+MGC9noW22Z}Gp!N*seF3pf1(rK=XxMS;H? z&*SILJnhl67HI`guiS?bml-)>nLZfI!8f+D*j8F*JASELS^3gr-V7Q<&GYW#prf-5 zo~Ll9k4I4e@kxF#e#u(UU4e!=`A$EtO5_X)_{59aE6K zZW*c{mz&PZ2iOZ19~-U9#9Td9Sq%#i;VA+Z5xwER{&QKG?581?p&SDPeNv36E~k;{ z8vbJLwDz&8#|3p*ZQx*RQu}_S4)S+kn_R_uT{UV@MMKUQhOH#V>`sB%M!-JZ*-_P3OjZOoP>- z9sCAj#FF} zSxCuBv|mB(Ai|qMkc6C`9anZ1wA#GHTvRi%c%a8m7ZK=fnnj(Mv%-I7N;|3NNO)ZY zj;y;Z{Yc18n;TiQ6a0MJguQm;-v{ zEwszxHp_<*@tB?gQAAGE+so?AS|rSY=&WQ&2OLA}_%)Bonjrkk?W9`QY^D>c6EjsU zbFRJ@9#<|5-j6XAZu5RHTuHElRRQ_h<}cp@$!YbYxmFHNsp?iT^Ta zSIkJ(2Xe=lsC{NSTXPr$->$i`yR7Y;daA9i%JfWOztN;!sk+Cz$oG0aoI~&|tlDBR z_AR2RX*@>X9^|Ki39pBzrCm+Ag+J(GKWf9&Y_&g|JWB1APcn*eGn@N$bRbx0f!~W}BS3a*o407CjR++}0rT6EVBnh6nx=*m{-XBS$&A}6oY`XYP-Olt zTcNe4DR_76?bWcMO7!BOFWWLbs7!_+Dtha?q4lLzA8raB!{v4wy46H5w6P0Vm{}i zQ7gofwvG-&J0eg}6R6s7zhaBs@lf~NBWS1k5QkAXe_RmVHsO^|{dFeE6cuWVewEIaKp^bBB z_AMXL#_YU-BA@nxLr4Vsx79tJ;4)bh6eX;Wz&ZGD!w3seRasSAic-9d_X)1)r|GJ9 zscR3r(*m{G1fMB#R%w^o?=KRw{j^d$^}+j32P3Ltf1TYI(3ZSS2UlL7-xc%y!4iUi zlp7{UZM|`gHoq)k5Bkxn(4`->&__asoqt77i5=i1S`JX<;UI~g*qk^;GsTx#)b4D( zIn>8Yog!pYUp8zy5Jyx8lLPd_YP|^+t-G1Y%_`?A{|7j(xn8X zTY%7!5<(3lp-5;FdbiR81_Xpqlukmx1Oh@RD!l{*Lg*m9_g?)n`|NRMzCGtU?>X0Z zo$uZGCr?}TS!+FOt>68-Z>YasqyBz?Gp@5-^Z2@+RSoCvh(eRHTmN$YHUO)-RO3M( zOq(|6_9bqdarM=&0alP-7%8bOH(*qkPj!GLUa5JeV(33Ii%C?8WrI^5u$#d*JV*Wq3zIR%Yra3 zd+0KBd2)R(7nJu%AVr{Jgju1BA(0nG@T({v0e=(Ya(BIca^EqdVDaF*tkxP%{c@7H z?mS(kO#D%PUC<-uY~{H@{f(?k+bW)EzFRqnAA@Mtxg!%v0MI zPIboabXqOB@MYKBx{8iGNgl%^Ep%1XiGjebdUr?yi(4W0R^&|HH_Fp6UAuJBrQH4< zax%%oosr6W8imi?xEk_DPR_Z%;8-2u8c{Ih`lDDuU8Nb*>gq>1a zh1?Bl_!zMNOKxyp@f=&QzOf5@(N%ihiZe@Ue`f~gCt!oy5$6-y|G858;x*S0^-;pE z-t>Tc5?1RxUG*Eb(*rb17o{6P7KxEVxf%3c)r|Qm2{URw;^uNhv=;#+-xE|WdN9<# z`W|2(-TCXHqm@cnNqkd(4wHJ#^~-UXY(%@JMTvo5N)eF1HO+DC{xd3}jg9@w9R<=e z!ZQqD>4;)=HkvfMsk0;M2qHNd+2hbywE>3U>=EOIV6Jgr@@lQyAP9Y!BUPU+0r@Kb zoMifhal^DKSVkoGeh*%lb_uar$?JT3OHb1>HIgViP%{@%86V}m!5qrDfO4%iMsVwoxJfQ@a(dzXcJ=F7|^b{?hm zNP45uu8~FRmC8l-nVH4bAnS)~%={!_C3`!f^T$>x%4af0jXULRV!hO6^$NZox#UTo z#hk*cTMhy(Dq}VukZ{3yjX^g9SYOw)zv=3GZ`ix2X@dyQ4rS|@O0#001ajk=^RYuH z&jmH!$L>7(w%b?7g(1k@{i%pZg1z(A7Op*w$z)Sx_0oXf+dg3w)m$xOg;&%+Ly*bo zl6_wduSsZ~!tLv*^`>Xowb-z`0kL5`E=oKoRI<0Gooj12$~k>K98QR*aA>0s+ZAbGGQq(zn`LSk)Wod(XUbt?mG z4J&w^Kt%QJvEibw{USztcrwYlYj%CzvD&z?0ol|RiQGY^MGvlO6!Ik!&{)?w3_}@c zPfNM*n=ABej>O12Of*W#WRr8i-{CA(%=m`ZrfPxM?t3753qy=kRhaT^!h$5|O1VTD>=dBCOUW z5MUwdC?c2^z=Dg1-Z`7e)Z^ze+EgwmA1ElAC*QVvtk`qwZ#e$wbO)cmzxmWU&!7Wu<)cFlmf#i245yRFXYPaBkY9HL!0gjjV=_vl`CDzrPvmgL`wy%7 zbUebp(;RcUqkv9{L92`?)$U}1{%2V8bkHwpC(f;V<<`IGhhK{RYc>9lmie>IQ?Ln% zo#Ig(rxwV@bF)9WnWDyS0P27j8*+0Cp-*1Ct0!!xHC?|cetA(iE$f3@XnLQ7@%ZR@iR#|Ta~)q9SC;8y1n7@I<;>Q|p8D8qcM4nn!W*kSli}V~ zT?boh1dfNj)&h}w1Z8JuqY&6Axy@u<2gTOk>>>UBt8MbP;XmD@Mp*xy-d@6hX@3*Ad{Y9AIiEi``) ziDJ0-orX@|!wy!V%rXJ2#n`E?B1alv9e0HEi{e}aGspUvV)B$JMdjZtUoJs%(Oy{J zB-iTn-CcwSec1cFb;5doC1}0>pj~4eW60ld%|-tim9~UCI7_=AFL>aANYv9ELS;^k z-~#Km$8gp0yWFC@moLWEw=VfeA9@`Y3{&A8jMbCI^%J*#bzghfXjmMRb=r^nA5l53 zQ>P!Q`ed)?CC0tgH)#G}R=huXApQw`rIR(G->p&^e3z#86hr=#5_>aEr$HA@bpQO| zY(qC7cxOjQ$V2ve)N>9ZcnvUxL?x3emSI}!8yFRC5wPq%N?h`rgl-Kf>+QIWykvw7aX>qj&t zr)K=EnY98~pnML$2YI~WBQ@zC{OhW@+0#uW@u(c7XoGgiMJHb)2}FW#j(g5zcdc8`WZ-E%KcINXN+_Kchd~?ue>e8szq*O;2`& zD2yp+(~t9re^)3jI@O-FhTeFMr>QE}>g%i_6m zY{%_NNIFFDZr)zld5zBcC&6eF*9P!F|8xx9o|hQAL6^%gxmo z=)0AI`IpDwS5w8trN903;L;?fje>sOs{^vTNshJq_OYcJRx z!sX*;88>fh(mCHS_qUIp%U>|9?ivvygq*VwQ$>zlkl=Pb)^a|V5Nukgfwq3VvIloFF|w_iK_h{T`MnmT06u zj$0*H4)L(n#9StJp`+CX9B=~W4^D$?c76H^@@Ks`s+7h>-a6M2T#IT*`o$s=rc2Lp z7S>$s#O--?;+BDcpVgk*YBjjvDmXM%JgW}v!)IY+PhirWSGG{{V!*q#M&N~($<2dl zIuSL~hy~SE^l%%=fL-t|jg-cpU(7#_fBF*#!WJa&x;i2<-t|K#duE8xQdN;|lHIYE zyZ5U=Xh>Vg6!cDJ!P}_sGy_@>>4V-|vy5$w?O*;{9PPI6b`;TI{qvhM){nuBvPb17 z4@!k6*-tE}a^jIS^tXPl`R7Anzu#sIZZ(j=&UIrk<*Ur~nwKku@e%P$O}Q?bG?KdkNxuPJ1Qg=|;3fN7 z9iTYNFczF#rb_yu?r+Ay@g$na({RnVM z^`#TJgsN5jIQzB}#*48G+f#w^-7=Dh!lf83Fg{(Dt;zYYoDX99$gQD$TDR{&6e#DP zl9%_2?SdZHyeiheo61Tx8w`{}st(~-TJX(V`p+Wp5{Q#1mioO*f=9ThIA$gS3)#tl zjXE7+s0y2t3Km%Bxf$Kk(^Vt|e2+{iD{(j+ukPX8y$bPckxL3mG{nQ2YJvi^@RjSLJiWB|e(Uo;%Yk&i~)s zx#M+Gw8E~VnY5%wnkq4=ebDV0utnhs3)->%JTF%^RP0h&KK#7dJ&FEBub;D+i7;cD zNrQial}S|}Uxf%^>I2qULVcE-fYhkHJlDJG6Q#yf!d%}Z?rD9|+H}yLe_EqhgQ5Eb1A1asPn&TVTvynwkDUqa2w%!V_J(d0R#+D4O$^9a5e4C$JEs66@VcSDYWhxo&iiHPWhOPAK zKQl1;CP3>%Rj}OxH5|>nieELoq)`GBRjM`ONw$m%&I%SypXs3FeU{FMbbj|o9)AAa z)Oz3f$HGjmGUQ8ap}6|iQ<@3DACLa?NODvbrijR$_!yGA)M8--%L&x0I6pq=zBGg{ z3JwDlsY?Zw$EgQu=}JVpa`-D5MGb4?3P-EO5_{nK(LJP9d~eamdaXd&o@Jt_AKXmXuq;=K z!OSSH+1%&bgX_o3J0P&Qk$DV!n>#UsBzvE}%6LK-!No``^HZu{noEjDX8q*#X(tAk zilvSMN;9{bng?-_Xr4ab?72n^eX_R74!4lyB`r7?7C1?zejsbQc9ymD9{=2*K8?&X zVnYd-ql=j@?74gBX@?lWq9p79qb_U}7u~tH05-0Robt`pE}=?&Th*&&pP$$ zEHtN7pZ-g={dVC`3#I?WP306jszdEXOiA|h0CAk`0}ijj$Y~#*j5RdX>O1y}|1ETP zer9-$t>#a}5h@wZ^Qn_)$Oj)NRV$%FC5yRGDJ3-i^Q{`GJ1??^ilq@p+{3|2n_KV) zt};9nRwxqRcmi60^Yr(c6bI28Vc_pWzs=ki1wEinjV z#{d!*>Q&Qh!E&o0W8(pOBc~8=m6MC{2NM3D|46**vALyMm+F>y^uW~hrewiySvlu2 zom{|8kI*I`4mjFv`xm<{Bf(PHdiE8oPN489s}!O_F1$J^zqw`XaerSIQe^4$Uv$?~ z>Mv{pQmv$EQLMowb_uVu@pxrpk5q)~p%Ss#t^O_D@3kL4Xqn z@zq8xfHs-NZ{@o!)H|Jp^Wz}~H1*R{xw zQ&GFi+Hp&-8?EE?Paek!JvW^Mb~QR+Q$MaP$DTe;^&Ss~sNbV%Ti+hIvJ}aln1$kPE}xo!`D6nQP2RmXagwo*seWvV z*Oo3)$01ZlET(>pF#=1t&63%;V2xI_UIP-ZJy z5l%)}kO2c$OZE~~QT!o{aYBqxNZ39bZgrW5b{i;rR(D7oxGowYqn0qgPL*r6Sjm!p zW%h9q{dh4oTN0S*4&SP@U{?TDql8@3N)n>hoYAiV0VGho%kZexTm7l18v8XG``5p< z#_Omg;mL&-d-6J^n87bYx>H?(>OWa*cr(RnNBhZfS$08Kn?7b0=Vy|ekRt;c9=lq3 zu7bL@F>Ap+&V`MfHaKUnt2c4oXTh-B*a|9aSO~Ds~!IwoGXqn zE5fiIGv{PM2wE&{a&ksnJX48GR78Zj9_@hgNZNWk z?M$qGwo-8~Rl6z1X(YsB@;lATlD@I#t&k-a$97n*Qd6)}+vmdc>llf>Aw>24?QP3Y zUB`;!=!NCE8*b_+iH-_9!zJFU&DB9cRyC9$dPz4IFMhSLi$x1n*~F7l3x$vmn1wN@ zE=*1<(Ni~nO`?`Pgw^C&cE#%&caK=AgKv|ZHUz|fA+2Js|pG^Qe8 zMXP!TV$+gixIVt&Q3ft;nb(%}lk4PfCCU=rjq^fQp*^;qj=~`G>1S+MAa|xhuxlpx z;S)E5#fUX;uXFyymGLRB$S6czO%1Y{wd03i*f5I7jZ%HT*u#H_jED8gRQT!K3{sy!qk4eTv?o@ ze?-yKw68sXpPfzEpaUk>x&>NX<=#DPc%ZvpuDYI?m|mMLwGGc7YMpli3@6_BPUE3} za#g^2X1i!;8Gm#k2N-=)C(4fXbx8R#uXtVde7x6LX3Y=>+ib8|6nQ`+m~C|jM+qQE@r%NR6D}qQ zKq`2o*3SMg$7@2LrT8)DJ^R8t7xqOUD(p-~HysBUL%r4aN3P1S_zUnB>8V*IERA`p zj%dO-e*J7lYKchHLUkZGcG_h1q0my{igfRb z35E-Tg>}~ACU34xV3kpJ@m%(-BT@n|bnYB_$|-AM1|}r5z3pM=E9h}EE@oJ6fxx>w zIAd-1w$IzxV(aI*cfXnXIbO>Z%>W6ccssWWHRZfb$fmQIuUCCl$d&c>xN}>q=RUP8 zk!>o~`+ya5jg@-FZjxDy!?iEN^U+l1tU6eXilg(niwgdQW$-fh*V@8P_p}-*330r7 za~WM|jmG8~+-htZYkO)_$t%U{Q7_vReV3B7^@c6`oC+_HQwEjV25zCZr$JC;j2mR0 zBY>*h!E`PJxu1%F;nb!-4enb?z`8@SwnERyoNVC3x0j6BNMYACCqdU4;e`Cp03yciWhh^;z93S%BMd^_^0CwdDrd)8ATj$@#SH44r0@= zaoD+#FFp7sp7C_R9!C?QNWZt-&zSI3YV?Bp)fr+BLvP2IR{74e@{>|zGct0}hI^|} zKUB~hn-Dc>Qq52k`B+_|QHaUc0gZNdy9CjES8(z1LM31jz35vHGR7nHza-+()yj;B z?(*REVkjKo!Lm?3*B>(?Y#`$+a(~K$578Xi2QVryp#DNMIB)zjv;R#?!C7#`!9n>Y zY0%Nqn)1^6MxEA6>v7jXWOMTkn_#Ia4~qj?>dshV7H3oWN?oHP-0g4%`8B=<%U^6E zW)G?=(LJ!RiZM;8738hGc%@o`LAGO#DdzIyi}L3+;C6X-%lZjv`#RGzK6ym3))VUu zmhk@mjMF@h56M?Gn~trWbU^;c9Un~m6}J<`O>Bl3nF&kQp-f_JRHUhS~jK1sHSgE-V6Yl z@AHQK%zAuH?*LtFUIF$3i&NEriWYK;iJN-+-)TY)?i=12Vqj|oury}!n3D(Sm3bAP zN@|>%ukfys&!%8I8O^^Eta*EsSQ-He3$x;e+<~z3ABC1e)nu>dP^4;-E^ZwSjvB)o zkEZaVI=mOsv@nh&5X!aK?#5oy z!U>2xxmyoq$+!xTN7DHU19UB>|HW8JL-SvoOD`3;GvTpKHK`vO0NP3_V}s~E?gk#2 z1?!F7lT2H-0rOs{rMW@PS&LHY8%b(B{zbWKFz`D~+hp*|3`fWF+9c1^$v48!QxjZ! zW>2iyw|EbMj#QQ^am2yZpqy+vK(|NC!(a3G{yzBWe}rZcY%y6@4w+uBy{}*DouRU^ zH}+m&(ERSEmB5|pa~I&oQ$5L1aTFJnw8a^3?zE9>ZZi-d;gEl^+*+*R!|8@>N0UmO z`a!)_?Ra{6Jk62T!g73u3d5&l{yX{0ankB49ZAJbYyu5xcmnvRS)N5gqi zrdEY+Fx{{{;_llw9|*9N?_8{v=-#=LY zEsx(*d$R!QvfF^_wFLs(s-9MvR4;9I#Htw4=Ox5Y*kZoetS!Smcn#&ycr*V%kx=Qt zqP=~C>fM|4X)Q+InCU!MV!Azhg!7m4oIaQijG_;{Wx(3@J_6P}AS>za;DnQSBvVD+ zcCJ``N^FdL99S*S>C=*ZGJ>Tjpnx|#CWYT;gs%cw6&_KEdz~44HL>RETw&>e0@XRv z>~23H)Sfp|h+}y9OV?P6ytDPIp~DJD#>?#^6Y0^pT$%4QB}*@NFZy~gU;c2l4$w5c zIq*y34pc(QfVbMQIknUHB+7uEt&z&BKp`j$VVh60CMVYzUMDhf7o3Uj|f$SjGW!9|L;Vyn5xkm_+vr(c)WqApHo0=<{WQv)Zb#rB_MevUbck z)dV*db@4Si_%Q{PFF^l{E7y#;Jt{6wg$uAjFoFV4n_89END zknf4h6v~dwh*ik8j)IzE3@-pOvF0p`eG&Q1;}Q8(SC-#gwx~lour$>tMDNS&%PT+= zmhn&-HCh*SNf`he)#2thpDw!FwB3K-hX2dK@2|m5{d14itHWULh;0he1XOf*8q0KVQBGB1Z^!Jw5W&;#P47U~|=<|Uxs00~3;o&;!Q0VcS4Q@<)>8fum6vo4cVXSCk1{ayVK~Z$MtDO@zGJci0=z)zwMOX(}FOkK_Rcl!dG^ojjmqRyYI|I3sNsJ&pC34bH zO6(QizC7QM*I}2ZOVWEyP$aPKxXlu3Q(#h<-W!p@5hrY(7G!5urAQgJI^3m)E0G)r z%qSS^D6i@d- z*8trrw~I}VEpEC>5_!lV+p86+fRH8##Ljs)bocbE*3O;d{W4s`wb#Sbmj zH5-*qU#zh0V{?hwOG_$>I-I2KY_>e5dsw=*yRoWs>~7s7IXuQr;BHGL_dBr!n6uNz zN4}U;SJsy021W4Vu8~62$!^*!X3Z;}_D7@{-D)Ni#=-V_XA}F`uTS@}=`DxasrGWc zDSf-gqHJZySey|*Y zc#)b(?j$vG+9!k0Hb)-}C_qLdlSK0zt=nzW439$%!*Ekep6DvPrc}2r0t&=1tit6W zF}oZi0l~dH#=rLPT$ilh)bzp$>GC=BnRq{NDqM}=G4r<_pl|6YoSNBHJVdDX+>xl8 zyKU$0Zr4^vtZeO743%Oxk4~l%k=bZkpSGFz+kuXhE$?yUPYq$Obfh(5p+@1-Px_c% zdRg&HUXxf9$OL{wYIiyZqkwYJD1bxXO9unAfzBSRkySEu!vU7Jfvo`8|m~+2yOtWdzlugU8 z4(<9@>y(%}`VWREAD(1s*BPJ?w?eVq$kpiwQB1bvf~;H%N!Z(Wv+4GR8Vehq8r6vi zGs}Y0*&qaV7QD$5k7b+v?X}WA>3bG8PiLF{oS1_%*}hEZ@edHUC)(i<%`?Jv(sYnK zfcY-Ko4N-|MH8apPWo%E1$&gb^=&IXnnbsvVJWWWJE63jL(E@dJG>DGCwYa}|MZ9s zqb-WE{6jd#NQgYz3}NidlfaJSe(v~~kcyHs9d&he^>L1zIr(Y# z=kp+SU0r2SQ0ZR$%$>bqNI}UNQ^i+DoEOTcnzc=CjVSqmJ~U@1*(Jzjs(K{Z^JGJ? zsImJVT#czF`eF+YZ8oAV<`GP)r=69~CV#VO-kXFZp}e3V5*UCrR@>F6Rv%0ZJ8o`{CT>MdO%D&f*CoD3 zE$eKA;qj~Hoykl0ztaG}?tpw}=k_Zq{8D0ug0VZp%Qs8GRl{`cH%{0!<0r8NkuE~H zvZ_=N1ntuw&iDU*WE7{yrQ3@crm34f{k;J++e)cW~4oLVm&$t3!LC z`a~Wrw$Mhym*vWq+-p=-88F$_>yL>;>YXc|(8{ng&H`?%UDKpn`qu1X4$_1hFvs~^bx$tan21$guW+^K=i<*a6R(w&U*>mioN6d`B7_sj%|$U zn0?VPuwI9fQUY3AaW2xfFbXY|z3p9`E7>ka2=||QWN|4W3KT)>9GeZ6gdj&Q#LH zB6f5BkVO|5Rh-n&iLa>+T?wCBl|!ewzS9RV=44UQpo30(>dxw+tWkkr<~-$ z;puZnItdHWAM5otG-fn15CXpacdsqeH&hGPv*s2=v;ri1djjqR;3}~PWAnnz2xM(> zlHDGoc7z$FN~*g`?K#Uf|Aj=euVQQZ(gC_Z9l2|vlmW-0#)gSiEaX9V@W)YsSzJQT zn)_g=j6J%1Le;aXj9vw(cdnH7Jy#Q(^7Nze9VfSay_6jV)G@?@Jp`6f-MgN6W;#C1 zT(7Oh@X{kGwp#L1@Hbff4{|Tnm8NKGl&I99gTQy1$>t>3ir6ktp=PGiEoVui%WUK& zirb^sZtR1KwaM72&YsM}TSUP8X#c&0-A9ddr1X?yeEfHs_1QKEDMoC)T+8m`laIpz zrLO7$Ox+g--Q>hHB`;GovfJpO^?f`(3u?gCj+NcImdr*c%%ycwHmMW0$!Ky?RKby0 z)O5`gQ-SLvN{gz2NtH`Y+^$sxeFs<8m#--^zd7jcER<4#Hs(yIqwCCw4IH$0E~ye0 zW$t9ELT6t1f$*AaLR)TN;Vz5b(N+E#-JubX^_?LM@5&coK^n%wshZ11`CziU=sOMb z{aMpvhe6YNv;MB@$el+ZqbS>&oF9pBW`=#)$S^nC4(oVxhg6XEJhI8N#R>oTVTOVW z>|R+S4v;^YE}Bw5Jq4ZKmD^PQ%LGP7dfyy_MyxSrGPW38mLadvljDl_g(QU<|Z>6%bWEJP2g2vJHmb1R` zu58pi%gRK|$+2nySxD=c?oNZ?1jeKGk+f+a6=|F3s0GrNz~lF8Re6-epkIF!SgI<7 zUh-o)?R1IE^m2_i;wa`iD!oyCkz&)VtA&{%?b=DyASP+wJRTl*PRTT0aO?y&K zC3BRelz;&?*dz-VZRVWp1tarkt;;hAr9okO1FPN(ncMM!w$UK_Q3W-+SJTR+C5z{O zPyEs5jJDAbWiQavn^1~`0T;A%N}h%ag<}!^c|KKUWg9O%-(nXEPdM;Mm%dYBD{1@rb}6?M*^i@6p-AC5~ms;<(PX>p5#>d zPm3I?9}BmgSW|6_oU-$Rmp1QjJ0VFUG5(oLQ)-KQ4=1|=xx39Tu#WebzWfAKsF-$@ ztS58>16`;5-Hz>95tG4KGV8H&>p(bb0xmi)URQw~EhFr%!m)2l?LN?)r8nw4EJPjy zS^Y0?$evMytYyWc3MCVgT2x%FlylU0r1T3uyA9k{d?wU@k?}(@PkDgcPC%09V3(y{ zy|syxa`CtGbbHU@qj(BRhuNMV8Sv7U#HW~z_IH7r$zVBe-Qnq>tpdSpU!$C@b22*K z$&Ez)uW_KXZCqk*F?+VL6KH{=L~of-$vr+!$)MjXGg3jbr#Fw;_T-)#OgO+%5|o;3 z3@iE>Ow{($IG*TaV8`frs2?+rhx1jSi~Db#Ta2zJZGHeCvoN~W68F&a23WP&I6yL} zTC;4SfE)>oz|ZS$+aDN}KHP&CEov)&@Q&oV*c#;MKw;sY7AQK_wi?WJ+Rg0SD_5X* zC)mviwfR@7=Ql*96?)hL0f#G542(r;K##i({BiLw*+_gbsa0Tafg2Soz7_b#TmF^C z{>vS&R}gbOYjX5eX{!IxGdh27oPYET<-lH!d!$DMvG?}ENU`6_1z|}FhC@P3 zsPJoJ8B-~4Y1%)_n)>0OWEl)$j1zLO0E`>n;vi9w)8ypp%ieXuxR>@X?#MDTw%vwq zpQ(9vN_Z4GzksZFtGU6%h4`;UWG$uvfLMIpawVv851VpCx*&ljSB()xlPrX_r~|LF zYX{VPR!C*Ui@MAX70!`L=~SOfI|culzpbX|Y5Iw*pp=O!OlR05<63Gyx+u(%BYoO0 zYf3j2>&{@TYV96bIA;E%I$3v_KMIXXLMOYmF@Wo782i#4zPM0zaCU2xDg|$%F%4|m zZ2-YsDzp3#A}{k8+Pf^cT#O^RUrmT+$L~0O4q*(&hKr#4pvmU-BT?5}1JVcB$WXTB z47|9!2iJq{-T4RKX~G6i_&nJCzSFGrNo+(Mit4oYdbUlioc>O;w2~2euqeF@N{@Xw zw+Lc<-PbrJ23=D2uEwxW+ls-2c$kcbvaJ$ER%);dDvx&0n{EYGvL*E8Z54Ma<(v#$ zpM;)o=yh|n9FrWK3w6`)ANT^hq#72QqK~PXzfG9(*{O)k&Q`oSKH@njdODX|f8%y9 z^<#C)^PKNOMv5zl^@|G~^S8$%%AK3;PXta*%TP`l_obLcNqJK6`GqoZaIF~qS4n43 z#G|Pxvm0(eZvHMH5t@L2sLsH)S1V6jDEKes?y1&mU%@On)|W+dzQL0cTx38=JPavK z6^4VB;7lPQ{>{Up>Jzb={c&boEY~GiSGnlhdH3~u=eS$@!?NoeE_SWs>8hzL3E|a3 z8bwY99O%#~I(4GcToH>6<8h3~q_bgpG==R2GqQMKc=z4X`4%XCDJQvNh!2cY-is*b zvA}zIrOQ@Fza5S?dZ4T=bdX=7oM4x7J(i2Nq|A@&s;3nUFTw2SHyA-Qphsh6uKZ%IzXO}w+8aDAP5L1R$r#@bg7=| z=a3E+wq|%8v5bpy{vdK0xz4Mfz-R-`N}%V&tHh&D?wA7Q9_rBS5(fx zb+UK!mKv2PrTl@*X)D6k?Ydvu53l15=J|hpVjge|3C`eS<}>i)EZ|rNu><`9_;?8GAU3N}Css#5eOuNK9G8QZ()?rdqc8>Zg zAHCuUt&+;h+>+t?1&-CGEZmJwX?qXb!V6*2r$%H|!NLg)--b(ke0mzpi*NOjJT#J3k=Liod~_WAr9axl$M2wmvS4U<*@Ruu&f#EB^pV8JL z(i>bZH5Eu7EZiyrg*0XP|ik#Mef`VhfSbx$>rd)IZYC_#E`;JfU z$4BwyFS|dQzg4uj)f;lp0OdhU_XJnBQFfifQ#(MA?8Swf_$tP%v=*!8DZ)9|<#~>V z9L2c1Q3!SOm>!FtWUi^HCbA^07I32_sNU?AVo7hh=aDUyTYkcC_ya|rEf*n$Eh!ZX zV|9p;;N_9YjF0=Zx8ND~%L|lqoAkRTT2q`b&gzD(Xny-WySM-@i8vY0mH3B%odLLT zw~YDRBGNp8FI~3y-ikqoE)qKBVN}5Q3vJ#{TQe5)GLnwsl5fh~%sdUWC@uq_sbU^_ z17emz95KnY)L6GSpzZxGm+bUqqdAjpo*(JT^lj;h#Sd6tE*z+aobSnVD#;=zliPNn zZr*MF1>*81OLnTTyT~jPUMPs3+Cf1wR=q(IYo{+->$kluPHO**z~$NWn7ns>Ep7{r zl;ep63TJ{e&EsmZXbP2>p?Bbt!jH5#n@IZ)-W)JiYxHeF#NvFt>^nCsS(~PuX6JTR zC9E$c2lnVjP@#B=9<5UWGd7ic{zA1r8<^h6BJU+*(ER}Q#~(ed0#V$}RxNF>KQ2;4 ztWA3tg|ncXc=bjAy}z^-Qa%Cf5^t-`?7kWNa9a75o1sE1Y9mZ=OV~dyuug3(Dtkv! z&g*fp-$$;u_l{)Z1(fAqnpOpwKlJbfWIBt?SoJ03hf~4ZhMebH%zGIJLB@eI7Ee## z_~9_}Z^-D(+Ju)?kxBUmDX#zrcf_-b%A>^E1{m`0(S4_pRA-ZmbKgBasIGGn8uPA5 z0~wcV7xx^fU8};EDgxo7mH8?Ojs-1|ve9d+7 z14O>bZ#d-f3i0e@p-)=VPSR_|iP-Lp>F+cQb+6ce1XK7urkp9dJ6T(K`yusfn2#i^c&TzQu3BUVDJK!UvD|-nWTGUlG&XmHojhXhUykq6?QXG|UVBh|=_CDF^T5qBH0Cz%+ zZbA`kB}Pr}K-@58Fj!bE4eaYfm6$0%GGKBS(sCk6&hi);*nnDz+o|&2^4_zMQhDHikXzi~oVj$(`a4bQDiypl-b4}| z@xIt(x~dSn%-Q#Al~>H>$CIAAQ;o|!sFsEZT(GW6T71FBpnIp+chYMa*oC;Y4<^9^ z^WvdWd({#(tszNAM&pez*&hwk$LjeyMWJKzP`jDupKn$_?7|=SH$P81+7S|f1{IJ= zoA-9t3DeHu4Q4lnf|4*nRHi@TX?C{;M?wiYyrgoE7=m}q6hwVGwfTF$`AawbKTtpT z%k%%%!ymuV34Oq=H81eUylH;6Dcv{-ug&{>y>suaA4!uD{tdU6ht&d_+`lca8L?@Bo{H zIZ(ouy$i<1d)FG7LIe88ciWx81n@<(69$eBCst17&c+uti;SqXraoTBJw=k9@$e}a zjOfq|bX#Rp@>jF&!;gdB{E!I(-9=Dd|-XgtSr3}FF?2lHcXk}!9z#_sj<7&#Orlc>E z+h>1yJbjDOVwfNkNBC$V;-=r-$DJ7;Bvo@|Nli`F*sAMZiukG9z6s!YkzA+y8fh+3 zr@ag_#peoyG_6$7(wv9}s(;nF8B`ym#i(8LbiIY~v7}TkV&yvx2B88Dd=xRlqkRrG zD%BRgE00lyA?_6Hnb>3v$&X=qbMY1I2M~(O+LEbs6QieVNqpuP7}XB{MO+wj&pk?k zbFU~i*uI$Re!}gDR@O9sdiL&L8w2(1jL9E9#EgGn{O!1|1|yGqHfYY}(+CeH3B1N4 zn~bxhuXrvc0&56S@}O&g z?M0(!RYTC@4OH;0#r`Her^iB8$b3Zy?RGFFrkQ+QDrZJ`5%^|k9SCWZ_prF9)ofR? zH#qWoacjm2QtzQ~i8R949M#wD<C5{0-0o==!8O;eqBHZGwZ@lK=xxfOfJ;U+J(E*x~BtD^iucqg57UjD_J*f%rd7E zot*z23)Y%t!KA0F7(OA&mG^fRnuO=@+~5f*a&O47m}(*A@bp z3zqc`=BBN~6=grKOVPFm!>UrhY9tDdVz}#I(ery!_k;rSM>E)b4qGE5^B+E5=TiAR z^m=?RP0H<8+ki*!i^d~(UbSLMpv@BUn3kI6xV+Jf+AZe)hrRac?G#x8u zRt%KcSyz&3}37V8&+0RHGRQ##^tE(lZnqAx1uCkcw#KsrZs&`%o zHA)fnoPs@=2l`?+OOpH&lKCT2y}K8$s}YKPTDTOc@WGfH4NhQK374r-zeOLxpeE5W ztS)S=*X`lHQpkHaDtV_@cwwZ{uNsBXwbOQ73w#ZpTXve@Pc5_>hZyUq>;(rF% z>e8yq;oJ^4BgX66E97EsH2b5$V`dFuow0b>+Fd1hbL46+hi%eL*xi6-_K19j(OTUL`4Ym;v~CSIbn#Sk04lZrTuInre)>ovb(q16`Yo6#E`W1vuW0Kr1aZ z_z$HL{bZ9`@E!Q7wWT*hW7*GNcEDt-bmN6n9BF3JB`ni6G|p!E&R$T-eSa?}w48Z< zjm1-F(bQ3*EoNa=1`f`OSwTJ6OuFjfuEcfM{cXbmVYuYGno;teJ)j|sB7%m7x zmbhs=H&?ebmOv1heJKke9+TqL#=Iv|Y{!_HMf^xZLrKo#f~Pm-tK5b4loI6c3Bl5{qQF}{@~MGT=doK;{^0Fh-3 z0j&1V(DZfYg1Bwyv-7PT1MOb$z+d-j%n2rP*tRZ9SEDg=3Qlmj*cD&w(wVcb7uJIn z9cWM|zb`J5hXoXCkxZ5wEh32iSij5=!M(!+Zwo3IOfcC9?2zhs1< zlSM@y>~vd`#evAAu9*m#ER(TO9KJ-KF=4SnX+90NFw!xU1xBvg1kpy_=8nRHi^>Df ztfV!ax>Y0`ae04{d2DbfwdC^eUzW%c&mCaRKf&xTbNUP4a=39{5{4Ji?{zpr!Ce~} zc(XLkLrq@iRoSh;hPt7V+Lw7te^9I^H5%Duv~R{_P!&uj%DlM_YNxE|E)$Ra?cM8A zRs~L*#asHo=IE5zUbF zcy+v^$D{cwHn}de0Gj0I8n%MQcnTQ=T&lBl9}(8pv14pRlygCi+Kd`(4eIT%1CH|Q zEya%)4os*fw#FpsJ@q^(*`)9L5y_X%B}b~f0JOA?qgoJo7j&zM^aKb{-EH>*a4urXZWDiwdhAE>5Ww91fSEBWdg=(}-M6 zNy@{M#cz={N=z>;$xKUn7ItCph1{6}n4zsiZ2ZgS0&wZGU0^gzK>_8(lE3hWP7KCY z5@}6)@kMJ-9u{oVhY^eKXCRU#%g|2Z3>h=>2%RFZyLP#heBi7jrl3=z__pil=b6Gr z746$1=LDQlXdc=ffrZg+BjiZ2oO#%rT36OZ;SJJz!Lum^b?k|@uT7~#4wP)AZ%m)Y zy!ZE(M^kVeL;3D35lMk^^%ep+>n1bCF*UCky--|3$%~aFTus#2$UYo5uo{*k@i}}z z^~EDveDmbOP>CfmC*0i#nXsu3rF%q(#M|1do!7icS%ciGuVMusbF$8BMqh7WmcubcXHncIx$Z8AUyQseDvfLy3e)j}Rs>IrT_V z-V_$pF+x}p1k}Oar|8jtYyApny;k8M0W(AXK(i@{bJlFVqv=>I-!{BZLh*!e;-UHD z77XPN+3C9GyJoMyR8=($9b(2vW`<@Bunb$aB+1=b8&grSaOUd5nOR!b{K8-olsHI7x)~DX= zfm(7JZ4!yy#vAT%o=KzCL;4PN5|^Tj55LIE6uAt?cTha?YnL?5=P7mTxE<%TnTJnb z@7FG?OdQFUFmwe{;eW7e{r6M#fCbo%s5I!_a&#$&9aJLYSs3Sf)hXlSr0vZCVEz62 zJdfJ8>rXwE`Z=w1s7=zrA&spWij<)IPPM8066+WFZx$ zQ#_rUWrGYgzEuD8aYN{Gl7&iOxd?grT2CdOo0{YHRqdgxss}>$s}q{_Ds#$m`VCN0 z7X`d%p0XWO?!+7!N8nVx+TrFW^41lVmT^|XaO8yTUe1Qqj$3yX=VPfAp(e-YT?4(T zkDE#~;Isq`zDg}fRMGzm-I#B>^20PW|E(h_vP^(OXRWhn*p!D=c__&`?Q;d z^uy0SJZVVH6KG}2%Rg+NMs+1Nig`_GJHM@S&cz;*k?3=Om|j(+T1~^0OG=inOaeQF zcHr}Tm;Nwaa(`6U)DmcKKfv>8n>^e|}wH?O~9kK0-bI z*Y_|i-yfEPz5>TDcCr0DEn>Uj#o`DUwwA+h00JJ&tYyX8sx7OjNo_YQk6$M4dz(+` zzOfHxg~PnuxVujpx{b7*8SpiY0wG`KwKcBCVyw@c5AK>dhn}-vz6| z@xu#+{jp!89W2B4(^DiW5q$B8*Q7_%uLfujN`BFH(pef_nI+|~lQdiFC&kGKVgjY2D`t0+?p_Rc%@Cw|ME%zw(RxLrwe#mR$ZJ{(sxm zii;q6IAe{|VS&Io;Z>Dl&>P|tTf0QYx^|yvwN>L!eTf`*$*Uxq+7sS&tVd7^rhRu! zhI&vX<928Ozz5h94dP_2jD zR3pPolO#pgXmuHl@rXgm)+#`NR;WLES9w9CJiEs5e6qg)-|F%(qNAc)c?fk@5p6mjcY2!vPaNtJ4?DtKLyV-TP%_y>hvy;vk)F zi*HQ2BJhk|b@mSUySDgduF18Zzn(Dm6cqf*zA+sq$*4e#+%cIe5;se8);4kQ)})iL zL&g@G&nLNNsonf*BuW<`&tN?_f^;B{1M2O5d_@@t1i>AH`Wu(juWZj>SYgnQcvl-8 z_xGL@MD|Co`4k)!!L4`r|5MqL4oTx> zHgm|JDNHV~062KtDi1-3eH}N2g11Hc!NbzpQX{KYzU*L>{w$pRZC$ysDrNVjl;L+$ zwSPXx-9Mu^GRpN?0{&~;(Vq|E{pSOGQcj($!JQNN^Fd-~C+tW(`_1)q(v8(=ccg<8 zLdUa^1Okjk`LYh*MBW$X1ddX6kbI|{E9Is+cYqLM_Qbhoqeoogt;8k#Td|Q}p0a9i z4=r~s^m)r$4B~5RXH`C|uRN``jooTK$#tar4$7~EnK+rc-gAWYCJp{%fg*+#E>5Xo z&7_)UA)qRJEEaO8u!p@i_{^yz{+#L3HB@0V{Iy^2l9P<+97z-LdSSBe{?Af5u1Rgw zH+H~IxN3EcW=Awgh&I%xbH_-v!8Iz8YBW)7rM3HhT&ne8`m|^GjZeGKe9X}^fS6Mu zdCpM##pWHGkDX=^oyc}ID8~zQFq0TAJDV_l0MyMTKvh6klo?*C;|F*;7YcaoS zkKK40mfSPGQaJ`v^1}%EQib^)o68p<_0r#%2F1Be2OR5bIpAs9e?+N}+j!k)`GC{(>Z8Llw_Z?=nZf5lZL18|AXHmQc?y=YQg$SGGF^J+ zS<4s+VhX$EIQ7~XYpaT07&{rA;NY^qnN2iy@m=_8Po&wU@nP7_`!TK_Nk;&eP9bd} zslBmYg}{Tj+M#Bnvh9GK_el#WNKH;Tul=fSh@<=X8AwYxT{)tCLt8;X-XU2Crs}q9 z|4_AaNl@fW)(5edl8K`{aw6@0Pq06Pibw0BZ06knf?YFUyT!paT-vPs26%h!!rlP0D(9u=r?~)$8_wochv=H75Lw+3tFTp2wA+x&+^$ug;&id% zqt3?6z`5rt`+>naVLElRozYAyv||B6a?(sx$^i-;(z1D4NLW7(3tru z^DKBB<<6I^4_9*T#i!jiL%1E@(ZDy=EnatSWq?4AC3ZF80hvctejw(HH)>BD;t2p~ zalr;awN3K`?)3cMZe9P{`k&k+{nrWnqvh|l3X|VQ$3B}KYLW+4rM3)6;^yUi*k7;!3$lbo=Q5qy-X)F8Atg&P&+P0U$ z+x@#mAt!4Cx+Pq5W{S1}l3LU{D^UeiVI@hWe7W1(vrq7i8~=5~c|R-3Bj*g;m>6%w zV3N+ljYWrJ) zzbAY1PIrV{!e6Myf6w`k@<-Y?a<}I^_=C}+d;Iqz%;Puma_XX^-qe6zt%WXgTl%?$g&h(UCb4B1O;%EYJE zy=P|Cef3~h(=>tqJ-}fYBd;(#$bTaP-c-9to*CQYr4Fvbn_qbE@1CR4otuY_5mT@0043-?CXnh5J!7Y=74dsw8x59h{}hp zAhwt-`@>H|zI9id4@yp6G*MUfh4Q@0n;e-yyF6~6H%^_uF_|dbl>O@SjY%fBkh7-l z{PwC9NA?-s-|u-&SDbh~eM~$30N*`k>8lK|dwV|k#oVz3?_BrJt3R^9kF4wI&Tb?> zWZF?fF@g~%O=y`m~#zA?L@EKZvF;w=%r;TbIWszYQlI;iQU(f$vAi~Q4QtxzNN zIQiyZ?_pOmocwjwie+l)ROk0p6+hQro~J+G(F-|O8K4)5KX`bzeJa4hs`cI0cl-Pq zMgNn{f34DBo^@Xbi`DxXJ6};>5=#ra!x6IjynLq>%b;7q2UxLW%yrr9?Oj7zOdj-_ zmrP-~Xj@TUMYIg#BRdpfuz#t3-{F_3Ts_&y5XIB?$>yu-veHChXN9y6- zjG+$?*C$?)ihuMgd;IwK7Vx)sC^E;o4pMG8dxgscr87~u7JSm`-?<=c?z;9HEe+yx9R~ePcp>H z>Jm#wT=s;lN>7w)TRw4+9%q}TX!gIl`tZXb%r_~?@)hN7d!NSs7{6hGQWxDO!P_~_ z%zIa9-@&8no!R0Ovj5d5eT$|?pUW|Jd?G0W;kBc!11Wh{0Zu!o8CEvu?JCaV|v?hev;vb)GoNtq7jF)SK6m9nAs(=(||P@w-XaMI?tfEQ`Mn% zA+i{J%zxoz*4SbY#Oje4y#xM7|MVkFeu#s2+W7%#*F-&Hywz$uRmUK(lgt0o#Zr0j zKM22-eFptBz4g5z19!YlT-t2ZUxSp{!qsQtvPt>XD`2pydhXH+n$^JYZ!ePPh1Df1 z*k8Kmd!<02+0O=_HH|5V1VFdfW%&!1J}&}9v7;l1JdwgDDS*}L6Ag-Z@6}w%%PB{Z1{KXSo=zH|r+Vrx}vh~0C1fff~0M=*eD!O0a!3N<}63bk~ zdH<}XdGta{kC!gdUXC-O#te5i?N6s5f5gwY=lkE?#P9wj5%P)qB=&#Y#edCR{EsUq z+PLo&RV8s4-+|aHR(3f%76Y0HN$|8?4DrthO7WR+IcCG&|$ z2C)&JH`VA`3Ti32Pd3}fiEVo~Vmus1IU za(`S@=o;eE6r{i}S2 z0uC7Jq&E^uD0PM~*Z^mAn52n)g3#`^I!0`Dk#)I#!ED9g;QgAUt#F z$P(3}6$)53RvkEZR^e|6k8}}DO?zDjh)aR;mr&r@ZtUtWvijPFMn4zjSa*9__}y8V zk!sc1niU^RFG+6^n4dF&!3^jl54u2d%xviPcEW~oT^TRL)6eg>h@6dP7ZftLj~BaOC2Y{~%=MBm7$7Ao z8W>fGxmdL3G&Pry9qW@kiD8-bjA08wku3*QNcE91=0L)jK^rjD$k< zUPrRpI$ybZbbYav=SUtlM`P`BebJ!AV)N5NLT^8NZeL#+!uR5rX1nZ$B9VF}&K1q6 z5QXm_$2Lj}8A}OFtPzdIEII-|o;Q1@J7a#ZthIgwG&8f_0()$)Vie<&1p52huOWt; zuQmTxa!ofrCuP5#c^KOj za?$IFMj>*vAzmZX-`9i)Hc~YX{P}XEY3;#pqx&&$jFw@KJR1~UWgaBqgc_#Sm&Gm+ zL_~+RS)>#Ub<&)Yk!)YIxwnYC{FrV$HW7z2z#h25)(iTF*_L}(_J-Tz=?475rjB}7h#Tjv?HwDc4(_@6nrt?U) z?!6UfGlpn-ZK7{5ge8!Tt;&O99$NW{mcfxwv@UzV5i zDmz}Fa38tLmm|&7xUauP(}xle06=b+szquv94WT#r2XAo_=x9-jn`0(|5xHGu@sux z=Xi~U$w8CCsPO*6#+Gu((LKR$!fa zEhhRv1e*CwR3X5*)=H?ADY=qm85xOu%mx6EX1 zpQL$52B0jY$>13(K8gd0FBOzb6O?CR=!LKqs#3SlL7wC%U4HoWpAb!kVqrD+3C&)D zwsCfEJ{;Yc7R$O5A?IfquQ41G43mb9U<=CHw{N^DNXp5Zid1sVp<|TV4)S{gHL$XK z3hD>8Moas?gTX!Hz~21g+^$1D2{mciypNXz7_I-G|DNj~JxD{f({w=LIia7#ItW^o z?BcckxHuPO%EZGfEXEHJB_76wVJVq_+_}T&%XGhH$j2o=PaO4?L|Us^jlJw0NkS37 zUGTf-W5UDD!v$``=S&k!D-rp0+899+;Q(x+nL2rfo{!yi-{ug~ z{>~U9a+jYC`@$r9772qmk3;x8ac;$)Npa~-0qGzPR#BqswKxw4gZI&(uS)f%#;)-K zADXr1x;xTm7s5FKZsmX#GOd~~qWSuoqXH1n8%;;t?|bfE@I*#qcB~k5XKfbgWu1v* zfFRxKe0+>KehSDga5t2TsHe3oD~jD!V6k9%9*t_1l6pq6z$mM$4vMDGQ=>qu_gceaR$&sGBp~}6KkG?Nx0UBN;_S>>dh9aQx$`LQO~pJr`99RO=$eeF)>&;rq$kF z%RIJ3H`{Xt+U-XkcwuVMhfm=v3hZO-Vp&?e#g@>6F-`o!x^j-wZ1;W(x<_w(al}dC zUbN!t7{aKHtnbdwfi21*o-vGymB5yZ(0}V=*DPipZ} zqZAg|(InU9CQ`1OGeW3#X&{2Qv~=6?%1?2{BMs&uvI^drl9u~D1Z0&gg4`C3-~;ew z<{mU=*eKkOF&qq+bpMoKR$TACf04ouHPb`RfXTglEe)pkRoz4&*cK`xll$1PCs9j& zGd{oHul-71CdnF`$ls;LW&8R$+I;Tm!&pgvSQx$|j6w0)hRaXQZbbdI8YY2lK1WA4 z+iz6)ZNXbngm^N%PR1Z7xs~&$YnYmrc~DF3oYLWF|425iZDF*pRt096lw2((HM$ni zS5^&R(`xG1kS3dg|J(ET7jM>x9{w41BoM~}ksc-DH! z7_^fq9)1C}DFex@tck;6`1RS)ED0n;bNFPuMRFZ$K?w(uX6w*-W7&$GJdL>w9}RhQ z;0L0wI`y{9ujW(u_@QYtLqqEOAqQq#)z&e**&Cd1?%w8rb7)r#e^H9|a9CKOg~&y ziMJN@tzrh^T7yh4P`>&uyy) zj0xO1;xPi@W~_7C2_iIbK%j`XdiHmn=oWl;C&kyxWc@FyIC|am=+C_!wo4YFE1ZcP ziW~)NLyg0*XQ66oGG6qtX!v7%Ng0?ih+^oF2;Q4^y<=jJc2+(g0{@`Z{!sKOKd+r@ z=y_wM{57u~RkaZpEH?${EnOKHla%*jWxCHmTUv_!@(0r^M4OC<#rO3-?88v)QX+E3 zeLc`qPh)aHM?}PIGIf-@ZAlDdcVbR@Za}eNwVO4S>`Dezp|aD$TIJQVn2-1&UKE#d zy>Ls`(4Vb@xhINMu0}Mpqe<84ISwT1yG6$-Lal6-lNhP|;g-(RP&*p%i`tW!vYgl=nnK;^BAbdKZ|w?57RwB7t;&S_Fj*E<7G{UF z^Ac#XnavaDSPt{nHigro8-x|AT=G;+5~;HqRKuW}L1b6+MQK963{XI{A56Yhb|fqq zd+R`iPd<({$6l?EKf&{5G0^v<+Ypi@3;wIaC~T#N^xdRfu(Rch&DAh(zlK-9yNCwf zH|s(zjC4`QD3!8nLRR{&UpVL9e7`Q7&?Il)>%SYVx!7rzh8w8l9%vh=gyzo}Aq3kZ z`*F_)_ighkUc7Ws%q_}!RlvQU!rYl;GPRV6&Z~kb<<|&-s&LNXo#Td@yK-M0zLwg~ zHZ47~%X;s+Rrv9k|CT&!a*_IY#Krr?SsWDBw>Ee#IC)(+2)P|WZj-D`*`p)P8Xu! zHV|I7w5+J`uFD6{yYpN6yT!hJSFDlMt3uEotcn>7-la($zX9EFpG-an;o7^^H_QF^@kN^Yt!c;J@b%UM6GYskFH2x-$#CVyK0 zF0HohTK0K8-hG=ir4Ie%uJ4-v zu-;gZP6srfyb#Lgf#j?=%ljv00aIC{|FGWuVy_5}IsB~mvm#0RYqZCnq`K21kw2|} z)`YKRLOu85s&&-BFUEgb|9sg0QWdTP8+18Dd!1Oo zz>Ki~z<1~Ih{^VWa!i?o+W;#e3(XxNC-Ml4qdZbx=OC?b9 zxb+)TZLjmn0`GT0#cef{OpAZ7ZT!yzng7?rplt#v>oA3A?)m-hD_aTQm@Yo8 zIH(bs9y|(sPgeN#%-r7&St=XH7|&FA;t;o`Sh_J?Fa&wxE^QMroFm4uSu|(_`)=FC z(b^@n1WTAjklDQHGkQ2JLm#E=X;;(2kJgDDC6$}kU6pTZM^6OK?WqJgv{FV{X1{0dvY=JR%3DsIyX@<@e(jqXKAnD{TOHZfRz}UEi zenoiy&}FHl3wC^dE-kk1vuM~Li z7yN;~vC1o~_tM&`hi5x?f4yjiY@?28Uhj0F!X*i~y9Z*=+C|f38CCMIDEoUrM>Wy< zNkP|)w?caVjN`0*Bs5v<%GfjaDLM#KbN8C7IAAFj?7x!Z;jyV)&%u{_;yf&tp5GO` z$VL>LedL(A`REPY@>5OzbBhi3A<0E=LE^pw=N(|L5LBoN&L`Mf_1?76v16d54OTeq z^Yl%h$!LkM+suyjr@QSP;AIf?B}U{_DF=-|yxJ6ND;YT3i;4;7+~Nv8-}zHy^NU5( zbS(tULrFqMA!mlzs8QHDR3LbS1aySW7~{(EKHrVH4MN7uF6ps7=^{mN$w-0yuM~m6 zJyI0P-CNoWfw-J_g*;e{E=1BmnXJC{==ADha*@p)XCCGOcLGwl)r$4DrYSd$sDbv4 zf5_OsQ?;z=KRJ5ikWT#+wQ6%^cu3HU*>DAR_ZkA{TntR5@Fz^Gj^f91<0kd@vJEh{gDMhzyh zL)PtLo@qq5ej4$8x6tpCpV3)q8CyqZoN2@XiK!C zy`$xW;oii=P{^Ja17f{j8>I2lF$0{Skl|R#mtXwqHEl&?F1!N9 z5uyYAj)qXgd3#t3E*g#x{zNj1t(nlvi@vs-(YTaqv|l|SlWxVKBB7&od@Y?r&OF*p znmZ!01kEa|d&qZu@%G>|Fw4W7jkO{x8kq3t8}9w#pAJFCSYY(lQ?2 zQqYD0$XTpHT#{=v9IGv-ejC<%w{X#B$#u;|6uOiWH$cYBbUudA&I-!|c=J~yi zj8xUs*62RQU&rHekIj}BQx$JE^5rV^d0asX<4XK(^ko|4c0xBYpL1ctDQXrO1_=;$9(dt;<}r_syk5M1Ckl>AlQqyoYZB9 zSF+nFJKE|_*%f~lhd!_?NF!sYTQA(5wH(r3b3Mlddw0WS+9@_p&~cxtQ9PwwJ-+i2 z0hpdO5QyvOZF-TJ6Pow7#)98852HC>a|@vqD;EVXD>QJ~Yt&^(FH9trbBF%gd*FzW z8t?OoEQX=OeRm%;@(rs8UDCo$c(*eSn%0hZ-eMoUD1Bqb^O~oYxYh<(jd0G!C=`fj z<~0ziux>du-iu8eajA-BmR)-an3^wgQa|D^kr^~#%s+OOFDDs{T?I6v?snlR+!4*5 znE_m>y7ZVw|-PyQtgR0YKyZj`rz(@AoPAt#p9O{!T>sX*bYJe`9 zZ5p(>#djKK(JtgFd|ZBlJ-YO_|L0AiO-uH13H4ImMdRt${VZ7Vp6cP)8kZ2F=Afh7 zp_AF7N%$c<>cl=`&WG~u8&i{yIpmhR^Iu7QD(|~}#zXBz4I~bVOM+kKX8c~LPrv_Q zl+OOJAn62Mq}vmK=;fRctO%264eNK&nfYip>B;>{#Yl=zr0+NvDZ8C8l~cG~8#5&+ zK|V}i)duRbc}a~0d7>twnq4}YgX5@bdQtDhu>*<^bz`3_<@68v93CZ7H(U9WCmKnC zoW&&t%*=wChTEk+tl+Aon4y}ob27aFo}cZIKReQQ%#wwSwfj57eG6C$B|ejL)l3S7 z4rKwy4xt#|xuiV5k4(S*^N8t!wxzoh=$9t;?Eb^hc!5paec){H!!5ub=8+j?yl#%H zW#iL{2fnHJQVndQy&ThNUn<{CPH!LgQ=jpClUILwMRvcvkyW?fa_F)Sgs{E(x|y&7 zN^5>zu(Kkg-uDCi^fw5=weJ13gKFuiJET3o`minQWeUL^Du~m!4the5oa-~J;1&1cYt3sTf_LFKkkNg>|JlBW`K+l51*mvRh6F0p9Cx#Z<*f~KrrkqY8 z8Pe1Z67{>ab!=9P7cr|2q^46OA+dl=HSr*w^9jt%U0felxUM@)T&*06!n7w$dvvQY z5U*yDA6YC6i#I2k^ndtkCEjdQWh}S4GRRDGT{3p%7r5ut4m5sr%qwwSUa3t@e`Z^A zDyw<6B;zCqc5*T9N_ac9;Vmu;zqavlj-iCt%*<9% zme~0;j6m3sTId*9%cUmkrttdSH>NKQpqYtANUpugTXHf85+KuayY5DAnq7E?rML4^ z_-O24RhBeJHg9`1jm}4X=xX%TbREDr3@ApC z(_=zR2eanpK>T0>SxMpyT#l8+W;yq0T+JRxk8rNy8!)?+TZ|9V0=n6JtsP#VO%(xD zXVowcyD)D5{njq?;VU2FR%kH8hg@pREhGAU8 zyP|dNO6&nhQT!vWmv&rtQQE#dA<vgs7h=PnN^=z225kAeY}Bu zxwW)Fr+ro;wOF*t3cM(HVF**#)ufs^@NR{ zQCqV`u1#hJ{V{s2w^cKNv+m8l5?2qa|M5ufh$lKh>1~CxWojRd9?vEg*)T767wV5O zM76T?0-YmyVMv^WR{AUo*@tZ-sL~)4Rv|w_({t$Qu7@M0Ut2~C)b2&ZF<{GpDm$_b zgp6y-s{n20wou%vNUO+SE1buLIAWfaSw=nl(D_LOuX$5(C#8j%1F1wF1<+AD^Bpc^3)S5xW*1<~I*Iy~W$iF^-SH1Z$x}>M| zZT{Zl4-;u`Wp1Y%EmS7&*l^UT&jG<<)tQo9+*REXz-`xenCzViF~Fm8TZB|YKk{q1 z9qbu`4<`f&JXp2ZQ*WT~;Zi%N)6>XeL+%?RtwT8i`|}a!!_#5~a*|tN7x}(JF`)?wd5Lp5!qB7VR%%EMbJQDKjRH2wzQ}+=N?540G3#`sL&$uy>_~ z=*k#}9J{WFoy$D2$WEPlm^mVLa)P+R+ zO!{D8#Fi(}%c5e7+wIc}Nfwy1QH%U#f>rKZGdFzI4?C9**7GiFYvDmHFN0l=1eeeO zUSGXz!a6@||K=%U{=P2{NXvpbVE9$8#1z=%xYBi|kH(LJ*c#W`*Ke}r-|4ou+g!Ym zV4ki8&bTU4><@+!6r!LeV2qO2{BLKrOZzoN_n#TI5^06CNGP zc3)pi*hTWFS$;Dsg$2tUwxbIIcEE7}?~*9y*61dhj&T01fWrI^3pOddeKj?_w-BY4 z5igU)j;jGQ%`7pNgP&#zeLB8lFFA5Grd+D9=h@-X?zY}c0niAZCw`2-`(|yhb|D2I zxKLfR?uoW3qEZO`;zbc?-l*z5u<0U@&qJFF{Cw6Q9AgB=k`VOB+Jy+cIhjWs^w*zg zIfxxaW%#agnqQeHG=d#Ebi@xsrIN5j$QlKlPn|Vd-e+}920@i58ahxC0gbQ)mI6)#+=*Ul|F;6r^as^t$}pql#d6M6gc!v@@L^V zJXRJ#Ji?KDVq+c)h^g^tMeEKw%(iPLP|j*qmvJwJo8B|dZ7Is_h#f-$HYYPij0e8&6dRp%@rZXIDMo|R=vYE9;h z(HwQVOTDIou>!B@)X6o87BqfxkUG#nGY&l93+giIi704`9@D?0XS6=SQs@lJZmFtI zdRuSuN$<9sI@zhCcEu3y;r%hPcH&)#<>g+lz@*pxrj2Fs*0tZ5ysaF?iu0_!p4M*F zN!9lg)YSQKcqrAPd9Kd-XU{-1P;CBTpCOkuCuc}xPO}m69cH#5-XXC8Ws}x}Kq#$w zt&Zh416GRP2lrML&^l`K8oQdL##w&Anis8=qH8bbp++S9N83<)ne8$5sSVd3f9QD*|DhctU~QVQb+zbrk)NGB5y&RR9|co6Md}imV`2CI1Vb!+QNDd*o96%VOz+SCJQV)F82-^&wZoSeJBcHN%%i=yJk&g6by z=zf&57Rt0x!PQ>EHwx}qv%C(>$JLz`P9dD~xhLgU)V6*NieUgnNYIzWu5tTjZrw2~ zXN|wSsz=)F%nRYn3Xvh&0?@0nbDa*+voi7-r5SEG;eD_V~ib**e?(5g%MTNI7lxp#9?=at==>F|EKT3G*Gs0-miWC6}v zIg_O#P;Tm)RT5|+`p@ejhmGajTj(pJ%BdR{B|5UULBAX#8`$flVtNEW4v1CEr-teN z5nJI+U-}P?2XR5+G8cY?sw~`frsEN+ zVfi49KlYY7^RhQnLL@%y5FdVS!@kTZf|=lqgJ)WWcZ-?*CCBEy|4M3i#vdK5%p*~WbKxY zNDud_v2%6Hj85$0k)P0Yf3c@RN@{^iSNNT@du!xwsj3DWh__b(6&5Hi{oY>jd99>g zLl?hxVReoG($fgJtES&E6eyQVtE_TsNA>xz@qM+Pk<(}eh*)Hg0BF^SRorkrufG$>-P2^ z01vekv<+tl7at537RO$zeHzRq-6Noo*wL6uA6S>kX__p{6G(EYXU*F#vx#_!{Ob3) zKiY(QK+ad+Y_Gxav!yWH+>$fby8HVg4n;mo6mC>$I9}=wBx`IP)M@Zwd)P5VW5s=#*yw?ZvNZV4H;^6P}Nz%JbaB+@n= z5$Jb5^?4Pq;7u~6@sje(0edu;M?gm*~1n<#^c@ zREqa|Yl4Jz)k0P{RCun?N`~qRysTcc%14~r38GBCsTg3TJFRf=PA&z2EjEpkHb!v` zN6Y#Oo1atYDOC^G;_F$1_3o9OrGUbQAp+T%RNxMe*rBVDn>g5|h+K|DqtyIxe1OW9 zu>{*Wi?WG)dfU=Pn>o6}515rMBSihJOnzqnwmk_$eJ?8%#FoZpE7;Z4J5YFAZ8Poz zpxCNwWMXZ5V`ZP~nrl+)X$iLA8xw513QJ4yEit{K^3;Oc@f*{Nu(}ob{vZ|?6{-

    x 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 SOE APCLIENTPP <--> MT + APCLIENTPP <-- The Witness Randomizer --> TW APCPP <--> SM64 APCPP <--> V6 end diff --git a/docs/network diagram.svg b/docs/network diagram.svg index e7bbd2cf08..927883a6d8 100644 --- a/docs/network diagram.svg +++ b/docs/network diagram.svg @@ -1 +1 @@ -
    Factorio
    Secret of Evermore
    WebHost (archipelago.gg)
    .NET
    Java
    Native
    SMZ3
    Super Metroid
    Ocarina of Time
    Final Fantasy 1
    A Link to the Past
    ChecksFinder
    FNA/XNA
    Unity
    Minecraft
    Secret of Evermore
    WebSockets
    Integrated
    Various, depending on SNES device
    LuaSockets
    Integrated
    LuaSockets
    Integrated
    Integrated
    WebSockets
    Various, depending on SNES device
    Various, depending on SNES device
    Various, depending on SNES device
    WebSockets
    WebSockets
    Mod the Spire
    TCP
    Forge Mod Loader
    WebSockets
    TsRandomizer
    RogueLegacyRandomizer
    BepInEx
    QModLoader (BepInEx)
    HK Modding API
    WebSockets
    SQL
    Subprocesses
    SQL
    Deposit Generated Worlds
    Provide Generation Instructions
    Subprocesses
    Subprocesses
    RCON
    UDP
    Integrated
    Factorio Server
    FactorioClient
    Factorio Games
    Factorio Mod Generated by AP
    Factorio Modding API
    SNES
    Configurable (waitress, gunicorn, flask)
    AutoHoster
    PonyORM DB
    WebHost
    Flask WebContent
    AutoGenerator
    Mod with Archipelago.MultiClient.Net
    Risk of Rain 2
    Subnautica
    Hollow Knight
    Raft
    Timespinner
    Rogue Legacy
    Mod with Archipelago.MultiClient.Java
    Slay the Spire
    Minecraft Forge Server
    Any Java Minecraft Clients
    Game using apclientpp Client Library
    Game using Apcpp Client Library
    Super Mario 64 Ex
    VVVVVV
    Meritous
    ap-soeclient
    SNES
    SNES
    OoTClient
    Lua Connector
    BizHawk with Ocarina of Time Loaded
    FF1Client
    Lua Connector
    BizHawk with Final Fantasy Loaded
    SNES
    ChecksFinderClient
    ChecksFinder
    Archipelago Server
    CommonClient.py
    Super Nintendo Interface (SNI)
    SNIClient
    \ No newline at end of file +
    Factorio
    Secret of Evermore
    WebHost (archipelago.gg)
    .NET
    Java
    Native
    SMZ3
    Super Metroid
    Ocarina of Time
    Final Fantasy 1
    A Link to the Past
    ChecksFinder
    FNA/XNA
    Unity
    Minecraft
    Secret of Evermore
    WebSockets
    Integrated
    Various, depending on SNES device
    LuaSockets
    Integrated
    LuaSockets
    Integrated
    Integrated
    WebSockets
    Various, depending on SNES device
    Various, depending on SNES device
    The Witness Randomizer
    Various, depending on SNES device
    WebSockets
    WebSockets
    Mod the Spire
    TCP
    Forge Mod Loader
    WebSockets
    TsRandomizer
    RogueLegacyRandomizer
    BepInEx
    QModLoader (BepInEx)
    HK Modding API
    WebSockets
    SQL
    Subprocesses
    SQL
    Deposit Generated Worlds
    Provide Generation Instructions
    Subprocesses
    Subprocesses
    RCON
    UDP
    Integrated
    Factorio Server
    FactorioClient
    Factorio Games
    Factorio Mod Generated by AP
    Factorio Modding API
    SNES
    Configurable (waitress, gunicorn, flask)
    AutoHoster
    PonyORM DB
    WebHost
    Flask WebContent
    AutoGenerator
    Mod with Archipelago.MultiClient.Net
    Risk of Rain 2
    Subnautica
    Hollow Knight
    Raft
    Timespinner
    Rogue Legacy
    Mod with Archipelago.MultiClient.Java
    Slay the Spire
    Minecraft Forge Server
    Any Java Minecraft Clients
    Game using apclientpp Client Library
    Game using Apcpp Client Library
    Super Mario 64 Ex
    VVVVVV
    Meritous
    The Witness
    ap-soeclient
    SNES
    SNES
    OoTClient
    Lua Connector
    BizHawk with Ocarina of Time Loaded
    FF1Client
    Lua Connector
    BizHawk with Final Fantasy Loaded
    SNES
    ChecksFinderClient
    ChecksFinder
    Archipelago Server
    CommonClient.py
    Super Nintendo Interface (SNI)
    SNIClient
    ```
    \ No newline at end of file diff --git a/worlds/witness/Disable_Unrandomized.txt b/worlds/witness/Disable_Unrandomized.txt new file mode 100644 index 0000000000..f5c60de6d9 --- /dev/null +++ b/worlds/witness/Disable_Unrandomized.txt @@ -0,0 +1,104 @@ +Event Items: +Shadows Laser Activation - 0x00021,0x17D28,0x17C71 +Bunker Laser Activation - 0x00061,0x17D01,0x17C42 +Monastery Laser Activation - 0x00A5B,0x17CE7,0x17FA9,0x17CA4 +Town Tower 4th Door Opens - 0x17CFB,0x3C12B,0x00B8D,0x17CF7 + +Requirement Changes: +0x17CA4 - True - True +0x28B39 - 0x2896A - Reflection +0x17CAB - True - True + +Region Changes: +Quarry (Quarry) - Outside Quarry - 0x17C09 - Quarry Mill - 0x275ED - Quarry Mill - 0x17CAC + +Disabled Locations: +0x03505 (Tutorial Gate Close) +0x0C335 (Tutorial Pillar) +0x0C373 (Tutorial Patio Floor) +0x009B8 (Symmetry Island Scenery Outlines 1) +0x003E8 (Symmetry Island Scenery Outlines 2) +0x00A15 (Symmetry Island Scenery Outlines 3) +0x00B53 (Symmetry Island Scenery Outlines 4) +0x00B8D (Symmetry Island Scenery Outlines 5) +0x00143 (Orchard Apple Tree 1) +0x0003B (Orchard Apple Tree 2) +0x00055 (Orchard Apple Tree 3) +0x032F7 (Orchard Apple Tree 4) +0x032FF (Orchard Apple Tree 5) +0x168B5 (Shadows Lower Avoid 1) +0x198BD (Shadows Lower Avoid 2) +0x198BF (Shadows Lower Avoid 3) +0x19771 (Shadows Lower Avoid 4) +0x0A8DC (Shadows Lower Avoid 5) +0x0AC74 (Shadows Lower Avoid 6) +0x0AC7A (Shadows Lower Avoid 7) +0x0A8E0 (Shadows Lower Avoid 8) +0x386FA (Shadows Environmental Avoid 1) +0x1C33F (Shadows Environmental Avoid 2) +0x196E2 (Shadows Environmental Avoid 3) +0x1972A (Shadows Environmental Avoid 4) +0x19809 (Shadows Environmental Avoid 5) +0x19806 (Shadows Environmental Avoid 6) +0x196F8 (Shadows Environmental Avoid 7) +0x1972F (Shadows Environmental Avoid 8) +0x19797 (Shadows Follow 1) +0x1979A (Shadows Follow 2) +0x197E0 (Shadows Follow 3) +0x197E8 (Shadows Follow 4) +0x197E5 (Shadows Follow 5) +0x19650 (Shadows Laser) +0x00139 (Keep Hedge Maze 1) +0x019DC (Keep Hedge Maze 2) +0x019E7 (Keep Hedge Maze 3) +0x01A0F (Keep Hedge Maze 4) +0x0360E (Laser Hedges) +0x00290 (Monastery Rhombic Avoid 1) +0x00038 (Monastery Rhombic Avoid 2) +0x00037 (Monastery Rhombic Avoid 3) +0x193A7 (Monastery Branch Avoid 1) +0x193AA (Monastery Branch Avoid 2) +0x193AB (Monastery Branch Follow 1) +0x193A6 (Monastery Branch Follow 2) +0x17CA4 (Monastery Laser) - 0x193A6 - True +0x18590 (Tree Outlines) - True - Symmetry & Environment +0x28AE3 (Vines Shadows Follow) - 0x18590 - Shadows Follow & Environment +0x28938 (Four-way Apple Tree) - 0x28AE3 - Environment +0x079DF (Triple Environmental Puzzle) - 0x28938 - Shadows Avoid & Environment & Reflection +0x28B39 (Hexagonal Reflection) - 0x079DF & 0x2896A - Reflection +0x03553 (Theater Tutorial Video) +0x03552 (Theater Desert Video) +0x0354E (Theater Jungle Video) +0x03549 (Theater Challenge Video) +0x0354F (Theater Shipwreck Video) +0x03545 (Theater Mountain Video) +0x002C4 (Waves 1) +0x00767 (Waves 2) +0x002C6 (Waves 3) +0x0070E (Waves 4) +0x0070F (Waves 5) +0x0087D (Waves 6) +0x002C7 (Waves 7) +0x15ADD (River Rhombic Avoid Vault) +0x03702 (River Vault Box) +0x17C2E (Door to Bunker) - True - Squares & Black/White Squares +0x09F7D (Bunker Drawn Squares 1) +0x09FDC (Bunker Drawn Squares 2) +0x09FF7 (Bunker Drawn Squares 3) +0x09F82 (Bunker Drawn Squares 4) +0x09FF8 (Bunker Drawn Squares 5) +0x09D9F (Bunker Drawn Squares 6) +0x09DA1 (Bunker Drawn Squares 7) +0x09DA2 (Bunker Drawn Squares 8) +0x09DAF (Bunker Drawn Squares 9) +0x0A010 (Bunker Drawn Squares through Tinted Glass 1) +0x0A01B (Bunker Drawn Squares through Tinted Glass 2) +0x0A01F (Bunker Drawn Squares through Tinted Glass 3) +0x0A099 (Door to Bunker Proper) +0x34BC5 (Bunker Drop-Down Door Open) +0x34BC6 (Bunker Drop-Down Door Close) +0x17E63 (Bunker Drop-Down Door Squares 1) +0x17E67 (Bunker Drop-Down Door Squares 2) +0x09DE0 (Bunker Laser) +0x0A079 (Bunker Elevator Control) +0x0042D (Mountaintop River Shape) \ No newline at end of file diff --git a/worlds/witness/Options.py b/worlds/witness/Options.py new file mode 100644 index 0000000000..c150225d86 --- /dev/null +++ b/worlds/witness/Options.py @@ -0,0 +1,71 @@ +from typing import Dict +from BaseClasses import MultiWorld +from Options import Toggle, DefaultOnToggle, Option + + +# class HardMode(Toggle): +# "Play the randomizer in hardmode" +# display_name = "Hard Mode" + +# class UnlockSymbols(DefaultOnToggle): +# "All Puzzle symbols of a specific panel need to be unlocked before the panel can be used" +# display_name = "Unlock Symbols" + +class DisableNonRandomizedPuzzles(DefaultOnToggle): + """Disable puzzles that cannot be randomized. + Non randomized puzzles are Shadows, Monastery, and Greenhouse. + The lasers for those areas will be activated as you solve optional puzzles throughout the island.""" + display_name = "Disable non randomized puzzles" + + +class ShuffleDiscardedPanels(Toggle): + """Discarded Panels will have items on them. + Solving certain Discarded Panels may still be necessary!""" + display_name = "Shuffle Discarded Panels" + + +class ShuffleVaultBoxes(Toggle): + """Vault Boxes will have items on them.""" + display_name = "Shuffle Vault Boxes" + + +class ShuffleUncommonLocations(Toggle): + """Adds the following checks to the pool: + Mountaintop River Shape, Tutorial Patio Floor, Theater Videos""" + display_name = "Shuffle Uncommon Locations" + + +class ShuffleHardLocations(Toggle): + """Adds some harder locations into the game, e.g. Mountain Secret Area panels""" + display_name = "Shuffle Hard Locations" + + +class ChallengeVictoryCondition(Toggle): + """The victory condition now becomes beating the Challenge area, + instead of the final elevator.""" + display_name = "Victory on beating the Challenge" + + +the_witness_options: Dict[str, Option] = { + # "hard_mode": HardMode, + # "unlock_symbols": UnlockSymbols, + "disable_non_randomized_puzzles": DisableNonRandomizedPuzzles, + "shuffle_discarded_panels": ShuffleDiscardedPanels, + "shuffle_vault_boxes": ShuffleVaultBoxes, + "shuffle_uncommon": ShuffleUncommonLocations, + "shuffle_hard": ShuffleHardLocations, + "challenge_victory": ChallengeVictoryCondition +} + + +def is_option_enabled(world: MultiWorld, player: int, name: str) -> bool: + return get_option_value(world, player, name) > 0 + + +def get_option_value(world: MultiWorld, player: int, name: str) -> int: + option = getattr(world, name, None) + + if option is None: + return 0 + + return int(option[player].value) diff --git a/worlds/witness/WitnessItems.txt b/worlds/witness/WitnessItems.txt new file mode 100644 index 0000000000..2eb8d735eb --- /dev/null +++ b/worlds/witness/WitnessItems.txt @@ -0,0 +1,21 @@ +Progression: +0 - Dots +1 - Colored Dots +5 - Sound Dots +10 - Symmetry +20 - Triangles +30 - Eraser +40 - Shapers +41 - Rotated Shapers +50 - Negative Shapers +60 - Stars +61 - Stars + Same Colored Symbol +71 - Black/White Squares +72 - Colored Squares + +Boosts: +500 - Speed Boost + +Traps: +600 - Slowness Trap +610 - Power Surge Trap diff --git a/worlds/witness/WitnessLogic.txt b/worlds/witness/WitnessLogic.txt new file mode 100644 index 0000000000..5a9d9de502 --- /dev/null +++ b/worlds/witness/WitnessLogic.txt @@ -0,0 +1,712 @@ +First Hallway (First Hallway) - Entry - True: +0x00064 (Straight) - True - True +0x00182 (Bend) - 0x00064 - True + +Tutorial (Tutorial) - First Hallway - 0x00182: +0x00293 (Front Center) - True - True +0x00295 (Center Left) - 0x00293 - True +0x002C2 (Front Left) - 0x00295 - True +0x0A3B5 (Back Left) - True - True +0x0A3B2 (Back Right) - True - True +0x03629 (Gate Open) - 0x002C2 & 0x0A3B5 & 0x0A3B2 - True +0x03505 (Gate Close) - 0x2FAF6 - True +0x0C335 (Pillar) - True - Triangles - True +0x0C373 (Patio Floor) - 0x0C335 - True + +Outside Tutorial (Outside Tutorial) - Tutorial - 0x03629: +0x033D4 (Vault) - True - Dots & Squares & Black/White Squares +0x03481 (Vault Box) - 0x033D4 - True +0x0A171 (Optional Door 1) - 0x0A3B5 - Dots +0x17CFB (Discard) - 0x0A171 - Triangles +0x04CA4 (Optional Door 2) - 0x0A171 - Dots & Squares & Black/White Squares +0x0005D (Dots Introduction 1) - True - Dots +0x0005E (Dots Introduction 2) - 0x0005D - Dots +0x0005F (Dots Introduction 3) - 0x0005E - Dots +0x00060 (Dots Introduction 4) - 0x0005F - Dots +0x00061 (Dots Introduction 5) - 0x00060 - Dots +0x018AF (Squares Introduction 1) - True - Squares & Black/White Squares +0x0001B (Squares Introduction 2) - 0x018AF - Squares & Black/White Squares +0x012C9 (Squares Introduction 3) - 0x0001B - Squares & Black/White Squares +0x0001C (Squares Introduction 4) - 0x012C9 - Squares & Black/White Squares +0x0001D (Squares Introduction 5) - 0x0001C - Squares & Black/White Squares +0x0001E (Squares Introduction 6) - 0x0001D - Squares & Black/White Squares +0x0001F (Squares Introduction 7) - 0x0001E - Squares & Black/White Squares +0x00020 (Squares Introduction 8) - 0x0001F - Squares & Black/White Squares +0x00021 (Squares Introduction 9) - 0x00020 - Squares & Black/White Squares + +Main Island () - Outside Tutorial - True: + +Outside Glass Factory (Glass Factory) - Main Island - True: +0x01A54 (Entry Door) - True - Symmetry +0x3C12B (Discard) - True - Triangles + +Inside Glass Factory (Glass Factory) - Outside Glass Factory - 0x01A54: +0x00086 (Vertical Symmetry 1) - True - Symmetry +0x00087 (Vertical Symmetry 2) - 0x00086 - Symmetry +0x00059 (Vertical Symmetry 3) - 0x00087 - Symmetry +0x00062 (Vertical Symmetry 4) - 0x00059 - Symmetry +0x0005C (Vertical Symmetry 5) - 0x00062 - Symmetry +0x0008D (Rotational Symmetry 1) - 0x0005C - Symmetry +0x00081 (Rotational Symmetry 2) - 0x0008D - Symmetry +0x00083 (Rotational Symmetry 3) - 0x00081 - Symmetry +0x00084 (Melting 1) - 0x00083 - Symmetry +0x00082 (Melting 2) - 0x00084 - Symmetry +0x0343A (Melting 3) - 0x00082 - Symmetry +0x17CC8 (Boat Spawn) - True - Boat + +Outside Symmetry Island (Symmetry Island) - Main Island - True: +0x000B0 (Door to Symmetry Island Lower) - True - Dots + +Symmetry Island Lower (Symmetry Island) - Outside Symmetry Island - 0x000B0: +0x00022 (Black Dots 1) - True - Symmetry & Dots +0x00023 (Black Dots 2) - 0x00022 - Symmetry & Dots +0x00024 (Black Dots 3) - 0x00023 - Symmetry & Dots +0x00025 (Black Dots 4) - 0x00024 - Symmetry & Dots +0x00026 (Black Dots 5) - 0x00025 - Symmetry & Dots +0x0007C (Colored Dots 1) - 0x00026 - Symmetry & Colored Dots +0x0007E (Colored Dots 2) - 0x0007C - Symmetry & Colored Dots +0x00075 (Colored Dots 3) - 0x0007E - Symmetry & Colored Dots +0x00073 (Colored Dots 4) - 0x00075 - Symmetry & Colored Dots +0x00077 (Colored Dots 5) - 0x00073 - Symmetry & Colored Dots +0x00079 (Colored Dots 6) - 0x00077 - Symmetry & Colored Dots +0x00065 (Fading Lines 1) - 0x00079 - Symmetry & Colored Dots +0x0006D (Fading Lines 2) - 0x00065 - Symmetry & Colored Dots +0x00072 (Fading Lines 3) - 0x0006D - Symmetry & Colored Dots +0x0006F (Fading Lines 4) - 0x00072 - Symmetry & Colored Dots +0x00070 (Fading Lines 5) - 0x0006F - Symmetry & Colored Dots +0x00071 (Fading Lines 6) - 0x00070 - Symmetry & Colored Dots +0x00076 (Fading Lines 7) - 0x00071 - Symmetry & Colored Dots +0x009B8 (Scenery Outlines 1) - True - Symmetry & Environment +0x003E8 (Scenery Outlines 2) - 0x009B8 - Symmetry & Environment +0x00A15 (Scenery Outlines 3) - 0x003E8 - Symmetry & Environment +0x00B53 (Scenery Outlines 4) - 0x00A15 - Symmetry & Environment +0x00B8D (Scenery Outlines 5) - 0x00B53 - Symmetry & Environment +0x1C349 (Door to Symmetry Island Upper) - 0x00076 - Symmetry & Dots + +Symmetry Island Upper (Symmetry Island) - Symmetry Island Lower - 0x1C349: +0x00A52 (Yellow 1) - True - Symmetry & Colored Dots +0x00A57 (Yellow 2) - 0x00A52 - Symmetry & Colored Dots +0x00A5B (Yellow 3) - 0x00A57 - Symmetry & Colored Dots +0x00A61 (Blue 1) - 0x00A52 - Symmetry & Colored Dots +0x00A64 (Blue 2) - 0x00A61 & 0x00A52 - Symmetry & Colored Dots +0x00A68 (Blue 3) - 0x00A64 & 0x00A57 - Symmetry & Colored Dots +0x0360D (Laser) - 0x00A68 - True + +Orchard (Orchard) - Main Island - True: +0x00143 (Apple Tree 1) - True - Environment +0x0003B (Apple Tree 2) - 0x00143 - Environment +0x00055 (Apple Tree 3) - 0x0003B - Environment +0x032F7 (Apple Tree 4) - 0x00055 - Environment +0x032FF (Apple Tree 5) - 0x032F7 - Environment + +Desert Outside (Desert) - Main Island - True: +0x0CC7B (Vault) - True - Dots & Shapers & Rotated Shapers & Negative Shapers +0x0339E (Vault Box) - 0x0CC7B - True +0x17CE7 (Discard) - True - Triangles +0x00698 (Sun Reflection 1) - True - Reflection +0x0048F (Sun Reflection 2) - 0x00698 - Reflection +0x09F92 (Sun Reflection 3) - 0x0048F & 0x09FA0 - Reflection +0x09FA0 (Reflection 3 Control) - 0x0048F - True +0x0A036 (Sun Reflection 4) - 0x09F92 - Reflection +0x09DA6 (Sun Reflection 5) - 0x09F92 - Reflection +0x0A049 (Sun Reflection 6) - 0x09F92 - Reflection +0x0A053 (Sun Reflection 7) - 0x0A036 & 0x09DA6 & 0x0A049 - Reflection +0x09F94 (Sun Reflection 8) - 0x0A053 & 0x09F86 - Reflection +0x09F86 (Reflection 8 Control) - 0x0A053 - True +0x0C339 (Door to Desert Flood Light Room) - 0x09F94 - True + +Desert Floodlight Room (Desert) - Desert Outside - 0x0C339: +0x09FAA (Light Control) - True - True +0x00422 (Artificial Light Reflection 1) - 0x09FAA - Reflection +0x006E3 (Artificial Light Reflection 2) - 0x09FAA - Reflection +0x0A02D (Artificial Light Reflection 3) - 0x09FAA & 0x00422 & 0x006E3 - Reflection + +Desert Pond Room (Desert) - Desert Floodlight Room - 0x0A02D: +0x00C72 (Pond Reflection 1) - True - Reflection +0x0129D (Pond Reflection 2) - 0x00C72 - Reflection +0x008BB (Pond Reflection 3) - 0x0129D - Reflection +0x0078D (Pond Reflection 4) - 0x008BB - Reflection +0x18313 (Pond Reflection 5) - 0x0078D - Reflection +0x0A249 (Door to Desert Water Levels Room) - 0x18313 - Reflection + +Desert Water Levels Room (Desert) - Desert Pond Room - 0x0A249: +0x1C2DF (Reduce Water Level Far Left) - True - True +0x1831E (Reduce Water Level Far Right) - True - True +0x1C260 (Reduce Water Level Near Left) - True - True +0x1831C (Reduce Water Level Near Right) - True - True +0x1C2F3 (Raise Water Level Far Left) - True - True +0x1831D (Raise Water Level Far Right) - True - True +0x1C2B1 (Raise Water Level Near Left) - True - True +0x1831B (Raise Water Level Near Right) - True - True +0x04D18 (Flood Reflection 1) - True - Reflection +0x01205 (Flood Reflection 2) - 0x04D18 - Reflection +0x181AB (Flood Reflection 3) - 0x01205 - Reflection +0x0117A (Flood Reflection 4) - 0x181AB - Reflection +0x17ECA (Flood Reflection 5) - 0x0117A - Reflection +0x18076 (Flood Reflection 6) - 0x17ECA - Reflection + +Desert Elevator Room (Desert) - Desert Water Levels Room - 0x18076: +0x17C31 (Final Transparent Reflection) - True - Reflection +0x012D7 (Final Reflection) - 0x17C31 & 0x0A015 - Reflection +0x012D7 (Final Reflection) - 0x17C31 & 0x0A015 - Reflection +0x0A015 (Final Reflection Control) - 0x17C31 - True +0x0A15C (Final Bent Reflection 1) - True - Reflection +0x09FFF (Final Bent Reflection 2) - 0x0A15C - Reflection +0x0A15F (Final Bent Reflection 3) - 0x09FFF - Reflection +0x03608 (Laser) - 0x012D7 & 0x0A15F - True + +Outside Quarry (Quarry) - Main Island - True: +0x09E57 (Door to Quarry 1) - True - Squares & Black/White Squares +0x17C09 (Door to Quarry 2) - 0x09E57 - Shapers +0x17CC4 (Elevator Control) - 0x0367C - Dots & Eraser + +Quarry (Quarry) - Outside Quarry - 0x17C09 - Quarry Mill - 0x275ED - Quarry Mill - 0x17CAC - Shadows Ledge - 0x198BF: +0x01E5A (Door to Mill Left) - True - Squares & Black/White Squares +0x01E59 (Door to Mill Right) - True - Dots +0x17CF0 (Discard) - True - Triangles +0x03612 (Laser) - 0x0A3D0 & 0x0367C - Eraser & Shapers + +Quarry Mill (Quarry Mill) - Quarry - 0x01E59 & 0x01E5A: +0x275ED (Ground Floor Shortcut Door) - True - True +0x03678 (Lower Ramp Control) - True - Dots & Eraser +0x00E0C (Eraser and Dots 1) - 0x03678 - Dots & Eraser +0x01489 (Eraser and Dots 2) - 0x00E0C - Dots & Eraser +0x0148A (Eraser and Dots 3) - 0x01489 - Dots & Eraser +0x014D9 (Eraser and Dots 4) - 0x0148A - Dots & Eraser +0x014E7 (Eraser and Dots 5) - 0x014D9 - Dots & Eraser +0x014E8 (Eraser and Dots 6) - 0x014E7 - Dots & Eraser +0x03679 (Lower Lift Control) - 0x014E8 - Dots & Eraser +0x03675 (Upper Ramp Control) - 0x03679 - Dots & Eraser +0x03676 (Upper Lift Control) - 0x03679 - Dots & Eraser +0x00557 (Eraser and Squares 1) - 0x03679 - Squares & Colored Squares & Eraser +0x005F1 (Eraser and Squares 2) - 0x00557 - Squares & Colored Squares & Eraser +0x00620 (Eraser and Squares 3) - 0x005F1 - Squares & Colored Squares & Eraser +0x009F5 (Eraser and Squares 4) - 0x00620 - Squares & Colored Squares & Eraser +0x0146C (Eraser and Squares 5) - 0x009F5 - Squares & Colored Squares & Eraser +0x3C12D (Eraser and Squares 6) - 0x0146C - Squares & Colored Squares & Eraser +0x03686 (Eraser and Squares 7) - 0x3C12D - Squares & Colored Squares & Eraser +0x014E9 (Eraser and Squares 8) - 0x03686 - Squares & Colored Squares & Eraser +0x03677 (Stair Control) - 0x014E8 - Squares & Colored Squares & Eraser +0x3C125 (Big Squares & Dots & and Eraser) - 0x0367C - Squares & Black/White Squares & Dots & Eraser +0x0367C (Small Squares & Dots & and Eraser) - 0x014E9 - Squares & Colored Squares & Dots & Eraser +0x17CAC (Door to Outside Quarry Stairs) - True - True + +Quarry Boathouse (Quarry Boathouse) - Quarry - True: +0x034D4 (Intro Stars) - True - Stars +0x021D5 (Intro Shapers) - True - Shapers & Rotated Shapers +0x03852 (Ramp Height Control) - 0x034D4 & 0x021D5 - Rotated Shapers +0x021B3 (Eraser and Shapers 1) - 0x03852 - Shapers & Eraser +0x021B4 (Eraser and Shapers 2) - 0x021B3 - Shapers & Eraser +0x021B0 (Eraser and Shapers 3) - 0x021B4 - Shapers & Eraser +0x021AF (Eraser and Shapers 4) - 0x021B0 - Shapers & Eraser +0x021AE (Eraser and Shapers 5) - 0x021AF - Shapers & Eraser & Broken Shapers +0x03858 (Ramp Horizontal Control) - 0x021AE - Shapers & Eraser +0x38663 (Shortcut Door) - 0x03858 - True +0x021B5 (Stars and Colored Eraser 1) - 0x03858 - Stars & Stars + Same Colored Symbol & Eraser +0x021B6 (Stars and Colored Eraser 2) - 0x021B5 - Stars & Stars + Same Colored Symbol & Eraser +0x021B7 (Stars and Colored Eraser 3) - 0x021B6 - Stars & Stars + Same Colored Symbol & Eraser +0x021BB (Stars and Colored Eraser 4) - 0x021B7 - Stars & Stars + Same Colored Symbol & Eraser +0x09DB5 (Stars and Colored Eraser 5) - 0x021BB - Stars & Stars + Same Colored Symbol & Eraser +0x09DB1 (Stars and Colored Eraser 6) - 0x09DB5 - Stars & Stars + Same Colored Symbol & Eraser +0x3C124 (Stars and Colored Eraser 7) - 0x09DB1 - Stars & Stars + Same Colored Symbol & Eraser +0x09DB3 (Stars & Eraser & and Shapers 1) - 0x3C124 - Stars & Eraser & Shapers +0x09DB4 (Stars & Eraser & and Shapers 2) - 0x09DB3 - Stars & Eraser & Shapers +0x275FA (Hook Control) - 0x03858 - Shapers & Eraser +0x17CA6 (Boat Spawn) - True - Boat +0x0A3CB (Stars & Eraser & and Shapers 3) - 0x09DB4 - Stars & Eraser & Shapers +0x0A3CC (Stars & Eraser & and Shapers 4) - 0x0A3CB - Stars & Eraser & Shapers +0x0A3D0 (Stars & Eraser & and Shapers 5) - 0x0A3CC - Stars & Eraser & Shapers + +Shadows (Shadows) - Main Island - True - Keep Glass Plates - 0x09E49: +0x334DB (Door Timer Outside) - True - True +0x0AC74 (Lower Avoid 6) - 0x0A8DC - Shadows Avoid +0x0AC7A (Lower Avoid 7) - 0x0AC74 - Shadows Avoid +0x0A8E0 (Lower Avoid 8) - 0x0AC7A - Shadows Avoid +0x386FA (Environmental Avoid 1) - 0x0A8E0 - Shadows Avoid & Environment +0x1C33F (Environmental Avoid 2) - 0x386FA - Shadows Avoid & Environment +0x196E2 (Environmental Avoid 3) - 0x1C33F - Shadows Avoid & Environment +0x1972A (Environmental Avoid 4) - 0x196E2 - Shadows Avoid & Environment +0x19809 (Environmental Avoid 5) - 0x1972A - Shadows Avoid & Environment +0x19806 (Environmental Avoid 6) - 0x19809 - Shadows Avoid & Environment +0x196F8 (Environmental Avoid 7) - 0x19806 - Shadows Avoid & Environment +0x1972F (Environmental Avoid 8) - 0x196F8 - Shadows Avoid & Environment +0x19797 (Follow 1) - 0x0A8E0 - Shadows Follow +0x1979A (Follow 2) - 0x19797 - Shadows Follow +0x197E0 (Follow 3) - 0x1979A - Shadows Follow +0x197E8 (Follow 4) - 0x197E0 - Shadows Follow +0x197E5 (Follow 5) - 0x197E8 - Shadows Follow +0x19650 (Laser) - 0x197E5 & 0x196F8 - Shadows Avoid & Shadows Follow + +Shadows Ledge (Shadows) - Shadows - 0x334DB | 0x334DC | 0x0A8DC: +0x334DC (Door Timer Inside) - True - True +0x168B5 (Lower Avoid 1) - True - Shadows Avoid +0x198BD (Lower Avoid 2) - 0x168B5 - Shadows Avoid +0x198BF (Lower Avoid 3) - 0x198BD & 0x334DC - Shadows Avoid +0x19771 (Lower Avoid 4) - 0x198BF - Shadows Avoid +0x0A8DC (Lower Avoid 5) - 0x19771 - Shadows Avoid + +Keep (Keep) - Main Island - True: + +Keep Hedges (Keep) - Keep - True: +0x00139 (Hedge Maze 1) - True - Environment +0x019DC (Hedge Maze 2) - 0x00139 - Environment +0x019E7 (Hedge Maze 3) - 0x019DC - Environment & Sound +0x01A0F (Hedge Maze 4) - 0x019E7 - Environment + +Keep Glass Plates (Keep) - Keep - True - Keep Tower - 0x0361B: +0x0A3A8 (Reset Pressure Plates 1) - True - True +0x033EA (Pressure Plates 1) - 0x0A3A8 - Pressure Plates & Dots +0x0A3B9 (Reset Pressure Plates 2) - 0x033EA - True +0x01BE9 (Pressure Plates 2) - 0x033EA & 0x0A3B9 - Pressure Plates & Stars & Stars + Same Colored Symbol & Squares & Black/White Squares +0x0A3BB (Reset Pressure Plates 3) - 0x0A3A8 - True +0x01CD3 (Pressure Plates 3) - 0x0A3A8 & 0x0A3BB - Pressure Plates & Shapers & Squares & Black/White Squares & Colored Squares +0x0A3AD (Reset Pressure Plates 4) - 0x01CD3 - True +0x01D3F (Pressure Plates 4) - 0x01CD3 & 0x0A3AD - Pressure Plates & Shapers & Dots & Symmetry +0x17D27 (Discard) - 0x01CD3 - Triangles +0x09E49 (Shortcut to Shadows) - 0x01CD3 - True + +Shipwreck (Shipwreck) - Keep Glass Plates - 0x033EA: +0x00AFB (Vault) - True - Symmetry & Sound & Sound Dots & Colored Dots +0x03535 (Vault Box) - 0x00AFB - True +0x17D28 (Discard) - True - Triangles + +Keep Tower (Keep) - Keep Hedges - 0x01A0F - Keep Glass Plates - 0x01D3F: +0x0361B (Shortcut to Keep Glass Plates) - True - True +0x0360E (Laser Hedges) - 0x01A0F - Environment & Sound +0x03317 (Laser Pressure Plates) - 0x01D3F - Shapers & Squares & Black/White Squares & Colored Squares & Stars & Stars + Same Colored Symbol & Dots + +Outside Monastery (Monastery) - Main Island - True: +0x03713 (Shortcut) - True - True +0x00B10 (Door Open Left) - True - True +0x00C92 (Door Open Right) - True - True +0x00290 (Rhombic Avoid 1) - 0x09D9B - Environment +0x00038 (Rhombic Avoid 2) - 0x09D9B & 0x00290 - Environment +0x00037 (Rhombic Avoid 3) - 0x09D9B & 0x00038 - Environment +0x17CA4 (Laser) - 0x193A6 - True + +Inside Monastery (Monastery) - Outside Monastery - 0x00B10 & 0x00C92: +0x09D9B (Overhead Door Control) - True - Dots +0x193A7 (Branch Avoid 1) - 0x00037 - Environment +0x193AA (Branch Avoid 2) - 0x193A7 - Environment +0x193AB (Branch Follow 1) - 0x193AA - Environment +0x193A6 (Branch Follow 2) - 0x193AB - Environment + +Monastery Garden (Monastery) - Outside Monastery - 0x00037 - Outside Jungle River - 0x17CAA: + +Town (Town) - Main Island - True - Theater - 0x0A168 | 0x33AB2: +0x0A054 (Boat Summon) - True - Boat +0x0A0C8 (Cargo Box) - True - Squares & Black/White Squares & Shapers +0x17D01 (Cargo Box Discard) - 0x0A0C8 - Triangles +0x09F98 (Desert Laser Redirect) - True - True +0x18590 (Tree Outlines) - True - Symmetry & Environment +0x28AE3 (Vines Shadows Follow) - 0x18590 - Shadows Follow & Environment +0x28938 (Four-way Apple Tree) - 0x28AE3 - Environment +0x079DF (Triple Environmental Puzzle) - 0x28938 - Shadows Avoid & Environment & Reflection +0x28B39 (Hexagonal Reflection) - 0x079DF & 0x2896A - Reflection +0x28998 (Tinted Door to RGB House) - True - Stars & Rotated Shapers +0x28A0D (Door to Church) - 0x28998 - Stars & RGB & Environment +0x28A69 (Square Avoid) - 0x28A0D - Environment +0x28A79 (Maze Stair Control) - True - Environment +0x2896A (Maze Rooftop Bridge Control) - 0x28A79 - Shapers +0x17C71 (Rooftop Discard) - 0x2896A - Triangles +0x28AC7 (Symmetry Squares 1) - 0x2896A - Symmetry & Squares & Black/White Squares +0x28AC8 (Symmetry Squares 2) - 0x28AC7 - Symmetry & Squares & Black/White Squares +0x28ACA (Symmetry Squares 3 + Dots) - 0x28AC8 - Symmetry & Squares & Black/White Squares & Dots +0x28ACB (Symmetry Squares 4 + Dots) - 0x28ACA - Symmetry & Squares & Black/White Squares & Dots +0x28ACC (Symmetry Squares 5 + Dots) - 0x28ACB - Symmetry & Squares & Black/White Squares & Dots +0x2899C (Full Dot Grid Shapers 1) - True - Rotated Shapers & Dots +0x28A33 (Full Dot Grid Shapers 2) - 0x2899C - Shapers & Dots +0x28ABF (Full Dot Grid Shapers 3) - 0x28A33 - Shapers & Rotated Shapers & Dots +0x28AC0 (Full Dot Grid Shapers 4) - 0x28ABF - Rotated Shapers & Dots +0x28AC1 (Full Dot Grid Shapers 5) - 0x28AC0 - Rotated Shapers & Dots +0x28AD9 (Shapers & Dots & and Eraser) - 0x28AC1 - Rotated Shapers & Dots & Eraser +0x17F5F (Windmill Door) - True - Dots + +RGB House (Town) - Town - 0x28998: +0x034E4 (Sound Room Left) - True - Sound & Sound Waves +0x034E3 (Sound Room Right) - True - Sound & Sound Dots +0x334D8 (RGB Control) - 0x034E4 & 0x034E3 - Rotated Shapers & RGB & Squares & Colored Squares +0x03C0C (RGB Squares) - 0x334D8 - RGB & Squares & Colored Squares & Black/White Squares +0x03C08 (RGB Stars) - 0x334D8 - RGB & Stars + +Town Tower Top (Town) - Town - 0x28A69 & 0x28B39 & 0x28ACC & 0x28AD9: +0x032F5 (Laser) - True - True + +Windmill Interior (Windmill) - Town - 0x17F5F: +0x17D02 (Turn Control) - True - Dots +0x17F89 (Door to Front of Theater) - True - Squares & Black/White Squares + +Theater (Theater) - Windmill Interior - 0x17F89: +0x00815 (Video Input) - True - True +0x03553 (Tutorial Video) - 0x00815 & 0x03481 - True +0x03552 (Desert Video) - 0x00815 & 0x0339E - True +0x0354E (Jungle Video) - 0x00815 & 0x03702 - True +0x03549 (Challenge Video) - 0x00815 & 0x2FAF6 - True +0x0354F (Shipwreck Video) - 0x00815 & 0x03535 - True +0x03545 (Mountain Video) - 0x00815 & 0x03542 - True +0x0A168 (Door to Cargo Box Left) - True - Squares & Black/White Squares & Eraser +0x33AB2 (Door to Cargo Box Right) - True - Squares & Black/White Squares & Shapers +0x17CF7 (Discard) - True - Triangles + +Jungle (Jungle) - Main Island - True: +0x17CDF (Shore Boat Spawn) - True - Boat +0x17F9B (Discard) - True - Triangles +0x002C4 (Waves 1) - True - Sound & Sound Waves +0x00767 (Waves 2) - 0x002C4 - Sound & Sound Waves +0x002C6 (Waves 3) - 0x00767 - Sound & Sound Waves +0x0070E (Waves 4) - 0x002C6 - Sound & Sound Waves +0x0070F (Waves 5) - 0x0070E - Sound & Sound Waves +0x0087D (Waves 6) - 0x0070F - Sound & Sound Waves +0x002C7 (Waves 7) - 0x0087D - Sound & Sound Waves +0x17CAB (Popup Wall Control) - 0x002C7 - True +0x0026D (Popup Wall 1) - 0x17CAB - Sound & Sound Dots +0x0026E (Popup Wall 2) - 0x0026D - Sound & Sound Dots +0x0026F (Popup Wall 3) - 0x0026E - Sound & Sound Dots +0x00C3F (Popup Wall 4) - 0x0026F - Sound & Sound Dots +0x00C41 (Popup Wall 5) - 0x00C3F - Sound & Sound Dots +0x014B2 (Popup Wall 6) - 0x00C41 - Sound & Sound Dots +0x03616 (Laser) - 0x014B2 - True +0x337FA (Shortcut to River) - True - True + +Outside Jungle River (River) - Main Island - True - Jungle - 0x337FA: +0x17CAA (Rhombic Avoid to Monastery Garden) - True - Environment +0x15ADD (Rhombic Avoid Vault) - True - Environment +0x03702 (Vault Box) - 0x15ADD - True + +Outside Bunker (Bunker) - Main Island - True - Inside Bunker - 0x0A079: +0x17C2E (Door to Bunker) - True - Squares & Black/White Squares +0x09DE0 (Laser) - 0x0A079 - True + +Inside Bunker (Bunker) - Outside Bunker - 0x17C2E: +0x09F7D (Drawn Squares 1) - True - Squares & Colored Squares +0x09FDC (Drawn Squares 2) - 0x09F7D - Squares & Colored Squares & Black/White Squares +0x09FF7 (Drawn Squares 3) - 0x09FDC - Squares & Colored Squares & Black/White Squares +0x09F82 (Drawn Squares 4) - 0x09FF7 - Squares & Colored Squares & Black/White Squares +0x09FF8 (Drawn Squares 5) - 0x09F82 - Squares & Colored Squares & Black/White Squares +0x09D9F (Drawn Squares 6) - 0x09FF8 - Squares & Colored Squares & Black/White Squares +0x09DA1 (Drawn Squares 7) - 0x09D9F - Squares & Colored Squares +0x09DA2 (Drawn Squares 8) - 0x09DA1 - Squares & Colored Squares +0x09DAF (Drawn Squares 9) - 0x09DA2 - Squares & Colored Squares +0x0A099 (Door to Bunker Proper) - 0x09DAF - True +0x0A010 (Drawn Squares through Tinted Glass 1) - 0x0A099 - Squares & Colored Squares & RGB & Environment +0x0A01B (Drawn Squares through Tinted Glass 2) - 0x0A010 - Squares & Colored Squares & Black/White Squares & RGB & Environment +0x0A01F (Drawn Squares through Tinted Glass 3) - 0x0A01B - Squares & Colored Squares & Black/White Squares & RGB & Environment +0x34BC5 (Drop-Down Door Open) - 0x0A01F - True +0x34BC6 (Drop-Down Door Close) - 0x34BC5 - True +0x17E63 (Drop-Down Door Squares 1) - 0x0A01F & 0x34BC5 - Squares & Colored Squares & RGB & Environment +0x17E67 (Drop-Down Door Squares 2) - 0x17E63 & 0x34BC6 - Squares & Colored Squares & Black/White Squares & RGB +0x0A079 (Elevator Control) - 0x17E67 - Squares & Colored Squares & Black/White Squares & RGB + +Outside Swamp (Swamp) - Main Island - True: +0x0056E (Entry Door) - True - Shapers + +Swamp Entry Area (Swamp) - Outside Swamp - 0x0056E: +0x00469 (Seperatable Shapers 1) - True - Shapers +0x00472 (Seperatable Shapers 2) - 0x00469 - Shapers +0x00262 (Seperatable Shapers 3) - 0x00472 - Shapers +0x00474 (Seperatable Shapers 4) - 0x00262 - Shapers +0x00553 (Seperatable Shapers 5) - 0x00474 - Shapers +0x0056F (Seperatable Shapers 6) - 0x00553 - Shapers +0x00390 (Combinable Shapers 1) - 0x0056F - Shapers +0x010CA (Combinable Shapers 2) - 0x00390 - Shapers +0x00983 (Combinable Shapers 3) - 0x010CA - Shapers +0x00984 (Combinable Shapers 4) - 0x00983 - Shapers +0x00986 (Combinable Shapers 5) - 0x00984 - Shapers +0x00985 (Combinable Shapers 6) - 0x00986 - Shapers +0x00987 (Combinable Shapers 7) - 0x00985 - Shapers +0x181A9 (Combinable Shapers 8) - 0x00987 - Shapers +0x00609 (Slide Bridge) - 0x181A9 - Shapers + +Swamp Near Platform (Swamp) - Swamp Entry Area - 0x00609 | 0x18488: +0x00999 (Broken Shapers 1) - 0x00990 - Broken Shapers +0x0099D (Broken Shapers 2) - 0x00999 - Broken Shapers +0x009A0 (Broken Shapers 3) - 0x0099D - Broken Shapers +0x009A1 (Broken Shapers 4) - 0x009A0 - Broken Shapers +0x00002 (Cyan Underwater Negative Shapers 1) - 0x00006 - Shapers & Negative Shapers +0x00004 (Cyan Underwater Negative Shapers 2) - 0x00002 - Shapers & Negative Shapers +0x00005 (Cyan Underwater Negative Shapers 3) - 0x00004 - Shapers & Negative Shapers +0x013E6 (Cyan Underwater Negative Shapers 4) - 0x00005 - Shapers & Negative Shapers +0x00596 (Cyan Underwater Negative Shapers 5) - 0x013E6 - Shapers & Negative Shapers +0x18488 (Cyan Underwater Sliding Bridge Control) - 0x00006 - Shapers + +Swamp Platform (Swamp) - Swamp Near Platform - True: +0x00982 (Platform Shapers 1) - True - Shapers +0x0097F (Platform Shapers 2) - 0x00982 - Shapers +0x0098F (Platform Shapers 3) - 0x0097F - Shapers +0x00990 (Platform Shapers 4) - 0x0098F - Shapers +0x17C0D (Platform Shortcut Door Left) - True - Shapers +0x17C0E (Platform Shortcut Door Right) - True - Shapers + +Swamp Rotating Bridge Near Side (Swamp) - Swamp Near Platform - 0x009A1: +0x00007 (Rotated Shapers 1) - 0x009A1 - Rotated Shapers +0x00008 (Rotated Shapers 2) - 0x00007 - Rotated Shapers & Shapers +0x00009 (Rotated Shapers 3) - 0x00008 - Rotated Shapers +0x0000A (Rotated Shapers 4) - 0x00009 - Rotated Shapers +0x00001 (Red Underwater Negative Shapers 1) - 0x00596 - Shapers & Negative Shapers +0x014D2 (Red Underwater Negative Shapers 2) - 0x00596 - Shapers & Negative Shapers +0x014D4 (Red Underwater Negative Shapers 3) - 0x00596 - Shapers & Negative Shapers +0x014D1 (Red Underwater Negative Shapers 4) - 0x00596 - Shapers & Negative Shapers + +Swamp Near Boat (Swamp) - Swamp Rotating Bridge Near Side - 0x009A1 - Swamp Platform - 0x17C0D & 0x17C0E: +0x181F5 (Rotating Bridge) - True - Rotated Shapers, Shapers +0x09DB8 (Boat Spawn) - True - Boat +0x003B2 (More Rotated Shapers 1) - 0x0000A - Rotated Shapers +0x00A1E (More Rotated Shapers 2) - 0x003B2 - Rotated Shapers +0x00C2E (More Rotated Shapers 3) - 0x00A1E - Rotated Shapers +0x00E3A (More Rotated Shapers 4) - 0x00C2E - Rotated Shapers +0x009A6 (Underwater Back Optional) - 0x00E3A - Shapers +0x009AB (Blue Underwater Negative Shapers 1) - 0x00E3A - Shapers & Negative Shapers +0x009AD (Blue Underwater Negative Shapers 2) - 0x009AB - Shapers & Negative Shapers +0x009AE (Blue Underwater Negetive Shapers 3) - 0x009AD - Shapers & Negative Shapers +0x009AF (Blue Underwater Negative Shapers 4) - 0x009AE - Shapers & Negative Shapers +0x00006 (Blue Underwater Negative Shapers 5) - 0x009AF - Shapers & Negative Shapers & Broken Negative Shapers +0x17E2B (Long Bridge Control) - True - Rotated Shapers + +Swamp Maze (Swamp) - Swamp Rotating Bridge Near Side - 0x00001 & 0x014D2 & 0x014D4 & 0x014D1 - Outside Swamp - 0x17C05 & 0x17C02: +0x17C04 (Maze Control) - True - Shapers & Negative Shapers & Rotated Shapers & Environment +0x03615 (Laser) - 0x17C04 - True +0x17C05 (Near Laser Shortcut Door Left) - True - Rotated Shapers +0x17C02 (Near Laser Shortcut Door Right) - 0x17C05 - Shapers & Negative Shapers & Rotated Shapers + +Treehouse Entry Area (Treehouse): +0x17C95 (Boat Spawn) - True - Boat +0x0288C (First Door) - True - Stars +0x02886 (Second Door) - 0x0288C - Stars +0x17D72 (Yellow Bridge 1) - 0x02886 - Stars +0x17D8F (Yellow Bridge 2) - 0x17D72 - Stars +0x17D74 (Yellow Bridge 3) - 0x17D8F - Stars +0x17DAC (Yellow Bridge 4) - 0x17D74 - Stars +0x17D9E (Yellow Bridge 5) - 0x17DAC - Stars +0x17DB9 (Yellow Bridge 6) - 0x17D9E - Stars +0x17D9C (Yellow Bridge 7) - 0x17DB9 - Stars +0x17DC2 (Yellow Bridge 8) - 0x17D9C - Stars +0x17DC4 (Yellow Bridge 9) - 0x17DC2 - Stars +0x0A182 (Beyond Yellow Bridge Door) - 0x17DC4 - Stars + +Treehouse Beyond Yellow Bridge (Treehouse) - Treehouse Entry Area - 0x0A182: +0x2700B (Laser House Door Timer Outside Control) - True - True +0x17DC8 (First Purple Bridge 1) - True - Stars & Dots +0x17DC7 (First Purple Bridge 2) - 0x17DC8 - Stars & Dots +0x17CE4 (First Purple Bridge 3) - 0x17DC7 - Stars & Dots +0x17D2D (First Purple Bridge 4) - 0x17CE4 - Stars & Dots +0x17D6C (First Purple Bridge 5) - 0x17D2D - Stars & Dots +0x17D9B (Second Purple Bridge 1) - 0x17D6C - Stars & Squares & Black/White Squares +0x17D99 (Second Purple Bridge 2) - 0x17D9B - Stars & Squares & Black/White Squares +0x17DAA (Second Purple Bridge 3) - 0x17D99 - Stars & Squares & Black/White Squares +0x17D97 (Second Purple Bridge 4) - 0x17DAA - Stars & Squares & Black/White Squares & Colored Squares +0x17BDF (Second Purple Bridge 5) - 0x17D97 - Stars & Squares & Colored Squares +0x17D91 (Second Purple Bridge 6) - 0x17BDF - Stars & Squares & Colored Squares +0x17DC6 (Second Purple Bridge 7) - 0x17D91 - Stars & Squares & Colored Squares +0x17E3C (Green Bridge 1) - True - Stars & Shapers +0x17E4D (Green Bridge 2) - 0x17E3C - Stars & Shapers +0x17E4F (Green Bridge 3) - 0x17E4D - Stars & Shapers & Rotated Shapers +0x17E52 (Green Bridge 4 & Directional) - 0x17E4F - Stars & Rotated Shapers & Environment +0x17E5B (Green Bridge 5) - 0x17E52 - Stars & Shapers & Colored Shapers & Stars + Same Colored Symbol +0x17E5F (Green Bridge 6) - 0x17E5B - Stars & Shapers & Colored Shapers & Negative Shapers & Colored Negative Shapers & Stars + Same Colored Symbol +0x17E61 (Green Bridge 7) - 0x17E5F - Stars & Shapers & Rotated Shapers +0x17FA9 (Green Bridge Discard) - 0x17E61 - Triangles +0x17DB3 (Left Orange Bridge 1) - 0x17DC6 - Stars & Squares & Black/White Squares & Stars + Same Colored Symbol +0x17DB5 (Left Orange Bridge 2) - 0x17DB3 - Stars & Squares & Black/White Squares & Stars + Same Colored Symbol +0x17DB6 (Left Orange Bridge 3) - 0x17DB5 - Stars & Squares & Black/White Squares & Stars + Same Colored Symbol +0x17DC0 (Left Orange Bridge 4) - 0x17DB6 - Stars & Squares & Black/White Squares & Stars + Same Colored Symbol +0x17DD7 (Left Orange Bridge 5) - 0x17DC0 - Stars & Squares & Black/White Squares & Colored Squares & Stars + Same Colored Symbol +0x17DD9 (Left Orange Bridge 6) - 0x17DD7 - Stars & Squares & Black/White Squares & Colored Squares & Stars + Same Colored Symbol +0x17DB8 (Left Orange Bridge 7) - 0x17DD9 - Stars & Squares & Black/White Squares & Colored Squares & Stars + Same Colored Symbol +0x17DDC (Left Orange Bridge 8) - 0x17DB8 - Stars & Squares & Colored Squares & Stars + Same Colored Symbol +0x17DD1 (Left Orange Bridge 9 & Directional) - 0x17DDC - Stars & Squares & Colored Squares & Stars + Same Colored Symbol & Environment +0x17DDE (Left Orange Bridge 10) - 0x17DD1 - Stars & Squares & Colored Squares & Stars + Same Colored Symbol +0x17DE3 (Left Orange Bridge 11) - 0x17DDE - Stars & Squares & Colored Squares & Stars + Same Colored Symbol +0x17DEC (Left Orange Bridge 12) - 0x17DE3 - Stars & Squares & Black/White Squares & Stars + Same Colored Symbol +0x17DAE (Left Orange Bridge 13) - 0x17DEC - Stars & Squares & Black/White Squares & Stars + Same Colored Symbol +0x17DB0 (Left Orange Bridge 14) - 0x17DAE - Stars & Squares & Black/White Squares & Stars + Same Colored Symbol +0x17DDB (Left Orange Bridge 15) - 0x17DB0 - Stars & Squares & Black/White Squares & Stars + Same Colored Symbol +0x17FA0 (Burned House Discard) - 0x17DDB - Triangles +0x17D88 (Right Orange Bridge 1) - True - Stars +0x17DB4 (Right Orange Bridge 2) - 0x17D88 - Stars +0x17D8C (Right Orange Bridge 3) - 0x17DB4 - Stars +0x17CE3 (Right Orange Bridge 4 & Directional) - 0x17D8C - Stars & Environment +0x17DCD (Right Orange Bridge 5) - 0x17CE3 - Stars +0x17DB2 (Right Orange Bridge 6) - 0x17DCD - Stars +0x17DCC (Right Orange Bridge 7) - 0x17DB2 - Stars +0x17DCA (Right Orange Bridge 8) - 0x17DCC - Stars +0x17D8E (Right Orange Bridge 9) - 0x17DCA - Stars +0x17DB7 (Right Orange Bridge 10 & Directional) - 0x17D8E - Stars +0x17DB1 (Right Orange Bridge 11) - 0x17DB7 - Stars +0x17DA2 (Right Orange Bridge 12) - 0x17DB1 - Stars + +Treehouse Laser Room (Treehouse) - Treehouse Beyond Yellow Bridge - 0x2700B & 0x17DA2 & 0x17DDB: +0x03613 (Laser) - True - True +0x17CBC (Laser House Door Timer Inside Control) - True - True + +Treehouse Bridge Platform (Treehouse) - Treehouse Beyond Yellow Bridge - 0x17DA2 - Main Island - 0x037FF: +0x037FF (Bridge Control) - True - Stars + +Mountaintop (Mountaintop) - Main Island - True: +0x0042D (River Shape) - True - True +0x09F7F (Box Open) - 7 Lasers - True +0x17C34 (Trap Door Triple Exit) - 0x09F7F - Stars & Squares & Black/White Squares & Stars + Same Colored Symbol +0x17C42 (Discard) - True - Triangles +0x002A6 (Vault) - True - Symmetry & Colored Dots & Squares & Black/White Squares & Dots +0x03542 (Vault Box) - 0x002A6 - True + +Inside Mountain Top Layer (Inside Mountain) - Mountaintop - 0x17C34: +0x09E39 (Light Bridge Controller) - True - Squares & Black/White Squares & Colored Squares & Eraser & Colored Eraser + +Inside Mountain Top Layer Bridge (Inside Mountain) - Inside Mountain Top Layer - 0x09E39: +0x09E7A (Obscured Vision 1) - True - Obscured & Squares & Black/White Squares & Dots +0x09E71 (Obscured Vision 2) - 0x09E7A - Obscured & Squares & Black/White Squares & Dots +0x09E72 (Obscured Vision 3) - 0x09E71 - Obscured & Squares & Black/White Squares & Rotated Shapers & Dots +0x09E69 (Obscured Vision 4) - 0x09E72 - Obscured & Squares & Black/White Squares & Dots +0x09E7B (Obscured Vision 5) - 0x09E69 - Obscured & Squares & Black/White Squares & Dots +0x09E73 (Moving Background 1) - True - Moving & Stars & Squares & Black/White Squares & Stars + Same Colored Symbol +0x09E75 (Moving Background 2) - 0x09E73 - Moving & Stars & Squares & Black/White Squares & Stars + Same Colored Symbol +0x09E78 (Moving Background 3) - 0x09E75 - Moving & Shapers +0x09E79 (Moving Background 4) - 0x09E78 - Moving & Shapers & Rotated Shapers +0x09E6C (Moving Background 5) - 0x09E79 - Moving & Stars & Squares & Black/White Squares & Stars + Same Colored Symbol +0x09E6F (Moving Background 6) - 0x09E6C - Moving & Stars & Rotated Shapers & Shapers +0x09E6B (Moving Background 7) - 0x09E6F - Moving & Stars & Dots +0x33AF5 (Physically Obstructed 1) - True - Squares & Black/White Squares & Environment & Symmetry +0x33AF7 (Physically Obstructed 2) - 0x33AF5 - Squares & Black/White Squares & Stars & Environment +0x09F6E (Physically Obstructed 3) - 0x33AF7 - Symmetry & Dots & Environment +0x09EAD (Angled Inside Trash 1) - True - Squares & Black/White Squares & Shapers & Angled +0x09EAF (Angled Inside Trash 2) - 0x09EAD - Squares & Black/White Squares & Shapers & Angled + +Inside Mountain Second Layer (Inside Mountain) - Inside Mountain Top Layer Bridge - 0x09EAF & 0x09F6E & 0x09E6B & 0x09E7B: +0x09FD3 (Color Cycle 1) - True - Color Cycle & RGB & Stars & Squares & Colored Squares & Stars + Same Colored Symbol +0x09FD4 (Color Cycle 2) - 0x09FD3 - Color Cycle & RGB & Stars & Squares & Colored Squares & Stars + Same Colored Symbol +0x09FD6 (Color Cycle 3) - 0x09FD4 - Color Cycle & RGB & Stars & Squares & Colored Squares & Stars + Same Colored Symbol +0x09FD7 (Color Cycle 4) - 0x09FD6 - Color Cycle & RGB & Stars & Squares & Colored Squares & Stars + Same Colored Symbol & Shapers & Colored Shapers +0x09FD8 (Color Cycle 5) - 0x09FD7 - Color Cycle & RGB & Squares & Colored Squares & Symmetry & Colored Dots +0x09E86 (Light Bridge Controller 2) - 0x09FD7 - Stars & Stars + Same Colored Symbol & Colored Rotated Shapers & Eraser & Two Lines + +Inside Mountain Second Layer Beyond Bridge (Inside Mountain) - Inside Mountain Second Layer - 0x09E86: +0x09FCC (Same Solution 1) - True - Dots & Same Solution +0x09FCE (Same Solution 2) - 0x09FCC - Squares & Black/White Squares & Same Solution +0x09FCF (Same Solution 3) - 0x09FCE - Stars & Same Solution +0x09FD0 (Same Solution 4) - 0x09FCF - Rotated Shapers & Same Solution +0x09FD1 (Same Solution 5) - 0x09FD0 - Stars & Squares & Colored Squares & Stars + Same Colored Symbol & Same Solution +0x09FD2 (Same Solution 6) - 0x09FD1 - Shapers & Same Solution +0x09ED8 (Light Bridge Controller 3) - 0x09FD2 - Stars & Stars + Same Colored Symbol & Colored Rotated Shapers & Eraser & Two Lines + +Inside Mountain Second Layer Elevator (Inside Mountain) - Inside Mountain Second Layer - 0x09ED8 & 0x09E86: +0x09EEB (Elevator Control Panel) - True - Dots +0x17F93 (Elevator Discard) - True - Triangles + +Inside Mountain Third Layer (Inside Mountain) - Inside Mountain Second Layer Elevator - 0x09EEB: +0x09FC1 (Giant Puzzle Bottom Left) - True - Shapers & Eraser +0x09F8E (Giant Puzzle Bottom Right) - True - Shapers & Eraser +0x09F01 (Giant Puzzle Top Right) - True - Rotated Shapers +0x09EFF (Giant Puzzle Top Left) - True - Shapers & Eraser +0x09FDA (Giant Puzzle) - 0x09FC1 & 0x09F8E & 0x09F01 & 0x09EFF - Shapers & Symmetry + +Inside Mountain Bottom Layer (Inside Mountain) - Inside Mountain Third Layer - 0x09FDA - Inside Mountain Path to Secret Area - 0x334E1: +0x17FA2 (Bottom Layer Discard) - 11 Lasers & 0x09F7F - Triangles & Environment +0x01983 (Door to Final Room Left) - True - Shapers & Stars +0x01987 (Door to Final Room Right) - True - Squares & Colored Squares + + +Inside Mountain Path to Secret Area (Inside Mountain) - Inside Mountain Bottom Layer - 0x17FA2: +0x00FF8 (Door to Secret Area) - True - Triangles & Black/White Squares & Squares +0x334E1 (Rock Control) - True - True + +Inside Mountain Secret Area (Inside Mountain Secret Area) - Inside Mountain Path to Secret Area - 0x00FF8 - Main Island - 0x021D7 - Main Island - 0x17CF2: +0x021D7 (Shortcut to Mountain) - True - Triangles & Stars & Stars + Same Colored Symbol & Colored Triangles +0x17CF2 (Shortcut to Swamp) - True - Triangles +0x335AB (Elevator Inside Control) - True - Dots & Squares & Black/White Squares +0x335AC (Elevator Upper Outside Control) - 0x335AB - Squares & Black/White Squares +0x3369D (Elevator Lower Outside Control) - 0x335AB - Squares & Black/White Squares & Dots +0x00190 (Dot Grid Triangles 1) - True - Dots & Triangles +0x00558 (Dot Grid Triangles 2) - 0x00190 - Dots & Triangles +0x00567 (Dot Grid Triangles 3) - 0x00558 - Dots & Triangles +0x006FE (Dot Grid Triangles 4) - 0x00567 - Dots & Triangles +0x01A0D (Symmetry Triangles) - True - Symmetry & Triangles +0x008B8 (Squares and Triangles) - True - Squares & Black/White Squares & Triangles +0x00973 (Stars and Triangles) - 0x008B8 - Stars & Triangles +0x0097B (Stars and Triangles of same color) - 0x00973 - Stars & Triangles & Stars and Triangles of same color & Stars + Same Colored Symbol +0x0097D (Stars & Squares and Triangles) - 0x0097B - Stars & Squares & Black/White Squares & Stars + Same Colored Symbol & Triangles +0x0097E (Stars & Squares and Triangles 2) - 0x0097D - Stars & Squares & Black/White Squares & Stars + Same Colored Symbol & Stars and Triangles of same color +0x00994 (Rotated Shapers and Triangles 1) - True - Rotated Shapers & Triangles +0x334D5 (Rotated Shapers and Triangles 2) - 0x00994 - Rotated Shapers & Triangles +0x00995 (Rotated Shapers and Triangles 3) - 0x334D5 - Rotated Shapers & Triangles +0x00996 (Shapers and Triangles 1) - 0x00995 - Shapers & Triangles +0x00998 (Shapers and Triangles 2) - 0x00996 - Shapers & Triangles +0x009A4 (Broken Shapers) - True - Shapers & Broken Shapers +0x018A0 (Symmetry Shapers) - True - Shapers & Symmetry +0x00A72 (Broken and Negative Shapers) - True - Shapers & Broken Shapers & Negative Shapers +0x32962 (Rotated Broken Shapers) - True - Rotated Shapers & Broken Rotated Shapers +0x32966 (Stars and Squares) - True - Stars & Squares & Black/White Squares & Stars + Same Colored Symbol +0x01A31 (Rainbow Squares) - True - Color Cycle & RGB & Squares & Colored Squares +0x00B71 (Squares & Stars and Colored Eraser) - True - Colored Eraser & Squares & Colored Squares & Stars & Stars + Same Colored Symbol +0x09DD5 (Lone Pillar) - True - Pillar & Triangles +0x0A16E (Door to Challenge) - 0x09DD5 - Stars & Shapers & Colored Shapers & Stars + Same Colored Symbol +0x288EA (Wooden Beam Shapers) - True - Environment & Shapers +0x288FC (Wooden Beam Squares and Shapers) - True - Environment & Squares & Black/White Squares & Shapers & Rotated Shapers +0x289E7 (Wooden Beam Shapers and Squares) - True - Environment & Stars & Squares & Black/White Squares +0x288AA (Wooden Beam Shapers and Stars) - True - Environment & Stars & Shapers +0x17FB9 (Upstairs Dot Grid Negative Shapers) - True - Shapers & Dots & Negative Shapers +0x0A16B (Upstairs Dot Grid Squares) - True - Squares & Black/White Squares & Colored Squares & Dots +0x0A2CE (Upstairs Dot Grid Stars) - 0x0A16B - Stars & Dots +0x0A2D7 (Upstairs Dot Grid Triangles) - 0x0A2CE - Triangles & Dots +0x0A2DD (Upstairs Dot Grid Shapers) - 0x0A2D7 - Shapers & Dots +0x0A2EA (Upstairs Dot Grid Rotated Shapers) - 0x0A2DD - Rotated Shapers & Dots +0x0008F (Upstairs Invisible Dots 1) - True - Dots & Invisible Dots +0x0006B (Upstairs Invisible Dots 2) - 0x0008F - Dots & Invisible Dots +0x0008B (Upstairs Invisible Dots 3) - 0x0006B - Dots & Invisible Dots +0x0008C (Upstairs Invisible Dots 4) - 0x0008B - Dots & Invisible Dots +0x0008A (Upstairs Invisible Dots 5) - 0x0008C - Dots & Invisible Dots +0x00089 (Upstairs Invisible Dots 6) - 0x0008A - Dots & Invisible Dots +0x0006A (Upstairs Invisible Dots 7) - 0x00089 - Dots & Invisible Dots +0x0006C (Upstairs Invisible Dots 8) - 0x0006A - Dots & Invisible Dots +0x00027 (Upstairs Invisible Dot Symmetry 1) - True - Dots & Invisible Dots & Symmetry +0x00028 (Upstairs Invisible Dot Symmetry 2) - 0x00027 - Dots & Invisible Dots & Symmetry +0x00029 (Upstairs Invisible Dot Symmetry 3) - 0x00028 - Dots & Invisible Dots & Symmetry + +Challenge (Challenge) - Inside Mountain Secret Area - 0x0A16E: +0x0A332 (Start Timer) - True - True +0x0088E (Small Basic) - 0x0A332 - True +0x00BAF (Big Basic) - 0x0088E - True +0x00BF3 (Square) - 0x00BAF - Squares & Black/White Squares +0x00C09 (Maze Map) - 0x00BF3 - Dots +0x00CDB (Stars and Dots) - 0x00C09 - Stars & Dots +0x0051F (Symmetry) - 0x00CDB - Symmetry & Colored Dots & Dots +0x00524 (Stars and Shapers) - 0x0051F - Stars & Shapers +0x00CD4 (Big Basic 2) - 0x00524 - True +0x00CB9 (Choice Squares Right) - 0x00CD4 - Squares & Black/White Squares +0x00CA1 (Choice Squares Middle) - 0x00CD4 - Squares & Black/White Squares +0x00C80 (Choice Squares Left) - 0x00CD4 - Squares & Black/White Squares +0x00C68 (Choice Squares 2 Right) - 0x00CB9 | 0x00CA1 | 0x00C80 - Squares & Black/White Squares & Colored Squares +0x00C59 (Choice Squares 2 Middle) - 0x00CB9 | 0x00CA1 | 0x00C80 - Squares & Black/White Squares & Colored Squares +0x00C22 (Choice Squares 2 Left) - 0x00CB9 | 0x00CA1 | 0x00C80 - Squares & Black/White Squares & Colored Squares +0x034F4 (Maze Hidden 1) - 0x00C68 | 0x00C59 | 0x00C22 - Triangles +0x034EC (Maze Hidden 2) - 0x00C68 | 0x00C59 | 0x00C22 - Triangles +0x1C31A (Dots Pillar) - 0x034F4 & 0x034EC - Dots & Symmetry & Pillar +0x1C319 (Squares Pillar) - 0x034F4 & 0x034EC - Squares & Black/White Squares & Symmetry & Pillar +0x0356B (Vault Box) - 0x1C31A & 0x1C319 - True +0x039B4 (Door to Theater Walkway) - True - Triangles + +Theater Walkway (Theater Walkway) - Challenge - 0x039B4 - Theater - 0x27732 - Desert Elevator Room - 0x2773D & 0x03608 - Town - 0x09E85: +0x2FAF6 (Vault Box) - True - True +0x27732 (Door to Back of Theater) - True - True +0x2773D (Door to Desert Elevator Room) - True - True +0x09E85 (Door to Town) - True - Triangles + +Final Room (Inside Mountain Final Room) - Inside Mountain Bottom Layer - 0x01983 & 0x01987: +0x0383A (Stars Pillar) - True - Stars & Pillar +0x09E56 (Stars and Dots Pillar) - 0x0383A - Stars & Dots & Pillar +0x09E5A (Dot Grid Pillar) - 0x09E56 - Dots & Pillar +0x33961 (Sparse Dots Pillar) - 0x09E5A - Dots & Pillar +0x0383D (Dot Maze Pillar) - True - Dots & Pillar +0x0383F (Squares Pillar) - 0x0383D - Squares & Black/White Squares & Pillar +0x03859 (Shapers Pillar) - 0x0383F - Shapers & Pillar +0x339BB (Squares and Stars) - 0x03859 - Squares & Black/White Squares & Stars & Pillar + +Elevator (Inside Mountain Final Room) - Final Room - 0x339BB & 0x33961: +0x3D9A6 (Elevator Door Closer Left) - True - True +0x3D9A7 (Elevator Door Close Right) - True - True +0x3C113 (Elevator Door Open Left) - 0x3D9A6 | 0x3D9A7 - True +0x3C114 (Elevator Door Open Right) - 0x3D9A6 | 0x3D9A7 - True +0x3D9AA (Back Wall Left) - 0x3D9A6 | 0x3D9A7 - True +0x3D9A8 (Back Wall Right) - 0x3D9A6 | 0x3D9A7 - True +0x3D9A9 (Elevator Start) - 0x3D9AA | 0x3D9A8 - True + +Boat (Boat) - Main Island - 0x17CDF | 0x17CC8 | 0x17CA6 | 0x09DB8 | 0x17C95 - Inside Glass Factory - 0x17CDF | 0x17CC8 | 0x17CA6 | 0x09DB8 | 0x17C95 - Quarry Boathouse - 0x17CDF | 0x17CC8 | 0x17CA6 | 0x09DB8 | 0x17C95 - Swamp Near Boat - 0x17CDF | 0x17CC8 | 0x17CA6 | 0x09DB8 | 0x17C95 - Treehouse Entry Area - 0x17CDF | 0x17CC8 | 0x17CA6 | 0x09DB8 | 0x17C95: diff --git a/worlds/witness/__init__.py b/worlds/witness/__init__.py new file mode 100644 index 0000000000..1c10c6bce7 --- /dev/null +++ b/worlds/witness/__init__.py @@ -0,0 +1,165 @@ +""" +Archipelago init file for The Witness +""" + +import typing + +from BaseClasses import Region, RegionType, Location, MultiWorld, Item, Entrance +from ..AutoWorld import World, WebWorld +from .player_logic import StaticWitnessLogic, WitnessPlayerLogic +from .locations import WitnessPlayerLocations, StaticWitnessLocations +from .items import WitnessItem, StaticWitnessItems, WitnessPlayerItems +from .rules import set_rules +from .regions import WitnessRegions +from .Options import is_option_enabled, the_witness_options + + +class WitnessWebWorld(WebWorld): + theme = "jungle" + + +class WitnessWorld(World): + """ + The Witness is an open-world puzzle game with dozens of locations + to explore and over 500 puzzles. Play the popular puzzle randomizer + by sigma144, with an added layer of progression randomization! + """ + game = "The Witness" + topology_present = False + static_logic = StaticWitnessLogic() + static_locat = StaticWitnessLocations() + static_items = StaticWitnessItems() + web = WitnessWebWorld() + options = the_witness_options + + item_name_to_id = { + name: data.code for name, data in static_items.ALL_ITEM_TABLE.items() + } + location_name_to_id = StaticWitnessLocations.ALL_LOCATIONS_TO_ID + + def _get_slot_data(self): + return { + 'seed': self.world.random.randint(0, 1000000), + 'victory_location': int(self.player_logic.VICTORY_LOCATION, 16), + 'panelhex_to_id': self.locat.CHECK_PANELHEX_TO_ID + } + + def generate_early(self): + self.player_logic = WitnessPlayerLogic(self.world, self.player) + self.locat = WitnessPlayerLocations(self.world, self.player, self.player_logic) + self.items = WitnessPlayerItems(self.locat, self.world, self.player, self.player_logic) + self.regio = WitnessRegions(self.locat) + + def generate_basic(self): + # Generate item pool + pool = [] + items_by_name = dict() + for item in self.items.ITEM_TABLE: + witness_item = self.create_item(item) + if item not in self.items.EVENT_ITEM_TABLE: + pool.append(witness_item) + items_by_name[item] = witness_item + + # Put good item on first check + random_good_item = self.world.random.choice(self.items.GOOD_ITEMS) + first_check = self.world.get_location( + "Tutorial Gate Open", self.player + ) + first_check.place_locked_item(items_by_name[random_good_item]) + pool.remove(items_by_name[random_good_item]) + + # Put in junk items to fill the rest + junk_pool = self.items.JUNK_WEIGHTS.copy() + junk_pool = self.world.random.choices( + list(junk_pool.keys()), weights=list(junk_pool.values()), + k=len(self.locat.CHECK_LOCATION_TABLE) - len(pool) - len(self.locat.EVENT_LOCATION_TABLE) - 1 + ) + + pool += [self.create_item(junk) for junk in junk_pool] + + # Tie Event Items to Event Locations (e.g. Laser Activations) + for event_location in self.locat.EVENT_LOCATION_TABLE: + item_obj = self.create_item( + self.player_logic.EVENT_ITEM_PAIRS[event_location] + ) + location_obj = self.world.get_location(event_location, self.player) + location_obj.place_locked_item(item_obj) + + self.world.itempool += pool + + def create_regions(self): + self.regio.create_regions(self.world, self.player, self.player_logic) + + def set_rules(self): + set_rules(self.world, self.player, self.player_logic, self.locat) + + def fill_slot_data(self) -> dict: + slot_data = self._get_slot_data() + + slot_data["hard_mode"] = False + + for option_name in the_witness_options: + slot_data[option_name] = is_option_enabled( + self.world, self.player, option_name + ) + + return slot_data + + def create_item(self, name: str) -> Item: + # this conditional is purely for unit tests, which need to be able to create an item before generate_early + if hasattr(self, 'items'): + item = self.items.ITEM_TABLE[name] + else: + item = StaticWitnessItems.ALL_ITEM_TABLE[name] + + new_item = WitnessItem( + name, item.progression, item.code, player=self.player + ) + new_item.trap = item.trap + return new_item + + def get_filler_item_name(self) -> str: # Used ny itemlinks + junk_pool = self.items.JUNK_WEIGHTS.copy() + + return self.world.random.choices(list(junk_pool.keys()), weights=list(junk_pool.values()))[0] + + +class WitnessLocation(Location): + """ + Archipelago Location for The Witness + """ + game: str = "The Witness" + check_hex: int = -1 + + def __init__(self, player: int, name: str, address: typing.Optional[int], parent, ch_hex: int = -1): + super().__init__(player, name, address, parent) + self.check_hex = ch_hex + + +def create_region(world: MultiWorld, player: int, name: str, + locat: WitnessPlayerLocations, region_locations=None, exits=None): + """ + Create an Archipelago Region for The Witness + """ + + ret = Region(name, RegionType.Generic, name, player) + ret.world = world + if region_locations: + for location in region_locations: + loc_id = locat.CHECK_LOCATION_TABLE[location] + + check_hex = -1 + if location in StaticWitnessLogic.CHECKS_BY_NAME: + check_hex = int( + StaticWitnessLogic.CHECKS_BY_NAME[location]["checkHex"], 0 + ) + location = WitnessLocation( + player, location, loc_id, ret, check_hex + ) + + ret.locations.append(location) + if exits: + for single_exit in exits: + ret.exits.append(Entrance(player, single_exit, ret)) + + return ret diff --git a/worlds/witness/items.py b/worlds/witness/items.py new file mode 100644 index 0000000000..4e19bfa7b9 --- /dev/null +++ b/worlds/witness/items.py @@ -0,0 +1,98 @@ +""" +Defines progression, junk and event items for The Witness +""" +import copy +from typing import Dict, NamedTuple, Optional + +from BaseClasses import Item, MultiWorld +from . import StaticWitnessLogic, WitnessPlayerLocations, WitnessPlayerLogic +from .Options import is_option_enabled + + +class ItemData(NamedTuple): + """ + ItemData for an item in The Witness + """ + code: Optional[int] + progression: bool + event: bool = False + trap: bool = False + + +class WitnessItem(Item): + """ + Item from the game The Witness + """ + game: str = "The Witness" + + +class StaticWitnessItems: + """ + Class that handles Witness items independent of world settings + """ + + ALL_ITEM_TABLE: Dict[str, ItemData] = {} + + JUNK_WEIGHTS = { + "Speed Boost": 1, + "Slowness": 0.8, + "Power Surge": 0.2, + } + + def __init__(self): + item_tab = dict() + + for item in StaticWitnessLogic.ALL_ITEMS: + if item[0] == "11 Lasers" or item == "7 Lasers": + continue + + item_tab[item[0]] = ItemData(158000 + item[1], True, False) + + for item in StaticWitnessLogic.ALL_TRAPS: + item_tab[item[0]] = ItemData( + 158000 + item[1], False, False, True + ) + + for item in StaticWitnessLogic.ALL_BOOSTS: + item_tab[item[0]] = ItemData(158000 + item[1], False, False) + + item_tab = dict(sorted( + item_tab.items(), + key=lambda single_item: single_item[1].code + if isinstance(single_item[1].code, int) else 0) + ) + + for key, item in item_tab.items(): + self.ALL_ITEM_TABLE[key] = item + + +class WitnessPlayerItems: + """ + Class that defines Items for a single world + """ + + def __init__(self, locat: WitnessPlayerLocations, world: MultiWorld, player: int, player_logic: WitnessPlayerLogic): + """Adds event items after logic changes due to options""" + self.EVENT_ITEM_TABLE = dict() + self.ITEM_TABLE = copy.copy(StaticWitnessItems.ALL_ITEM_TABLE) + + self.GOOD_ITEMS = [ + "Dots", "Black/White Squares", "Stars", + "Shapers", "Symmetry" + ] + + if is_option_enabled(world, player, "shuffle_discarded_panels"): + self.GOOD_ITEMS.append("Triangles") + if not is_option_enabled(world, player, "disable_non_randomized_puzzles"): + self.GOOD_ITEMS.append("Colored Squares") + + for event_location in locat.EVENT_LOCATION_TABLE: + location = player_logic.EVENT_ITEM_PAIRS[event_location] + self.EVENT_ITEM_TABLE[location] = ItemData(None, True, True) + self.ITEM_TABLE[location] = ItemData(None, True, True) + + self.JUNK_WEIGHTS = { + key: value for (key, value) + in StaticWitnessItems.JUNK_WEIGHTS.items() + if key in self.ITEM_TABLE.keys() + } diff --git a/worlds/witness/locations.py b/worlds/witness/locations.py new file mode 100644 index 0000000000..548dcafd4d --- /dev/null +++ b/worlds/witness/locations.py @@ -0,0 +1,281 @@ +""" +Defines constants for different types of locations in the game +""" + +from .Options import is_option_enabled +from .player_logic import StaticWitnessLogic, WitnessPlayerLogic + + +class StaticWitnessLocations: + """ + Witness Location Constants that stay consistent across worlds + """ + ID_START = 158000 + + TYPE_OFFSETS = { + "General": 0, + "Discard": 600, + "Vault": 650, + "Laser": 700, + } + + GENERAL_LOCATIONS = { + "Tutorial Gate Open", + + "Outside Tutorial Vault Box", + "Outside Tutorial Discard", + "Outside Tutorial Dots Introduction 5", + "Outside Tutorial Squares Introduction 9", + + "Glass Factory Discard", + "Glass Factory Vertical Symmetry 5", + "Glass Factory Rotational Symmetry 3", + "Glass Factory Melting 3", + + "Symmetry Island Black Dots 5", + "Symmetry Island Colored Dots 6", + "Symmetry Island Fading Lines 7", + "Symmetry Island Scenery Outlines 5", + "Symmetry Island Laser", + + "Orchard Apple Tree 5", + + "Desert Vault Box", + "Desert Discard", + "Desert Sun Reflection 8", + "Desert Artificial Light Reflection 3", + "Desert Pond Reflection 5", + "Desert Flood Reflection 6", + "Desert Laser", + + "Quarry Mill Eraser and Dots 6", + "Quarry Mill Eraser and Squares 8", + "Quarry Mill Small Squares & Dots & and Eraser", + "Quarry Mill Big Squares & Dots & and Eraser", + "Quarry Boathouse Intro Shapers", + "Quarry Boathouse Eraser and Shapers 5", + "Quarry Boathouse Stars & Eraser & and Shapers 2", + "Quarry Boathouse Stars & Eraser & and Shapers 5", + "Quarry Discard", + "Quarry Laser", + + "Shadows Lower Avoid 8", + "Shadows Environmental Avoid 8", + "Shadows Follow 5", + "Shadows Laser", + + "Keep Hedge Maze 4", + "Keep Pressure Plates 4", + "Keep Discard", + "Keep Laser Hedges", + "Keep Laser Pressure Plates", + + "Shipwreck Vault Box", + "Shipwreck Discard", + + "Monastery Rhombic Avoid 3", + "Monastery Branch Follow 2", + "Monastery Laser", + + "Town Cargo Box Discard", + "Town Hexagonal Reflection", + "Town Square Avoid", + "Town Rooftop Discard", + "Town Symmetry Squares 5 + Dots", + "Town Full Dot Grid Shapers 5", + "Town Shapers & Dots & and Eraser", + "Town Laser", + + "Theater Discard", + + "Jungle Discard", + "Jungle Waves 3", + "Jungle Waves 7", + "Jungle Popup Wall 6", + "Jungle Laser", + + "River Vault Box", + + "Bunker Drawn Squares 5", + "Bunker Drawn Squares 9", + "Bunker Drawn Squares through Tinted Glass 3", + "Bunker Drop-Down Door Squares 2", + "Bunker Laser", + + "Swamp Seperatable Shapers 6", + "Swamp Combinable Shapers 8", + "Swamp Broken Shapers 4", + "Swamp Cyan Underwater Negative Shapers 5", + "Swamp Platform Shapers 4", + "Swamp Rotated Shapers 4", + "Swamp Red Underwater Negative Shapers 4", + "Swamp More Rotated Shapers 4", + "Swamp Blue Underwater Negative Shapers 5", + "Swamp Laser", + + "Treehouse Yellow Bridge 9", + "Treehouse First Purple Bridge 5", + "Treehouse Second Purple Bridge 7", + "Treehouse Green Bridge 7", + "Treehouse Green Bridge Discard", + "Treehouse Left Orange Bridge 15", + "Treehouse Burned House Discard", + "Treehouse Right Orange Bridge 12", + "Treehouse Laser", + + "Mountaintop Trap Door Triple Exit", + "Mountaintop Discard", + "Mountaintop Vault Box", + + "Inside Mountain Obscured Vision 5", + "Inside Mountain Moving Background 7", + "Inside Mountain Physically Obstructed 3", + "Inside Mountain Angled Inside Trash 2", + "Inside Mountain Color Cycle 5", + "Inside Mountain Same Solution 6", + "Inside Mountain Elevator Discard", + "Inside Mountain Giant Puzzle", + } + + UNCOMMON_LOCATIONS = { + "Mountaintop River Shape", + "Tutorial Patio Floor", + "Theater Tutorial Video", + "Theater Desert Video", + "Theater Jungle Video", + "Theater Shipwreck Video", + "Theater Mountain Video", + "Town RGB Squares", + "Town RGB Stars", + "Swamp Underwater Back Optional", + } + + HARD_LOCATIONS = { + "Tutorial Gate Close", + + "Inside Mountain Secret Area Dot Grid Triangles 4", + "Inside Mountain Secret Area Symmetry Triangles", + "Inside Mountain Secret Area Stars & Squares and Triangles 2", + "Inside Mountain Secret Area Shapers and Triangles 2", + "Inside Mountain Secret Area Symmetry Shapers", + "Inside Mountain Secret Area Broken and Negative Shapers", + "Inside Mountain Secret Area Broken Shapers", + + "Inside Mountain Secret Area Rainbow Squares", + "Inside Mountain Secret Area Squares & Stars and Colored Eraser", + "Inside Mountain Secret Area Rotated Broken Shapers", + "Inside Mountain Secret Area Stars and Squares", + "Inside Mountain Secret Area Lone Pillar", + "Inside Mountain Secret Area Wooden Beam Shapers", + "Inside Mountain Secret Area Wooden Beam Squares and Shapers", + "Inside Mountain Secret Area Wooden Beam Shapers and Squares", + "Inside Mountain Secret Area Wooden Beam Shapers and Stars", + "Inside Mountain Secret Area Upstairs Invisible Dots 8", + "Inside Mountain Secret Area Upstairs Invisible Dot Symmetry 3", + "Inside Mountain Secret Area Upstairs Dot Grid Shapers", + "Inside Mountain Secret Area Upstairs Dot Grid Rotated Shapers", + + "Challenge Vault Box", + "Theater Walkway Vault Box", + "Inside Mountain Bottom Layer Discard", + "Theater Challenge Video", + } + + ALL_LOCATIONS_TO_ID = dict() + + @staticmethod + def get_id(chex): + """ + Calculates the location ID for any given location + """ + + panel_offset = StaticWitnessLogic.CHECKS_BY_HEX[chex]["idOffset"] + type_offset = StaticWitnessLocations.TYPE_OFFSETS[ + StaticWitnessLogic.CHECKS_BY_HEX[chex]["panelType"] + ] + + return StaticWitnessLocations.ID_START + panel_offset + type_offset + + @staticmethod + def get_event_name(panel_hex): + """ + Returns the event name of any given panel. + Currently this is always "Panelname Solved" + """ + + return StaticWitnessLogic.CHECKS_BY_HEX[panel_hex]["checkName"] + " Solved" + + def __init__(self): + all_loc_to_id = { + panel_obj["checkName"]: self.get_id(chex) + for chex, panel_obj in StaticWitnessLogic.CHECKS_BY_HEX.items() + } + + all_loc_to_id = dict( + sorted(all_loc_to_id.items(), key=lambda loc: loc[1]) + ) + + for key, item in all_loc_to_id.items(): + self.ALL_LOCATIONS_TO_ID[key] = item + + +class WitnessPlayerLocations: + """ + Class that defines locations for a single player + """ + + def __init__(self, world, player, player_logic: WitnessPlayerLogic): + self.PANEL_TYPES_TO_SHUFFLE = {"General", "Laser"} + self.CHECK_LOCATIONS = ( + StaticWitnessLocations.GENERAL_LOCATIONS + ) + + """Defines locations AFTER logic changes due to options""" + + if is_option_enabled(world, player, "shuffle_discarded_panels"): + self.PANEL_TYPES_TO_SHUFFLE.add("Discard") + + if is_option_enabled(world, player, "shuffle_vault_boxes"): + self.PANEL_TYPES_TO_SHUFFLE.add("Vault") + + if is_option_enabled(world, player, "shuffle_uncommon"): + self.CHECK_LOCATIONS = self.CHECK_LOCATIONS | StaticWitnessLocations.UNCOMMON_LOCATIONS + + if is_option_enabled(world, player, "shuffle_hard"): + self.CHECK_LOCATIONS = self.CHECK_LOCATIONS | StaticWitnessLocations.HARD_LOCATIONS + + self.CHECK_LOCATIONS = self.CHECK_LOCATIONS | player_logic.ADDED_CHECKS + + self.CHECK_LOCATIONS = self.CHECK_LOCATIONS - { + StaticWitnessLogic.CHECKS_BY_HEX[check_hex]["checkName"] + for check_hex in player_logic.COMPLETELY_DISABLED_CHECKS + } + + self.CHECK_PANELHEX_TO_ID = { + StaticWitnessLogic.CHECKS_BY_NAME[ch]["checkHex"]: StaticWitnessLocations.ALL_LOCATIONS_TO_ID[ch] + for ch in self.CHECK_LOCATIONS + } + + self.CHECK_PANELHEX_TO_ID = dict( + sorted(self.CHECK_PANELHEX_TO_ID.items(), key=lambda item: item[1]) + ) + + event_locations = { + p for p in player_logic.NECESSARY_EVENT_PANELS + if StaticWitnessLogic.CHECKS_BY_HEX[p]["checkName"] + not in self.CHECK_LOCATIONS + or p in player_logic.ALWAYS_EVENT_HEX_CODES + } + + self.EVENT_LOCATION_TABLE = { + StaticWitnessLocations.get_event_name(panel_hex): None + for panel_hex in event_locations + } + + check_dict = { + location: StaticWitnessLocations.get_id(StaticWitnessLogic.CHECKS_BY_NAME[location]["checkHex"]) + for location in self.CHECK_LOCATIONS + if StaticWitnessLogic.CHECKS_BY_NAME[location]["panelType"] in self.PANEL_TYPES_TO_SHUFFLE + } + + self.CHECK_LOCATION_TABLE = {**self.EVENT_LOCATION_TABLE, **check_dict} diff --git a/worlds/witness/player_logic.py b/worlds/witness/player_logic.py new file mode 100644 index 0000000000..82a6d07b98 --- /dev/null +++ b/worlds/witness/player_logic.py @@ -0,0 +1,287 @@ +""" +Parses the WitnessLogic.txt logic file into useful data structures. +This is the heart of the randomization. + +In WitnessLogic.txt we have regions defined with their connections: + +Region Name (Short name) - Connected Region 1 - Connection Requirement 1 - Connected Region 2... + +And then panels in that region with the hex code used in the game +previous panels that are required to turn them on, as well as the symbols they require: + +0x##### (Panel Name) - Required Panels - Required Items + +On __init__, the base logic is read and all panels are given Location IDs. +When the world has parsed its options, a second function is called to finalize the logic. +""" + +import copy +from BaseClasses import MultiWorld +from .static_logic import StaticWitnessLogic +from .utils import define_new_region, get_disable_unrandomized_list, parse_lambda +from .Options import is_option_enabled + + +class WitnessPlayerLogic: + """WITNESS LOGIC CLASS""" + + def reduce_req_within_region(self, panel_hex): + """ + Panels in this game often only turn on when other panels are solved. + Those other panels may have different item requirements. + It would be slow to recursively check solvability each time. + This is why we reduce the item dependencies within the region. + Panels outside of the same region will still be checked manually. + """ + + if self.DEPENDENT_REQUIREMENTS_BY_HEX[panel_hex]["panels"] == frozenset({frozenset()}): + return self.DEPENDENT_REQUIREMENTS_BY_HEX[panel_hex]["items"] + + all_options = set() + + these_items = self.DEPENDENT_REQUIREMENTS_BY_HEX[panel_hex]["items"] + these_panels = self.DEPENDENT_REQUIREMENTS_BY_HEX[panel_hex]["panels"] + check_obj = StaticWitnessLogic.CHECKS_BY_HEX[panel_hex] + + for option in these_panels: + dependent_items_for_option = frozenset({frozenset()}) + + for option_panel in option: + new_items = set() + dep_obj = StaticWitnessLogic.CHECKS_BY_HEX.get(option_panel) + if option_panel in {"7 Lasers", "11 Lasers"}: + new_items = frozenset({frozenset([option_panel])}) + # If a panel turns on when a panel in a different region turns on, + # the latter panel will be an "event panel", unless it ends up being + # a location itself. This prevents generation failures. + elif dep_obj["region"]["name"] != check_obj["region"]["name"]: + new_items = frozenset({frozenset([option_panel])}) + self.EVENT_PANELS_FROM_PANELS.add(option_panel) + else: + new_items = self.reduce_req_within_region(option_panel) + + updated_items = set() + + for items_option in dependent_items_for_option: + for items_option2 in new_items: + updated_items.add(items_option.union(items_option2)) + + dependent_items_for_option = updated_items + + for items_option in these_items: + for dependentItem in dependent_items_for_option: + all_options.add(items_option.union(dependentItem)) + + return frozenset(all_options) + + def make_single_adjustment(self, adj_type, line): + """Makes a single logic adjustment based on additional logic file""" + + if adj_type == "Event Items": + line_split = line.split(" - ") + hex_set = line_split[1].split(",") + + for hex_code in hex_set: + self.ALWAYS_EVENT_NAMES_BY_HEX[hex_code] = line_split[0] + + """ + Should probably do this differently... + Events right now depend on a panel. + That seems bad. + """ + + to_remove = set() + + for hex_code, event_name in self.ALWAYS_EVENT_NAMES_BY_HEX.items(): + if hex_code not in hex_set and event_name == line_split[0]: + to_remove.add(hex_code) + + for remove in to_remove: + del self.ALWAYS_EVENT_NAMES_BY_HEX[remove] + + return + + if adj_type == "Requirement Changes": + line_split = line.split(" - ") + + required_items = parse_lambda(line_split[2]) + items_actually_in_the_game = {item[0] for item in StaticWitnessLogic.ALL_ITEMS} + required_items = frozenset( + subset.intersection(items_actually_in_the_game) + for subset in required_items + ) + + requirement = { + "panels": parse_lambda(line_split[1]), + "items": required_items + } + + self.DEPENDENT_REQUIREMENTS_BY_HEX[line_split[0]] = requirement + + return + + if adj_type == "Disabled Locations": + self.COMPLETELY_DISABLED_CHECKS.add(line[:7]) + + return + + if adj_type == "Region Changes": + new_region_and_options = define_new_region(line + ":") + + self.CONNECTIONS_BY_REGION_NAME[new_region_and_options[0]["name"]] = new_region_and_options[1] + + return + + if adj_type == "Added Locations": + self.ADDED_CHECKS.add(line) + + def make_options_adjustments(self, world, player): + """Makes logic adjustments based on options""" + adjustment_linesets_in_order = [] + + if is_option_enabled(world, player, "challenge_victory"): + self.VICTORY_LOCATION = "0x0356B" + else: + self.VICTORY_LOCATION = "0x3D9A9" + + self.COMPLETELY_DISABLED_CHECKS.add( + self.VICTORY_LOCATION + ) + + if is_option_enabled(world, player, "disable_non_randomized_puzzles"): + adjustment_linesets_in_order.append(get_disable_unrandomized_list()) + + for adjustment_lineset in adjustment_linesets_in_order: + current_adjustment_type = None + + for line in adjustment_lineset: + if len(line) == 0: + continue + + if line[-1] == ":": + current_adjustment_type = line[:-1] + continue + + self.make_single_adjustment(current_adjustment_type, line) + + def make_dependency_reduced_checklist(self): + """ + Turns dependent check set into semi-independent check set + """ + + for check_hex in self.DEPENDENT_REQUIREMENTS_BY_HEX.keys(): + indep_requirement = self.reduce_req_within_region(check_hex) + + self.REQUIREMENTS_BY_HEX[check_hex] = indep_requirement + + def make_event_item_pair(self, panel): + """ + Makes a pair of an event panel and its event item + """ + name = StaticWitnessLogic.CHECKS_BY_HEX[panel]["checkName"] + " Solved" + pair = (name, self.EVENT_ITEM_NAMES[panel]) + return pair + + def make_event_panel_lists(self): + """ + Special event panel data structures + """ + + for region_conn in self.CONNECTIONS_BY_REGION_NAME.values(): + for region_and_option in region_conn: + for panelset in region_and_option[1]: + for panel in panelset: + self.EVENT_PANELS_FROM_REGIONS.add(panel) + + self.ALWAYS_EVENT_NAMES_BY_HEX[self.VICTORY_LOCATION] = "Victory" + + self.ORIGINAL_EVENT_PANELS.update(self.EVENT_PANELS_FROM_PANELS) + self.ORIGINAL_EVENT_PANELS.update(self.EVENT_PANELS_FROM_REGIONS) + self.NECESSARY_EVENT_PANELS.update(self.EVENT_PANELS_FROM_PANELS) + + for panel in self.EVENT_PANELS_FROM_REGIONS: + for region_name, region in StaticWitnessLogic.ALL_REGIONS_BY_NAME.items(): + for connection in self.CONNECTIONS_BY_REGION_NAME[region_name]: + connected_r = connection[0] + if connected_r not in StaticWitnessLogic.ALL_REGIONS_BY_NAME: + continue + if region_name == "Boat" or connected_r == "Boat": + continue + connected_r = StaticWitnessLogic.ALL_REGIONS_BY_NAME[connected_r] + if not any([panel in option for option in connection[1]]): + continue + if panel not in region["panels"] | connected_r["panels"]: + self.NECESSARY_EVENT_PANELS.add(panel) + + for always_hex, always_item in self.ALWAYS_EVENT_NAMES_BY_HEX.items(): + self.ALWAYS_EVENT_HEX_CODES.add(always_hex) + self.NECESSARY_EVENT_PANELS.add(always_hex) + self.EVENT_ITEM_NAMES[always_hex] = always_item + + for panel in self.NECESSARY_EVENT_PANELS: + pair = self.make_event_item_pair(panel) + self.EVENT_ITEM_PAIRS[pair[0]] = pair[1] + + def __init__(self, world: MultiWorld, player: int): + self.EVENT_PANELS_FROM_PANELS = set() + self.EVENT_PANELS_FROM_REGIONS = set() + + self.CONNECTIONS_BY_REGION_NAME = copy.copy(StaticWitnessLogic.STATIC_CONNECTIONS_BY_REGION_NAME) + self.DEPENDENT_REQUIREMENTS_BY_HEX = copy.copy(StaticWitnessLogic.STATIC_DEPENDENT_REQUIREMENTS_BY_HEX) + self.REQUIREMENTS_BY_HEX = dict() + + # Determining which panels need to be events is a difficult process. + # At the end, we will have EVENT_ITEM_PAIRS for all the necessary ones. + self.ORIGINAL_EVENT_PANELS = set() + self.NECESSARY_EVENT_PANELS = set() + self.EVENT_ITEM_PAIRS = dict() + self.ALWAYS_EVENT_HEX_CODES = set() + self.COMPLETELY_DISABLED_CHECKS = set() + self.ADDED_CHECKS = set() + self.VICTORY_LOCATION = "0x0356B" + self.EVENT_ITEM_NAMES = { + "0x01A0F": "Keep Laser Panel (Hedge Mazes) Activates", + "0x09D9B": "Monastery Overhead Doors Open", + "0x193A6": "Monastery Laser Panel Activates", + "0x00037": "Monastery Branch Panels Activate", + "0x0A079": "Access to Bunker Laser", + "0x0A3B5": "Door to Tutorial Discard Opens", + "0x01D3F": "Keep Laser Panel (Pressure Plates) Activates", + "0x09F7F": "Mountain Access", + "0x0367C": "Quarry Laser Mill Requirement Met", + "0x009A1": "Swamp Rotating Bridge Near Side", + "0x00006": "Swamp Cyan Water Drains", + "0x00990": "Swamp Broken Shapers 1 Activates", + "0x0A8DC": "Lower Avoid 6 Activates", + "0x0000A": "Swamp More Rotated Shapers 1 Access", + "0x09ED8": "Inside Mountain Second Layer Both Light Bridges Solved", + "0x0A3D0": "Quarry Laser Boathouse Requirement Met", + "0x00596": "Swamp Red Water Drains", + "0x28B39": "Town Tower 4th Door Opens" + } + + self.ALWAYS_EVENT_NAMES_BY_HEX = { + "0x0360D": "Symmetry Laser Activation", + "0x03608": "Desert Laser Activation", + "0x09F98": "Desert Laser Redirection", + "0x03612": "Quarry Laser Activation", + "0x19650": "Shadows Laser Activation", + "0x0360E": "Keep Laser Hedges Activation", + "0x03317": "Keep Laser Pressure Plates Activation", + "0x17CA4": "Monastery Laser Activation", + "0x032F5": "Town Laser Activation", + "0x03616": "Jungle Laser Activation", + "0x09DE0": "Bunker Laser Activation", + "0x03615": "Swamp Laser Activation", + "0x03613": "Treehouse Laser Activation", + "0x03535": "Shipwreck Video Pattern Knowledge", + "0x03542": "Mountain Video Pattern Knowledge", + "0x0339E": "Desert Video Pattern Knowledge", + "0x03481": "Tutorial Video Pattern Knowledge", + "0x03702": "Jungle Video Pattern Knowledge", + "0x2FAF6": "Theater Walkway Video Pattern Knowledge", + } + + self.make_options_adjustments(world, player) + self.make_dependency_reduced_checklist() + self.make_event_panel_lists() diff --git a/worlds/witness/regions.py b/worlds/witness/regions.py new file mode 100644 index 0000000000..a7d549e704 --- /dev/null +++ b/worlds/witness/regions.py @@ -0,0 +1,89 @@ +""" +Defines Region for The Witness, assigns locations to them, +and connects them with the proper requirements +""" + +from BaseClasses import MultiWorld, Entrance +from . import StaticWitnessLogic +from .locations import WitnessPlayerLocations +from .player_logic import WitnessPlayerLogic + + +class WitnessRegions: + """Class that defines Witness Regions""" + + locat = None + logic = None + + def make_lambda(self, panel_hex_to_solve_set, world, player, player_logic): + """ + Lambdas are made in a for loop, so the values have to be captured + This function is for that purpose + """ + + return lambda state: state._witness_can_solve_panels( + panel_hex_to_solve_set, world, player, player_logic, self.locat + ) + + def connect(self, world: MultiWorld, player: int, source: str, target: str, player_logic: WitnessPlayerLogic, + panel_hex_to_solve_set=None): + """ + connect two regions and set the corresponding requirement + """ + source_region = world.get_region(source, player) + target_region = world.get_region(target, player) + + connection = Entrance( + player, + source + " to " + target + " via " + str(panel_hex_to_solve_set), + source_region + ) + + connection.access_rule = self.make_lambda(panel_hex_to_solve_set, world, player, player_logic) + + source_region.exits.append(connection) + connection.connect(target_region) + + def create_regions(self, world, player: int, player_logic: WitnessPlayerLogic): + """ + Creates all the regions for The Witness + """ + from . import create_region + + world.regions += [ + create_region(world, player, 'Menu', self.locat, None, ["The Splashscreen?"]), + ] + + all_locations = set() + + for region_name, region in StaticWitnessLogic.ALL_REGIONS_BY_NAME.items(): + locations_for_this_region = [ + StaticWitnessLogic.CHECKS_BY_HEX[panel]["checkName"] for panel in region["panels"] + if StaticWitnessLogic.CHECKS_BY_HEX[panel]["checkName"] in self.locat.CHECK_LOCATION_TABLE + ] + locations_for_this_region += [ + StaticWitnessLogic.CHECKS_BY_HEX[panel]["checkName"] + " Solved" for panel in region["panels"] + if StaticWitnessLogic.CHECKS_BY_HEX[panel]["checkName"] + " Solved" in self.locat.EVENT_LOCATION_TABLE + ] + + all_locations = all_locations | set(locations_for_this_region) + + world.regions += [ + create_region(world, player, region_name, self.locat,locations_for_this_region) + ] + + for region_name, region in StaticWitnessLogic.ALL_REGIONS_BY_NAME.items(): + for connection in player_logic.CONNECTIONS_BY_REGION_NAME[region_name]: + if connection[0] == "Entry": + continue + self.connect(world, player, region_name, + connection[0], player_logic, connection[1]) + self.connect(world, player, connection[0], + region_name, player_logic, connection[1]) + + world.get_entrance("The Splashscreen?", player).connect( + world.get_region('First Hallway', player) + ) + + def __init__(self, locat: WitnessPlayerLocations): + self.locat = locat diff --git a/worlds/witness/rules.py b/worlds/witness/rules.py new file mode 100644 index 0000000000..e7ef30aaf0 --- /dev/null +++ b/worlds/witness/rules.py @@ -0,0 +1,171 @@ +""" +Defines the rules by which locations can be accessed, +depending on the items received +""" + +# pylint: disable=E1101 + +from BaseClasses import MultiWorld +from .player_logic import WitnessPlayerLogic +from .Options import is_option_enabled +from .locations import WitnessPlayerLocations +from . import StaticWitnessLogic +from ..AutoWorld import LogicMixin +from ..generic.Rules import set_rule + + +class WitnessLogic(LogicMixin): + """ + Logic macros that get reused + """ + + def _witness_has_lasers(self, world, player: int, amount: int) -> bool: + lasers = 0 + + lasers += int(self.has("Symmetry Laser Activation", player)) + lasers += int(self.has("Desert Laser Activation", player) + and self.has("Desert Laser Redirection", player)) + lasers += int(self.has("Town Laser Activation", player)) + lasers += int(self.has("Monastery Laser Activation", player)) + lasers += int(self.has("Keep Laser Pressure Plates Activation", player) and ( + is_option_enabled(world, player, "disable_non_randomized_puzzles") + or self.has("Keep Laser Hedges Activation", player) + )) + lasers += int(self.has("Quarry Laser Activation", player)) + lasers += int(self.has("Treehouse Laser Activation", player)) + lasers += int(self.has("Jungle Laser Activation", player)) + lasers += int(self.has("Bunker Laser Activation", player)) + lasers += int(self.has("Swamp Laser Activation", player)) + lasers += int(self.has("Shadows Laser Activation", player)) + + return lasers >= amount + + def _witness_can_solve_panel(self, panel, world, player, player_logic: WitnessPlayerLogic, locat): + """ + Determines whether a panel can be solved + """ + + panel_obj = StaticWitnessLogic.CHECKS_BY_HEX[panel] + check_name = panel_obj["checkName"] + + if (check_name + " Solved" in locat.EVENT_LOCATION_TABLE + and not self.has(player_logic.EVENT_ITEM_PAIRS[check_name + " Solved"], player)): + return False + if panel not in player_logic.ORIGINAL_EVENT_PANELS and not self.can_reach(check_name, "Location", player): + return False + if (panel in player_logic.ORIGINAL_EVENT_PANELS + and check_name + " Solved" not in locat.EVENT_LOCATION_TABLE + and not self._witness_safe_manual_panel_check(panel, world, player, player_logic, locat)): + return False + + return True + + def _witness_meets_item_requirements(self, panel, world, player, player_logic: WitnessPlayerLogic, locat): + """ + Checks whether item and panel requirements are met for + a panel + """ + + panel_req = player_logic.REQUIREMENTS_BY_HEX[panel] + + for option in panel_req: + if len(option) == 0: + return True + + valid_option = True + + for item in option: + if item == "7 Lasers": + if not self._witness_has_lasers(world, player, 7): + valid_option = False + break + elif item == "11 Lasers": + if not self._witness_has_lasers(world, player, 11): + valid_option = False + break + elif item in player_logic.NECESSARY_EVENT_PANELS: + if StaticWitnessLogic.CHECKS_BY_HEX[item]["checkName"] + " Solved" in locat.EVENT_LOCATION_TABLE: + valid_option = self.has(player_logic.EVENT_ITEM_NAMES[item], player) + else: + valid_option = self.can_reach( + StaticWitnessLogic.CHECKS_BY_HEX[item]["checkName"], "Location", player + ) + if not valid_option: + break + elif not self.has(item, player): + valid_option = False + break + + if valid_option: + return True + + return False + + def _witness_safe_manual_panel_check(self, panel, world, player, player_logic: WitnessPlayerLogic, locat): + """ + nested can_reach can cause problems, but only if the region being + checked is neither of the two original regions from the first + can_reach. + A nested can_reach is okay here because the only panels this + function is called on are panels that exist on either side of all + connections they are required for. + The spoiler log looks so much nicer this way, + it gets rid of a bunch of event items, only leaving a couple. :) + """ + region = StaticWitnessLogic.CHECKS_BY_HEX[panel]["region"]["name"] + + return ( + self._witness_meets_item_requirements(panel, world, player, player_logic, locat) + and self.can_reach(region, "Region", player) + ) + + def _witness_can_solve_panels(self, panel_hex_to_solve_set, world, player, player_logic: WitnessPlayerLogic, locat): + """ + Checks whether a set of panels can be solved. + """ + + for option in panel_hex_to_solve_set: + if len(option) == 0: + return True + + valid_option = True + + for panel in option: + if not self._witness_can_solve_panel(panel, world, player, player_logic, locat): + valid_option = False + break + + if valid_option: + return True + return False + + +def make_lambda(check_hex, world, player, player_logic, locat): + """ + Lambdas are created in a for loop so values need to be captured + """ + return lambda state: state._witness_meets_item_requirements( + check_hex, world, player, player_logic, locat + ) + + +def set_rules(world: MultiWorld, player: int, player_logic: WitnessPlayerLogic, locat: WitnessPlayerLocations): + """ + Sets all rules for all locations + """ + + for location in locat.CHECK_LOCATION_TABLE: + real_location = location + + if location in locat.EVENT_LOCATION_TABLE: + real_location = location[:-7] + + panel = StaticWitnessLogic.CHECKS_BY_NAME[real_location] + check_hex = panel["checkHex"] + + rule = make_lambda(check_hex, world, player, player_logic, locat) + + set_rule(world.get_location(location, player), rule) + + world.completion_condition[player] = \ + lambda state: state.has('Victory', player) diff --git a/worlds/witness/static_logic.py b/worlds/witness/static_logic.py new file mode 100644 index 0000000000..680ca68070 --- /dev/null +++ b/worlds/witness/static_logic.py @@ -0,0 +1,138 @@ +import os + +from .utils import define_new_region, parse_lambda + + +class StaticWitnessLogic: + ALL_ITEMS = set() + ALL_TRAPS = set() + ALL_BOOSTS = set() + + EVENT_PANELS_FROM_REGIONS = set() + + # All regions with a list of panels in them and the connections to other regions, before logic adjustments + ALL_REGIONS_BY_NAME = dict() + STATIC_CONNECTIONS_BY_REGION_NAME = dict() + + CHECKS_BY_HEX = dict() + CHECKS_BY_NAME = dict() + STATIC_DEPENDENT_REQUIREMENTS_BY_HEX = dict() + + def parse_items(self): + """ + Parses currently defined items from WitnessItems.txt + """ + + path = os.path.join(os.path.dirname(__file__), "WitnessItems.txt") + with open(path, "r", encoding="utf-8") as file: + current_set = self.ALL_ITEMS + + for line in file.readlines(): + line = line.strip() + + if line == "Progression:": + current_set = self.ALL_ITEMS + continue + if line == "Boosts:": + current_set = self.ALL_BOOSTS + continue + if line == "Traps:": + current_set = self.ALL_TRAPS + continue + if line == "": + continue + + line_split = line.split(" - ") + + current_set.add((line_split[1], int(line_split[0]))) + + def read_logic_file(self): + """ + Reads the logic file and does the initial population of data structures + """ + path = os.path.join(os.path.dirname(__file__), "WitnessLogic.txt") + with open(path, "r", encoding="utf-8") as file: + current_region = "" + + discard_ids = 0 + normal_panel_ids = 0 + vault_ids = 0 + laser_ids = 0 + + for line in file.readlines(): + line = line.strip() + + if line == "": + continue + + if line[0] != "0": + new_region_and_connections = define_new_region(line) + current_region = new_region_and_connections[0] + region_name = current_region["name"] + self.ALL_REGIONS_BY_NAME[region_name] = current_region + self.STATIC_CONNECTIONS_BY_REGION_NAME[region_name] = new_region_and_connections[1] + continue + + line_split = line.split(" - ") + + check_name_full = line_split.pop(0) + + check_hex = check_name_full[0:7] + check_name = check_name_full[9:-1] + + required_panel_lambda = line_split.pop(0) + required_item_lambda = line_split.pop(0) + + laser_names = { + "Laser", + "Laser Hedges", + "Laser Pressure Plates", + "Desert Laser Redirect" + } + is_vault_or_video = "Vault" in check_name or "Video" in check_name + + if "Discard" in check_name: + location_type = "Discard" + location_id = discard_ids + discard_ids += 1 + elif is_vault_or_video or check_name == "Tutorial Gate Close": + location_type = "Vault" + location_id = vault_ids + vault_ids += 1 + elif check_name in laser_names: + location_type = "Laser" + location_id = laser_ids + laser_ids += 1 + else: + location_type = "General" + location_id = normal_panel_ids + normal_panel_ids += 1 + + required_items = parse_lambda(required_item_lambda) + items_actually_in_the_game = {item[0] for item in self.ALL_ITEMS} + required_items = frozenset( + subset.intersection(items_actually_in_the_game) + for subset in required_items + ) + + requirement = { + "panels": parse_lambda(required_panel_lambda), + "items": required_items + } + + self.CHECKS_BY_HEX[check_hex] = { + "checkName": current_region["shortName"] + " " + check_name, + "checkHex": check_hex, + "region": current_region, + "idOffset": location_id, + "panelType": location_type + } + + self.CHECKS_BY_NAME[self.CHECKS_BY_HEX[check_hex]["checkName"]] = self.CHECKS_BY_HEX[check_hex] + self.STATIC_DEPENDENT_REQUIREMENTS_BY_HEX[check_hex] = requirement + + current_region["panels"].add(check_hex) + + def __init__(self): + self.parse_items() + self.read_logic_file() diff --git a/worlds/witness/utils.py b/worlds/witness/utils.py new file mode 100644 index 0000000000..85f43ab2fb --- /dev/null +++ b/worlds/witness/utils.py @@ -0,0 +1,58 @@ +import os +from Utils import cache_argsless + + +def define_new_region(region_string): + """ + Returns a region object by parsing a line in the logic file + """ + + region_string = region_string[:-1] + line_split = region_string.split(" - ") + + region_name_full = line_split.pop(0) + + region_name_split = region_name_full.split(" (") + + region_name = region_name_split[0] + region_name_simple = region_name_split[1][:-1] + + options = set() + + for _ in range(len(line_split) // 2): + connected_region = line_split.pop(0) + corresponding_lambda = line_split.pop(0) + + options.add( + (connected_region, parse_lambda(corresponding_lambda)) + ) + + region_obj = { + "name": region_name, + "shortName": region_name_simple, + "panels": set() + } + return region_obj, options + + +def parse_lambda(lambda_string): + """ + Turns a lambda String literal like this: a | b & c + into a set of sets like this: {{a}, {b, c}} + The lambda has to be in DNF. + """ + if lambda_string == "True": + return frozenset([frozenset()]) + split_ands = set(lambda_string.split(" | ")) + lambda_set = frozenset({frozenset(a.split(" & ")) for a in split_ands}) + + return lambda_set + + +@cache_argsless +def get_disable_unrandomized_list(): + adjustment_file = "Disable_Unrandomized.txt" + path = os.path.join(os.path.dirname(__file__), adjustment_file) + + with open(path) as f: + return [line.strip() for line in f.readlines()] \ No newline at end of file From 46d31c3ee32bb0c61a2369c785732ed633289de5 Mon Sep 17 00:00:00 2001 From: beauxq Date: Thu, 28 Apr 2022 09:03:44 -0700 Subject: [PATCH 027/149] typing, mostly in AutoWorld.py includes a bugfix (that was found by static type checking) in `get_filler_item_name` --- BaseClasses.py | 2 +- Utils.py | 22 +++++++++------ docs/api.md | 10 +++---- worlds/AutoWorld.py | 69 +++++++++++++++++++++++++-------------------- 4 files changed, 57 insertions(+), 46 deletions(-) diff --git a/BaseClasses.py b/BaseClasses.py index e5d92b95b6..e3b8aaf7d1 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -36,7 +36,7 @@ class MultiWorld(): plando_texts: List[Dict[str, str]] plando_items: List[List[Dict[str, Any]]] plando_connections: List - worlds: Dict[int, Any] + worlds: Dict[int, auto_world] groups: Dict[int, Group] itempool: List[Item] is_race: bool = False diff --git a/Utils.py b/Utils.py index 2068d48baa..a764dea95d 100644 --- a/Utils.py +++ b/Utils.py @@ -36,41 +36,45 @@ except ImportError: from yaml import Loader -def int16_as_bytes(value): +def int16_as_bytes(value: int) -> typing.List[int]: value = value & 0xFFFF return [value & 0xFF, (value >> 8) & 0xFF] -def int32_as_bytes(value): +def int32_as_bytes(value: int) -> typing.List[int]: value = value & 0xFFFFFFFF return [value & 0xFF, (value >> 8) & 0xFF, (value >> 16) & 0xFF, (value >> 24) & 0xFF] -def pc_to_snes(value): +def pc_to_snes(value: int) -> int: return ((value << 1) & 0x7F0000) | (value & 0x7FFF) | 0x8000 -def snes_to_pc(value): +def snes_to_pc(value: int) -> int: return ((value & 0x7F0000) >> 1) | (value & 0x7FFF) -def cache_argsless(function): +RetType = typing.TypeVar("RetType") + + +def cache_argsless(function: typing.Callable[[], RetType]) -> typing.Callable[[], RetType]: if function.__code__.co_argcount: raise Exception("Can only cache 0 argument functions with this cache.") - result = sentinel = object() + sentinel = object() + result: typing.Union[object, RetType] = sentinel - def _wrap(): + def _wrap() -> RetType: nonlocal result if result is sentinel: result = function() - return result + return typing.cast(RetType, result) return _wrap def is_frozen() -> bool: - return getattr(sys, 'frozen', False) + return typing.cast(bool, getattr(sys, 'frozen', False)) def local_path(*path: str) -> str: diff --git a/docs/api.md b/docs/api.md index cb1b1e4bdd..f81c29b3db 100644 --- a/docs/api.md +++ b/docs/api.md @@ -430,7 +430,7 @@ In addition, the following methods can be implemented and attributes can be set #### generate_early ```python -def generate_early(self): +def generate_early(self) -> None: # read player settings to world instance self.final_boss_hp = self.world.final_boss_hp[self.player].value ``` @@ -456,7 +456,7 @@ def create_event(self, event: str): #### create_items ```python -def create_items(self): +def create_items(self) -> None: # Add items to the Multiworld. # If there are two of the same item, the item has to be twice in the pool. # Which items are added to the pool may depend on player settings, @@ -483,7 +483,7 @@ def create_items(self): #### create_regions ```python -def create_regions(self): +def create_regions(self) -> None: # Add regions to the multiworld. "Menu" is the required starting point. # Arguments to Region() are name, type, human_readable_name, player, world r = Region("Menu", None, "Menu", self.player, self.world) @@ -518,7 +518,7 @@ def create_regions(self): #### generate_basic ```python -def generate_basic(self): +def generate_basic(self) -> None: # place "Victory" at "Final Boss" and set collection as win condition self.world.get_location("Final Boss", self.player)\ .place_locked_item(self.create_event("Victory")) @@ -539,7 +539,7 @@ def generate_basic(self): from ..generic.Rules import add_rule, set_rule, forbid_item from Items import get_item_type -def set_rules(self): +def set_rules(self) -> None: # For some worlds this step can be omitted if either a Logic mixin # (see below) is used, it's easier to apply the rules from data during # location generation or everything is in generate_basic diff --git a/worlds/AutoWorld.py b/worlds/AutoWorld.py index b2df8486d0..ee7f618d7a 100644 --- a/worlds/AutoWorld.py +++ b/worlds/AutoWorld.py @@ -1,16 +1,16 @@ from __future__ import annotations import logging -from typing import Dict, Set, Tuple, List, Optional, TextIO, Any, Callable, Union +from typing import Dict, FrozenSet, Set, Tuple, List, Optional, TextIO, Any, Callable, Union from BaseClasses import MultiWorld, Item, CollectionState, Location from Options import Option class AutoWorldRegister(type): - world_types: Dict[str, World] = {} + world_types: Dict[str, AutoWorldRegister] = {} - def __new__(cls, name: str, bases, dct: Dict[str, Any]): + def __new__(cls, name: str, bases: Tuple[type, ...], dct: Dict[str, Any]) -> AutoWorldRegister: if "web" in dct: assert isinstance(dct["web"], WebWorld), "WebWorld has to be instantiated." # filter out any events @@ -34,7 +34,8 @@ class AutoWorldRegister(type): if "required_client_version" in dct and bases: for base in bases: if "required_client_version" in base.__dict__: - dct["required_client_version"] = max(dct["required_client_version"], base.required_client_version) + dct["required_client_version"] = max(dct["required_client_version"], + base.__dict__["required_client_version"]) # construct class new_class = super().__new__(cls, name, bases, dct) @@ -44,9 +45,9 @@ class AutoWorldRegister(type): class AutoLogicRegister(type): - def __new__(cls, name, bases, dct): + def __new__(cls, name: str, bases: Tuple[type, ...], dct: Dict[str, Any]) -> AutoLogicRegister: new_class = super().__new__(cls, name, bases, dct) - function: Callable + function: Callable[..., Any] for item_name, function in dct.items(): if item_name == "copy_mixin": CollectionState.additional_copy_functions.append(function) @@ -59,13 +60,13 @@ class AutoLogicRegister(type): return new_class -def call_single(world: MultiWorld, method_name: str, player: int, *args): +def call_single(world: MultiWorld, method_name: str, player: int, *args: Any) -> Any: method = getattr(world.worlds[player], method_name) return method(*args) -def call_all(world: MultiWorld, method_name: str, *args): - world_types = set() +def call_all(world: MultiWorld, method_name: str, *args: Any) -> None: + world_types: Set[AutoWorldRegister] = set() for player in world.player_ids: world_types.add(world.worlds[player].__class__) call_single(world, method_name, player, *args) @@ -76,7 +77,7 @@ def call_all(world: MultiWorld, method_name: str, *args): stage_callable(world, *args) -def call_stage(world: MultiWorld, method_name: str, *args): +def call_stage(world: MultiWorld, method_name: str, *args: Any) -> None: world_types = {world.worlds[player].__class__ for player in world.player_ids} for world_type in world_types: stage_callable = getattr(world_type, f"stage_{method_name}", None) @@ -101,10 +102,12 @@ class World(metaclass=AutoWorldRegister): """A World object encompasses a game's Items, Locations, Rules and additional data or functionality required. A Game should have its own subclass of World in which it defines the required data structures.""" - options: Dict[str, type(Option)] = {} # link your Options mapping + options: Dict[str, Option[Any]] = {} # link your Options mapping game: str # name the game topology_present: bool = False # indicate if world type has any meaningful layout/pathing - all_item_and_group_names: Set[str] = frozenset() # gets automatically populated with all item and item group names + + # gets automatically populated with all item and item group names + all_item_and_group_names: FrozenSet[str] = frozenset() # map names to their IDs item_name_to_id: Dict[str, int] = {} @@ -126,7 +129,7 @@ class World(metaclass=AutoWorldRegister): # update this if the resulting multidata breaks forward-compatibility of the server required_server_version: Tuple[int, int, int] = (0, 2, 4) - hint_blacklist: Set[str] = frozenset() # any names that should not be hintable + hint_blacklist: FrozenSet[str] = frozenset() # any names that should not be hintable # NOTE: remote_items and remote_start_inventory are now available in the network protocol for the client to set. # These values will be removed. @@ -168,61 +171,65 @@ class World(metaclass=AutoWorldRegister): # can also be implemented as a classmethod and called "stage_", # in that case the MultiWorld object is passed as an argument and it gets called once for the entire multiworld. # An example of this can be found in alttp as stage_pre_fill - def generate_early(self): + def generate_early(self) -> None: pass - def create_regions(self): + def create_regions(self) -> None: pass - def create_items(self): + def create_items(self) -> None: pass - def set_rules(self): + def set_rules(self) -> None: pass - def generate_basic(self): + def generate_basic(self) -> None: pass - def pre_fill(self): + def pre_fill(self) -> None: """Optional method that is supposed to be used for special fill stages. This is run *after* plando.""" pass @classmethod - def fill_hook(cls, progitempool: List[Item], nonexcludeditempool: List[Item], - localrestitempool: Dict[int, List[Item]], nonlocalrestitempool: Dict[int, List[Item]], - restitempool: List[Item], fill_locations: List[Location]): + def fill_hook(cls, + progitempool: List[Item], + nonexcludeditempool: List[Item], + localrestitempool: Dict[int, List[Item]], + nonlocalrestitempool: Dict[int, List[Item]], + restitempool: List[Item], + fill_locations: List[Location]) -> None: """Special method that gets called as part of distribute_items_restrictive (main fill). This gets called once per present world type.""" pass - def post_fill(self): + def post_fill(self) -> None: """Optional Method that is called after regular fill. Can be used to do adjustments before output generation.""" - def generate_output(self, output_directory: str): + def generate_output(self, output_directory: str) -> None: """This method gets called from a threadpool, do not use world.random here. If you need any last-second randomization, use MultiWorld.slot_seeds[slot] instead.""" pass - def fill_slot_data(self) -> dict: + def fill_slot_data(self) -> Dict[str, Any]: # json of WebHostLib.models.Slot """Fill in the slot_data field in the Connected network package.""" return {} - def modify_multidata(self, multidata: dict): + def modify_multidata(self, multidata: Dict[str, Any]) -> None: # TODO: TypedDict for multidata? """For deeper modification of server multidata.""" pass # Spoiler writing is optional, these may not get called. - def write_spoiler_header(self, spoiler_handle: TextIO): + def write_spoiler_header(self, spoiler_handle: TextIO) -> None: """Write to the spoiler header. If individual it's right at the end of that player's options, if as stage it's right under the common header before per-player options.""" pass - def write_spoiler(self, spoiler_handle: TextIO): + def write_spoiler(self, spoiler_handle: TextIO) -> None: """Write to the spoiler "middle", this is after the per-player options and before locations, meant for useful or interesting info.""" pass - def write_spoiler_end(self, spoiler_handle: TextIO): + def write_spoiler_end(self, spoiler_handle: TextIO) -> None: """Write to the end of the spoiler""" pass @@ -236,7 +243,7 @@ class World(metaclass=AutoWorldRegister): def get_filler_item_name(self) -> str: """Called when the item pool needs to be filled with additional items to match location count.""" logging.warning(f"World {self} is generating a filler item without custom filler pool.") - return self.world.random.choice(self.item_name_to_id) + return self.world.random.choice(tuple(self.item_name_to_id.keys())) # decent place to implement progressive items, in most cases can stay as-is def collect_item(self, state: CollectionState, item: Item, remove: bool = False) -> Optional[str]: @@ -247,6 +254,7 @@ class World(metaclass=AutoWorldRegister): :param remove: indicate if this is meant to remove from state instead of adding.""" if item.advancement: return item.name + return None # called to create all_state, return Items that are created during pre_fill def get_pre_fill_items(self) -> List[Item]: @@ -277,4 +285,3 @@ class World(metaclass=AutoWorldRegister): # please use a prefix as all of them get clobbered together class LogicMixin(metaclass=AutoLogicRegister): pass - From ff783cf9a534b04dfb061c55df6a37187aec94b0 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Fri, 29 Apr 2022 04:05:45 +0200 Subject: [PATCH 028/149] WebHost: update flask --- WebHostLib/requirements.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/WebHostLib/requirements.txt b/WebHostLib/requirements.txt index da8f682ae9..e3cea7c77f 100644 --- a/WebHostLib/requirements.txt +++ b/WebHostLib/requirements.txt @@ -1,7 +1,7 @@ -flask>=2.0.3 +flask>=2.1.2 pony>=0.7.16 waitress>=2.1.0 flask-caching>=1.10.1 -Flask-Compress>=1.11 -Flask-Limiter>=2.2.0 +Flask-Compress>=1.12 +Flask-Limiter>=2.4.5.1 bokeh>=2.4.2 \ No newline at end of file From 09670a4475eaed1fa00fb61d47ec6402e7002059 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Fri, 29 Apr 2022 02:58:36 +0200 Subject: [PATCH 029/149] Factorio: demote EnergyLink text to debug logging level. --- FactorioClient.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/FactorioClient.py b/FactorioClient.py index 94c6844aa9..0b85dca331 100644 --- a/FactorioClient.py +++ b/FactorioClient.py @@ -121,8 +121,8 @@ class FactorioContext(CommonContext): gained = int(args["original_value"] - args["value"]) gained_text = Utils.format_SI_prefix(gained) + "J" if gained: - logger.info(f"EnergyLink: Received {gained_text}. " - f"{Utils.format_SI_prefix(args['value'])}J remaining.") + logger.debug(f"EnergyLink: Received {gained_text}. " + f"{Utils.format_SI_prefix(args['value'])}J remaining.") self.rcon_client.send_command(f"/ap-energylink {gained}") @@ -187,7 +187,7 @@ async def game_watcher(ctx: FactorioContext): }])) ctx.rcon_client.send_command( f"/ap-energylink -{value}") - logger.info(f"EnergyLink: Sent {Utils.format_SI_prefix(value)}J") + logger.debug(f"EnergyLink: Sent {Utils.format_SI_prefix(value)}J") await asyncio.sleep(0.1) From e8579771a5645342aea3981d529ea044d1f82142 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Thu, 28 Apr 2022 00:11:06 +0200 Subject: [PATCH 030/149] Requirements: update websockets --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index e300fa007c..9956a64a0e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ colorama>=0.4.4 -websockets>=10.2 +websockets>=10.3 PyYAML>=6.0 thefuzz[speedup]>=0.19.0 jinja2>=3.1.1 From 894a30b9bd3581ee2f05b486d9593f893c26dda9 Mon Sep 17 00:00:00 2001 From: espeon65536 <81029175+espeon65536@users.noreply.github.com> Date: Fri, 29 Apr 2022 20:37:28 -0500 Subject: [PATCH 031/149] Check for ROMs at beginning of generation (#475) --- Main.py | 2 ++ docs/api.md | 3 +++ worlds/AutoWorld.py | 6 ++++++ worlds/alttp/__init__.py | 6 ++++++ worlds/oot/__init__.py | 4 ++++ worlds/sm/__init__.py | 6 ++++++ worlds/smz3/__init__.py | 4 ++++ worlds/soe/__init__.py | 6 ++++++ 8 files changed, 37 insertions(+) diff --git a/Main.py b/Main.py index dcef439220..190255001f 100644 --- a/Main.py +++ b/Main.py @@ -93,6 +93,8 @@ def main(args, seed=None, baked_server_options: Optional[Dict[str, object]] = No f"Location IDs: {min(cls.location_id_to_name):{numlength}} - " f"{max(cls.location_id_to_name):{numlength}}") + AutoWorld.call_stage(world, "assert_generate") + AutoWorld.call_all(world, "generate_early") logger.info('') diff --git a/docs/api.md b/docs/api.md index f81c29b3db..239e65bc3f 100644 --- a/docs/api.md +++ b/docs/api.md @@ -426,6 +426,9 @@ In addition, the following methods can be implemented and attributes can be set * `required_client_version: Tuple(int, int, int)` Client version as tuple of 3 ints to make sure the client is compatible to this world (e.g. implements all required features) when connecting. +* `assert_generate(cls, world)` is a class method called at the start of + generation to check the existence of prerequisite files, usually a ROM for + games which require one. #### generate_early diff --git a/worlds/AutoWorld.py b/worlds/AutoWorld.py index ee7f618d7a..7f97474134 100644 --- a/worlds/AutoWorld.py +++ b/worlds/AutoWorld.py @@ -171,6 +171,12 @@ class World(metaclass=AutoWorldRegister): # can also be implemented as a classmethod and called "stage_", # in that case the MultiWorld object is passed as an argument and it gets called once for the entire multiworld. # An example of this can be found in alttp as stage_pre_fill + @classmethod + def assert_generate(cls) -> None: + """Checks that a game is capable of generating, usually checks for some base file like a ROM. + Not run for unittests since they don't produce output""" + pass + def generate_early(self) -> None: pass diff --git a/worlds/alttp/__init__.py b/worlds/alttp/__init__.py index 1a3453f922..9e028b2d4f 100644 --- a/worlds/alttp/__init__.py +++ b/worlds/alttp/__init__.py @@ -56,6 +56,12 @@ class ALTTPWorld(World): self.has_progressive_bows = False super(ALTTPWorld, self).__init__(*args, **kwargs) + @classmethod + def stage_assert_generate(cls, world): + rom_file = get_base_rom_path() + if not os.path.exists(rom_file): + raise FileNotFoundError(rom_file) + def generate_early(self): player = self.player world = self.world diff --git a/worlds/oot/__init__.py b/worlds/oot/__init__.py index 18b0f93936..cc68488cf6 100644 --- a/worlds/oot/__init__.py +++ b/worlds/oot/__init__.py @@ -89,6 +89,10 @@ class OOTWorld(World): self.hint_data_available = threading.Event() super(OOTWorld, self).__init__(world, player) + @classmethod + def stage_assert_generate(cls, world: MultiWorld): + rom = Rom(file=get_options()['oot_options']['rom_file']) + def generate_early(self): # Player name MUST be at most 16 bytes ascii-encoded, otherwise won't write to ROM correctly if len(bytes(self.world.get_player_name(self.player), 'ascii')) > 16: diff --git a/worlds/sm/__init__.py b/worlds/sm/__init__.py index 305ac87b79..50115093ca 100644 --- a/worlds/sm/__init__.py +++ b/worlds/sm/__init__.py @@ -83,6 +83,12 @@ class SMWorld(World): self.rom_name_available_event = threading.Event() super().__init__(world, player) + @classmethod + def stage_assert_generate(cls, world): + rom_file = get_base_rom_path() + if not os.path.exists(rom_file): + raise FileNotFoundError(rom_file) + def generate_early(self): Logic.factory('vanilla') diff --git a/worlds/smz3/__init__.py b/worlds/smz3/__init__.py index 6cb43878b5..8d3cd06bca 100644 --- a/worlds/smz3/__init__.py +++ b/worlds/smz3/__init__.py @@ -60,6 +60,10 @@ class SMZ3World(World): self.unreachable = [] super().__init__(world, player) + @classmethod + def stage_assert_generate(cls, world): + base_combined_rom = get_base_rom_bytes() + def generate_early(self): config = Config({}) config.GameMode = GameMode.Multiworld diff --git a/worlds/soe/__init__.py b/worlds/soe/__init__.py index 244c6f0711..fd94ebf29a 100644 --- a/worlds/soe/__init__.py +++ b/worlds/soe/__init__.py @@ -175,6 +175,12 @@ class SoEWorld(World): res.trap = item.type == pyevermizer.CHECK_TRAP return res + @classmethod + def stage_assert_generate(cls, world): + rom_file = get_base_rom_path() + if not os.path.exists(rom_file): + raise FileNotFoundError(rom_file) + def create_regions(self): # TODO: generate *some* regions from locations' requirements? r = Region('Menu', RegionType.Generic, 'Menu', self.player, self.world) From 5eab07d8d63d6101529842563b79ed413ad68d5b Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sat, 30 Apr 2022 04:39:08 +0200 Subject: [PATCH 032/149] Network: add games argument to GetDataPackage (#473) --- MultiServer.py | 9 ++++++++- Utils.py | 6 +++--- docs/network protocol.md | 7 +++---- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/MultiServer.py b/MultiServer.py index b9ac9eef95..a454284f9b 100644 --- a/MultiServer.py +++ b/MultiServer.py @@ -1466,7 +1466,13 @@ async def process_client_cmd(ctx: Context, client: Client, args: dict): elif cmd == "GetDataPackage": exclusions = args.get("exclusions", []) - if exclusions: + if "games" in args: + games = {name: game_data for name, game_data in network_data_package["games"].items() + if name in set(args.get("games", []))} + await ctx.send_msgs(client, [{"cmd": "DataPackage", + "data": {"games": games}}]) + # TODO: remove exclusions behaviour around 0.5.0 + elif exclusions: exclusions = set(exclusions) games = {name: game_data for name, game_data in network_data_package["games"].items() if name not in exclusions} @@ -1474,6 +1480,7 @@ async def process_client_cmd(ctx: Context, client: Client, args: dict): package["games"] = games await ctx.send_msgs(client, [{"cmd": "DataPackage", "data": package}]) + else: await ctx.send_msgs(client, [{"cmd": "DataPackage", "data": network_data_package}]) diff --git a/Utils.py b/Utils.py index a764dea95d..b353e9a72a 100644 --- a/Utils.py +++ b/Utils.py @@ -58,8 +58,7 @@ RetType = typing.TypeVar("RetType") def cache_argsless(function: typing.Callable[[], RetType]) -> typing.Callable[[], RetType]: - if function.__code__.co_argcount: - raise Exception("Can only cache 0 argument functions with this cache.") + assert not function.__code__.co_argcount, "Can only cache 0 argument functions with this cache." sentinel = object() result: typing.Union[object, RetType] = sentinel @@ -482,7 +481,8 @@ class VersionException(Exception): pass -def format_SI_prefix(value, power=1000, power_labels=('', 'k', 'M', 'G', 'T', "P", "E", "Z", "Y")): +# noinspection PyPep8Naming +def format_SI_prefix(value, power=1000, power_labels=('', 'k', 'M', 'G', 'T', "P", "E", "Z", "Y")) -> str: n = 0 while value > power: diff --git a/docs/network protocol.md b/docs/network protocol.md index ae93e369ee..48b8448d91 100644 --- a/docs/network protocol.md +++ b/docs/network protocol.md @@ -305,9 +305,9 @@ Basic chat command which sends text to the server to be distributed to other cli Requests the data package from the server. Does not require client authentication. #### Arguments -| Name | Type | Notes | -| ------ | ----- | ------ | -| exclusions | list\[str\] | Optional. If specified, will not send back the specified data. Such as, \["Factorio"\] -> Datapackage without Factorio data.| +| Name | Type | Notes | +|-------| ----- |---------------------------------------------------------------------------------------------------------------------------------| +| games | list\[str\] | Optional. If specified, will only send back the specified data. Such as, \["Factorio"\] -> Datapackage with only Factorio data. | ### Bounce Send this message to the server, tell it which clients should receive the message and @@ -569,7 +569,6 @@ Note: | Name | Type | Notes | | ------ | ----- | ------ | | games | dict[str, GameData] | Mapping of all Games and their respective data | -| version | int | Sum of all per-game version numbers, for clients that don't bother with per-game caching/updating. | #### GameData GameData is a **dict** but contains these keys and values. It's broken out into another "type" for ease of documentation. From bb710cc360657ab3814cc58a5d3d3561655c675a Mon Sep 17 00:00:00 2001 From: metzner Date: Sat, 30 Apr 2022 04:44:15 +0200 Subject: [PATCH 033/149] Fix: Traps weren't showing up --- worlds/witness/WitnessItems.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/worlds/witness/WitnessItems.txt b/worlds/witness/WitnessItems.txt index 2eb8d735eb..75504974d6 100644 --- a/worlds/witness/WitnessItems.txt +++ b/worlds/witness/WitnessItems.txt @@ -17,5 +17,5 @@ Boosts: 500 - Speed Boost Traps: -600 - Slowness Trap -610 - Power Surge Trap +600 - Slowness +610 - Power Surge From 897cbb9826bcb7ab80c815ae5f5573982baaed4c Mon Sep 17 00:00:00 2001 From: metzner Date: Sat, 30 Apr 2022 04:56:38 +0200 Subject: [PATCH 034/149] Moved Quarry Big Panel to uncommon --- worlds/witness/locations.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/worlds/witness/locations.py b/worlds/witness/locations.py index 548dcafd4d..a1d52b8994 100644 --- a/worlds/witness/locations.py +++ b/worlds/witness/locations.py @@ -51,7 +51,6 @@ class StaticWitnessLocations: "Quarry Mill Eraser and Dots 6", "Quarry Mill Eraser and Squares 8", "Quarry Mill Small Squares & Dots & and Eraser", - "Quarry Mill Big Squares & Dots & and Eraser", "Quarry Boathouse Intro Shapers", "Quarry Boathouse Eraser and Shapers 5", "Quarry Boathouse Stars & Eraser & and Shapers 2", @@ -140,6 +139,7 @@ class StaticWitnessLocations: UNCOMMON_LOCATIONS = { "Mountaintop River Shape", "Tutorial Patio Floor", + "Quarry Mill Big Squares & Dots & and Eraser", "Theater Tutorial Video", "Theater Desert Video", "Theater Jungle Video", From 4a703481ba72f2a7eb309f4754dc54b2de8c9507 Mon Sep 17 00:00:00 2001 From: metzner Date: Sat, 30 Apr 2022 05:30:04 +0200 Subject: [PATCH 035/149] Removed Mountain Trap Door Triple Exit location. --- worlds/witness/locations.py | 1 - 1 file changed, 1 deletion(-) diff --git a/worlds/witness/locations.py b/worlds/witness/locations.py index a1d52b8994..9d52c7d0af 100644 --- a/worlds/witness/locations.py +++ b/worlds/witness/locations.py @@ -122,7 +122,6 @@ class StaticWitnessLocations: "Treehouse Right Orange Bridge 12", "Treehouse Laser", - "Mountaintop Trap Door Triple Exit", "Mountaintop Discard", "Mountaintop Vault Box", From 9d638671bbe5f799e02d2fc9ff479a1b508a2292 Mon Sep 17 00:00:00 2001 From: metzner Date: Sat, 30 Apr 2022 05:31:55 +0200 Subject: [PATCH 036/149] Removed Tutorial Gate Close as a location for compatibility with current randomizer version --- worlds/witness/locations.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/worlds/witness/locations.py b/worlds/witness/locations.py index 9d52c7d0af..0bfaf011bc 100644 --- a/worlds/witness/locations.py +++ b/worlds/witness/locations.py @@ -150,8 +150,6 @@ class StaticWitnessLocations: } HARD_LOCATIONS = { - "Tutorial Gate Close", - "Inside Mountain Secret Area Dot Grid Triangles 4", "Inside Mountain Secret Area Symmetry Triangles", "Inside Mountain Secret Area Stars & Squares and Triangles 2", From c801cdbb3b1420f0a731c3cf9675c5917421972a Mon Sep 17 00:00:00 2001 From: espeon65536 Date: Sun, 1 May 2022 13:05:52 -0500 Subject: [PATCH 037/149] OoT: update logic files, naming, and logic tricks to version 6.2 Gerudo Training Grounds -> Ground Composers Grave -> Royal Familys Tomb Gerudo Fortress -> Thieves Hideout for the indoor sections --- worlds/oot/DungeonList.py | 4 +- worlds/oot/EntranceShuffle.py | 8 +- worlds/oot/HintList.py | 103 +++++++-------- worlds/oot/ItemPool.py | 82 ++++++------ worlds/oot/Items.py | 8 +- worlds/oot/LocationList.py | 109 ++++++++-------- worlds/oot/LogicTricks.py | 48 +++---- worlds/oot/Messages.py | 2 +- worlds/oot/Options.py | 4 +- worlds/oot/Patches.py | 14 +- worlds/oot/__init__.py | 14 +- .../Gerudo Training Ground MQ.json | 79 ++++++++++++ .../Gerudo Training Ground.json | 112 ++++++++++++++++ .../Gerudo Training Grounds MQ.json | 79 ------------ .../Gerudo Training Grounds.json | 112 ---------------- worlds/oot/data/Glitched World/Overworld.json | 20 +-- worlds/oot/data/LogicHelpers.json | 4 +- worlds/oot/data/World/Deku Tree MQ.json | 2 +- worlds/oot/data/World/Dodongos Cavern MQ.json | 2 +- worlds/oot/data/World/Forest Temple MQ.json | 3 +- .../data/World/Gerudo Training Ground MQ.json | 98 ++++++++++++++ .../data/World/Gerudo Training Ground.json | 120 ++++++++++++++++++ .../World/Gerudo Training Grounds MQ.json | 98 -------------- .../data/World/Gerudo Training Grounds.json | 120 ------------------ worlds/oot/data/World/Overworld.json | 24 ++-- 25 files changed, 632 insertions(+), 637 deletions(-) create mode 100644 worlds/oot/data/Glitched World/Gerudo Training Ground MQ.json create mode 100644 worlds/oot/data/Glitched World/Gerudo Training Ground.json delete mode 100644 worlds/oot/data/Glitched World/Gerudo Training Grounds MQ.json delete mode 100644 worlds/oot/data/Glitched World/Gerudo Training Grounds.json create mode 100644 worlds/oot/data/World/Gerudo Training Ground MQ.json create mode 100644 worlds/oot/data/World/Gerudo Training Ground.json delete mode 100644 worlds/oot/data/World/Gerudo Training Grounds MQ.json delete mode 100644 worlds/oot/data/World/Gerudo Training Grounds.json diff --git a/worlds/oot/DungeonList.py b/worlds/oot/DungeonList.py index dc3a8b0ca3..ab4fc88125 100644 --- a/worlds/oot/DungeonList.py +++ b/worlds/oot/DungeonList.py @@ -87,8 +87,8 @@ dungeon_table = [ 'dungeon_item': 1, }, { - 'name': 'Gerudo Training Grounds', - 'hint': 'the Gerudo Training Grounds', + 'name': 'Gerudo Training Ground', + 'hint': 'the Gerudo Training Ground', 'font_color': 'Yellow', 'boss_key': 0, 'small_key': 9, diff --git a/worlds/oot/EntranceShuffle.py b/worlds/oot/EntranceShuffle.py index 9008ccdff2..08d1e3ff79 100644 --- a/worlds/oot/EntranceShuffle.py +++ b/worlds/oot/EntranceShuffle.py @@ -93,8 +93,8 @@ entrance_shuffle_table = [ ('Bottom of the Well -> Kakariko Village', { 'index': 0x02A6 })), ('Dungeon', ('ZF Ice Ledge -> Ice Cavern Beginning', { 'index': 0x0088 }), ('Ice Cavern Beginning -> ZF Ice Ledge', { 'index': 0x03D4 })), - ('Dungeon', ('Gerudo Fortress -> Gerudo Training Grounds Lobby', { 'index': 0x0008 }), - ('Gerudo Training Grounds Lobby -> Gerudo Fortress', { 'index': 0x03A8 })), + ('Dungeon', ('Gerudo Fortress -> Gerudo Training Ground Lobby', { 'index': 0x0008 }), + ('Gerudo Training Ground Lobby -> Gerudo Fortress', { 'index': 0x03A8 })), ('Interior', ('Kokiri Forest -> KF Midos House', { 'index': 0x0433 }), ('KF Midos House -> Kokiri Forest', { 'index': 0x0443 })), @@ -251,8 +251,8 @@ entrance_shuffle_table = [ ('Graveyard Shield Grave -> Graveyard', { 'index': 0x035D })), ('Grave', ('Graveyard -> Graveyard Heart Piece Grave', { 'index': 0x031C }), ('Graveyard Heart Piece Grave -> Graveyard', { 'index': 0x0361 })), - ('Grave', ('Graveyard -> Graveyard Composers Grave', { 'index': 0x002D }), - ('Graveyard Composers Grave -> Graveyard', { 'index': 0x050B })), + ('Grave', ('Graveyard -> Graveyard Royal Familys Tomb', { 'index': 0x002D }), + ('Graveyard Royal Familys Tomb -> Graveyard', { 'index': 0x050B })), ('Grave', ('Graveyard -> Graveyard Dampes Grave', { 'index': 0x044F }), ('Graveyard Dampes Grave -> Graveyard', { 'index': 0x0359 })), diff --git a/worlds/oot/HintList.py b/worlds/oot/HintList.py index e94fd5f323..06af1a9be3 100644 --- a/worlds/oot/HintList.py +++ b/worlds/oot/HintList.py @@ -6,7 +6,7 @@ from BaseClasses import LocationProgressType # DMC Death Mountain Crater # DMT Death Mountain Trail # GC Goron City -# GF Gerudo Fortress +# GF Gerudo's Fortress # GS Gold Skulltula # GV Gerudo Valley # HC Hyrule Castle @@ -17,6 +17,7 @@ from BaseClasses import LocationProgressType # LW Lost Woods # OGC Outside Ganon's Castle # SFM Sacred Forest Meadow +# TH Thieves' Hideout # ZD Zora's Domain # ZF Zora's Fountain # ZR Zora's River @@ -247,7 +248,7 @@ hintTable = { 'BossKey': (["a master of unlocking", "a dungeon's master pass"], "a Boss Key", 'item'), 'GanonBossKey': (["a master of unlocking", "a dungeon's master pass"], "a Boss Key", 'item'), 'SmallKey': (["a tool for unlocking", "a dungeon pass", "a lock remover", "a lockpick"], "a Small Key", 'item'), - 'FortressSmallKey': (["a get out of jail free card"], "a Jail Key", 'item'), + 'HideoutSmallKey': (["a get out of jail free card"], "a Jail Key", 'item'), 'KeyError': (["something mysterious", "an unknown treasure"], "An Error (Please Report This)", 'item'), 'Arrows (5)': (["a few danger darts", "a few sharp shafts"], "Arrows (5 pieces)", 'item'), 'Arrows (10)': (["some danger darts", "some sharp shafts"], "Arrows (10 pieces)", 'item'), @@ -271,7 +272,7 @@ hintTable = { 'KF Links House Cow': ("the #bovine bounty of a horseback hustle# gifts", "#Malon's obstacle course# leads to", 'always'), 'Song from Ocarina of Time': ("the #Ocarina of Time# teaches", None, ['song', 'sometimes']), - 'Song from Composers Grave': (["#ReDead in the Composers' Grave# guard", "the #Composer Brothers wrote#"], None, ['song', 'sometimes']), + 'Song from Royal Familys Tomb': (["#ReDead in the royal tomb# guard", "the #Composer Brothers wrote#"], None, ['song', 'sometimes']), 'Sheik in Forest': ("#in a meadow# Sheik teaches", None, ['song', 'sometimes']), 'Sheik at Temple': ("Sheik waits at a #monument to time# to teach", None, ['song', 'sometimes']), 'Sheik in Crater': ("the #crater's melody# is", None, ['song', 'sometimes']), @@ -304,7 +305,7 @@ hintTable = { 'ZF GS Hidden Cave': ("a spider high #above the icy waters# holds", None, ['overworld', 'sometimes']), 'Wasteland Chest': (["#deep in the wasteland# is", "beneath #the sands#, flames reveal"], None, ['overworld', 'sometimes']), 'Wasteland GS': ("a #spider in the wasteland# holds", None, ['overworld', 'sometimes']), - 'Graveyard Composers Grave Chest': (["#flames in the Composers' Grave# reveal", "the #Composer Brothers hid#"], None, ['overworld', 'sometimes']), + 'Royal Familys Tomb Chest': (["#flames in the royal tomb# reveal", "the #Composer Brothers hid#"], None, ['overworld', 'sometimes']), 'ZF Bottom Freestanding PoH': ("#under the icy waters# lies", None, ['overworld', 'sometimes']), 'GC Pot Freestanding PoH': ("spinning #Goron pottery# contains", None, ['overworld', 'sometimes']), 'ZD King Zora Thawed': ("a #defrosted dignitary# gifts", "unfreezing #King Zora# grants", ['overworld', 'sometimes']), @@ -327,10 +328,10 @@ hintTable = { 'Water Temple MQ Freestanding Key': ("hidden in a #box under the lake# lies", "hidden in a #box in the Water Temple# lies", ['dungeon', 'sometimes']), 'Water Temple MQ GS Freestanding Key Area': ("the #locked spider under the lake# holds", "the #locked spider in the Water Temple# holds", ['dungeon', 'sometimes']), 'Water Temple MQ GS Triple Wall Torch': ("a spider behind a #gate under the lake# holds", "a spider behind a #gate in the Water Temple# holds", ['dungeon', 'sometimes']), - 'Gerudo Training Grounds Underwater Silver Rupee Chest': (["those who seek #sunken silver rupees# will find", "the #thieves' underwater training# rewards"], None, ['dungeon', 'sometimes']), - 'Gerudo Training Grounds MQ Underwater Silver Rupee Chest': (["those who seek #sunken silver rupees# will find", "the #thieves' underwater training# rewards"], None, ['dungeon', 'sometimes']), - 'Gerudo Training Grounds Maze Path Final Chest': ("the final prize of #the thieves' training# is", None, ['dungeon', 'sometimes']), - 'Gerudo Training Grounds MQ Ice Arrows Chest': ("the final prize of #the thieves' training# is", None, ['dungeon', 'sometimes']), + 'Gerudo Training Ground Underwater Silver Rupee Chest': (["those who seek #sunken silver rupees# will find", "the #thieves' underwater training# rewards"], None, ['dungeon', 'sometimes']), + 'Gerudo Training Ground MQ Underwater Silver Rupee Chest': (["those who seek #sunken silver rupees# will find", "the #thieves' underwater training# rewards"], None, ['dungeon', 'sometimes']), + 'Gerudo Training Ground Maze Path Final Chest': ("the final prize of #the thieves' training# is", None, ['dungeon', 'sometimes']), + 'Gerudo Training Ground MQ Ice Arrows Chest': ("the final prize of #the thieves' training# is", None, ['dungeon', 'sometimes']), 'Bottom of the Well Lens of Truth Chest': (["the well's #grasping ghoul# hides", "a #nether dweller in the well# holds"], "#Dead Hand in the well# holds", ['dungeon', 'sometimes']), 'Bottom of the Well MQ Compass Chest': (["the well's #grasping ghoul# hides", "a #nether dweller in the well# holds"], "#Dead Hand in the well# holds", ['dungeon', 'sometimes']), 'Spirit Temple Silver Gauntlets Chest': ("the treasure #sought by Nabooru# is", "upon the #Colossus's right hand# is", ['dungeon', 'sometimes']), @@ -402,7 +403,7 @@ hintTable = { 'LLR Talons Chickens': ("#finding Super Cuccos# is rewarded with", None, 'exclude'), 'GC Rolling Goron as Child': ("the prize offered by a #large rolling Goron# is", None, 'exclude'), 'LH Underwater Item': ("the #sunken treasure in a lake# is", None, 'exclude'), - 'GF Gerudo Membership Card': ("#rescuing captured carpenters# is rewarded with", None, 'exclude'), + 'Hideout Gerudo Membership Card': ("#rescuing captured carpenters# is rewarded with", None, 'exclude'), 'Wasteland Bombchu Salesman': ("a #carpet guru# sells", None, 'exclude'), 'Kak Impas House Freestanding PoH': ("#imprisoned in a house# lies", None, 'exclude'), @@ -422,10 +423,10 @@ hintTable = { 'DMT Freestanding PoH': ("above a #mountain cavern entrance# is", None, 'exclude'), 'DMC Wall Freestanding PoH': ("nestled in a #volcanic wall# is", None, 'exclude'), 'DMC Volcano Freestanding PoH': ("obscured by #volcanic ash# is", None, 'exclude'), - 'GF North F1 Carpenter': ("#defeating Gerudo guards# reveals", None, 'exclude'), - 'GF North F2 Carpenter': ("#defeating Gerudo guards# reveals", None, 'exclude'), - 'GF South F1 Carpenter': ("#defeating Gerudo guards# reveals", None, 'exclude'), - 'GF South F2 Carpenter': ("#defeating Gerudo guards# reveals", None, 'exclude'), + 'Hideout Jail Guard (1 Torch)': ("#defeating Gerudo guards# reveals", None, 'exclude'), + 'Hideout Jail Guard (2 Torches)': ("#defeating Gerudo guards# reveals", None, 'exclude'), + 'Hideout Jail Guard (3 Torches)': ("#defeating Gerudo guards# reveals", None, 'exclude'), + 'Hideout Jail Guard (4 Torches)': ("#defeating Gerudo guards# reveals", None, 'exclude'), 'Deku Tree Map Chest': ("in the #center of the Deku Tree# lies", None, 'exclude'), 'Deku Tree Slingshot Chest': ("the #treasure guarded by a scrub# in the Deku Tree is", None, 'exclude'), @@ -641,42 +642,42 @@ hintTable = { 'Ice Cavern MQ Map Chest': ("a #wall of ice# protects", None, 'exclude'), 'Ice Cavern MQ Freestanding PoH': ("#winds of ice# surround", None, 'exclude'), - 'Gerudo Training Grounds Lobby Left Chest': ("a #blinded eye in the Gerudo Training Grounds# drops", None, 'exclude'), - 'Gerudo Training Grounds Lobby Right Chest': ("a #blinded eye in the Gerudo Training Grounds# drops", None, 'exclude'), - 'Gerudo Training Grounds Stalfos Chest': ("#soldiers walking on shifting sands# in the Gerudo Training Grounds guard", None, 'exclude'), - 'Gerudo Training Grounds Beamos Chest': ("#reptilian warriors# in the Gerudo Training Grounds protect", None, 'exclude'), - 'Gerudo Training Grounds Hidden Ceiling Chest': ("the #Eye of Truth# in the Gerudo Training Grounds reveals", None, 'exclude'), - 'Gerudo Training Grounds Maze Path First Chest': ("the first prize of #the thieves' training# is", None, 'exclude'), - 'Gerudo Training Grounds Maze Path Second Chest': ("the second prize of #the thieves' training# is", None, 'exclude'), - 'Gerudo Training Grounds Maze Path Third Chest': ("the third prize of #the thieves' training# is", None, 'exclude'), - 'Gerudo Training Grounds Maze Right Central Chest': ("the #Song of Time# in the Gerudo Training Grounds leads to", None, 'exclude'), - 'Gerudo Training Grounds Maze Right Side Chest': ("the #Song of Time# in the Gerudo Training Grounds leads to", None, 'exclude'), - 'Gerudo Training Grounds Hammer Room Clear Chest': ("#fiery foes# in the Gerudo Training Grounds guard", None, 'exclude'), - 'Gerudo Training Grounds Hammer Room Switch Chest': ("#engulfed in flame# where thieves train lies", None, 'exclude'), - 'Gerudo Training Grounds Eye Statue Chest': ("thieves #blind four faces# to find", None, 'exclude'), - 'Gerudo Training Grounds Near Scarecrow Chest': ("thieves #blind four faces# to find", None, 'exclude'), - 'Gerudo Training Grounds Before Heavy Block Chest': ("#before a block of silver# thieves can find", None, 'exclude'), - 'Gerudo Training Grounds Heavy Block First Chest': ("a #feat of strength# rewards thieves with", None, 'exclude'), - 'Gerudo Training Grounds Heavy Block Second Chest': ("a #feat of strength# rewards thieves with", None, 'exclude'), - 'Gerudo Training Grounds Heavy Block Third Chest': ("a #feat of strength# rewards thieves with", None, 'exclude'), - 'Gerudo Training Grounds Heavy Block Fourth Chest': ("a #feat of strength# rewards thieves with", None, 'exclude'), - 'Gerudo Training Grounds Freestanding Key': ("the #Song of Time# in the Gerudo Training Grounds leads to", None, 'exclude'), + 'Gerudo Training Ground Lobby Left Chest': ("a #blinded eye in the Gerudo Training Ground# drops", None, 'exclude'), + 'Gerudo Training Ground Lobby Right Chest': ("a #blinded eye in the Gerudo Training Ground# drops", None, 'exclude'), + 'Gerudo Training Ground Stalfos Chest': ("#soldiers walking on shifting sands# in the Gerudo Training Ground guard", None, 'exclude'), + 'Gerudo Training Ground Beamos Chest': ("#reptilian warriors# in the Gerudo Training Ground protect", None, 'exclude'), + 'Gerudo Training Ground Hidden Ceiling Chest': ("the #Eye of Truth# in the Gerudo Training Ground reveals", None, 'exclude'), + 'Gerudo Training Ground Maze Path First Chest': ("the first prize of #the thieves' training# is", None, 'exclude'), + 'Gerudo Training Ground Maze Path Second Chest': ("the second prize of #the thieves' training# is", None, 'exclude'), + 'Gerudo Training Ground Maze Path Third Chest': ("the third prize of #the thieves' training# is", None, 'exclude'), + 'Gerudo Training Ground Maze Right Central Chest': ("the #Song of Time# in the Gerudo Training Ground leads to", None, 'exclude'), + 'Gerudo Training Ground Maze Right Side Chest': ("the #Song of Time# in the Gerudo Training Ground leads to", None, 'exclude'), + 'Gerudo Training Ground Hammer Room Clear Chest': ("#fiery foes# in the Gerudo Training Ground guard", None, 'exclude'), + 'Gerudo Training Ground Hammer Room Switch Chest': ("#engulfed in flame# where thieves train lies", None, 'exclude'), + 'Gerudo Training Ground Eye Statue Chest': ("thieves #blind four faces# to find", None, 'exclude'), + 'Gerudo Training Ground Near Scarecrow Chest': ("thieves #blind four faces# to find", None, 'exclude'), + 'Gerudo Training Ground Before Heavy Block Chest': ("#before a block of silver# thieves can find", None, 'exclude'), + 'Gerudo Training Ground Heavy Block First Chest': ("a #feat of strength# rewards thieves with", None, 'exclude'), + 'Gerudo Training Ground Heavy Block Second Chest': ("a #feat of strength# rewards thieves with", None, 'exclude'), + 'Gerudo Training Ground Heavy Block Third Chest': ("a #feat of strength# rewards thieves with", None, 'exclude'), + 'Gerudo Training Ground Heavy Block Fourth Chest': ("a #feat of strength# rewards thieves with", None, 'exclude'), + 'Gerudo Training Ground Freestanding Key': ("the #Song of Time# in the Gerudo Training Ground leads to", None, 'exclude'), - 'Gerudo Training Grounds MQ Lobby Right Chest': ("#thieves prepare for training# with", None, 'exclude'), - 'Gerudo Training Grounds MQ Lobby Left Chest': ("#thieves prepare for training# with", None, 'exclude'), - 'Gerudo Training Grounds MQ First Iron Knuckle Chest': ("#soldiers walking on shifting sands# in the Gerudo Training Grounds guard", None, 'exclude'), - 'Gerudo Training Grounds MQ Before Heavy Block Chest': ("#before a block of silver# thieves can find", None, 'exclude'), - 'Gerudo Training Grounds MQ Eye Statue Chest': ("thieves #blind four faces# to find", None, 'exclude'), - 'Gerudo Training Grounds MQ Flame Circle Chest': ("#engulfed in flame# where thieves train lies", None, 'exclude'), - 'Gerudo Training Grounds MQ Second Iron Knuckle Chest': ("#fiery foes# in the Gerudo Training Grounds guard", None, 'exclude'), - 'Gerudo Training Grounds MQ Dinolfos Chest': ("#reptilian warriors# in the Gerudo Training Grounds protect", None, 'exclude'), - 'Gerudo Training Grounds MQ Maze Right Central Chest': ("a #path of fire# leads thieves to", None, 'exclude'), - 'Gerudo Training Grounds MQ Maze Path First Chest': ("the first prize of #the thieves' training# is", None, 'exclude'), - 'Gerudo Training Grounds MQ Maze Right Side Chest': ("a #path of fire# leads thieves to", None, 'exclude'), - 'Gerudo Training Grounds MQ Maze Path Third Chest': ("the third prize of #the thieves' training# is", None, 'exclude'), - 'Gerudo Training Grounds MQ Maze Path Second Chest': ("the second prize of #the thieves' training# is", None, 'exclude'), - 'Gerudo Training Grounds MQ Hidden Ceiling Chest': ("the #Eye of Truth# in the Gerudo Training Grounds reveals", None, 'exclude'), - 'Gerudo Training Grounds MQ Heavy Block Chest': ("a #feat of strength# rewards thieves with", None, 'exclude'), + 'Gerudo Training Ground MQ Lobby Right Chest': ("#thieves prepare for training# with", None, 'exclude'), + 'Gerudo Training Ground MQ Lobby Left Chest': ("#thieves prepare for training# with", None, 'exclude'), + 'Gerudo Training Ground MQ First Iron Knuckle Chest': ("#soldiers walking on shifting sands# in the Gerudo Training Ground guard", None, 'exclude'), + 'Gerudo Training Ground MQ Before Heavy Block Chest': ("#before a block of silver# thieves can find", None, 'exclude'), + 'Gerudo Training Ground MQ Eye Statue Chest': ("thieves #blind four faces# to find", None, 'exclude'), + 'Gerudo Training Ground MQ Flame Circle Chest': ("#engulfed in flame# where thieves train lies", None, 'exclude'), + 'Gerudo Training Ground MQ Second Iron Knuckle Chest': ("#fiery foes# in the Gerudo Training Ground guard", None, 'exclude'), + 'Gerudo Training Ground MQ Dinolfos Chest': ("#reptilian warriors# in the Gerudo Training Ground protect", None, 'exclude'), + 'Gerudo Training Ground MQ Maze Right Central Chest': ("a #path of fire# leads thieves to", None, 'exclude'), + 'Gerudo Training Ground MQ Maze Path First Chest': ("the first prize of #the thieves' training# is", None, 'exclude'), + 'Gerudo Training Ground MQ Maze Right Side Chest': ("a #path of fire# leads thieves to", None, 'exclude'), + 'Gerudo Training Ground MQ Maze Path Third Chest': ("the third prize of #the thieves' training# is", None, 'exclude'), + 'Gerudo Training Ground MQ Maze Path Second Chest': ("the second prize of #the thieves' training# is", None, 'exclude'), + 'Gerudo Training Ground MQ Hidden Ceiling Chest': ("the #Eye of Truth# in the Gerudo Training Ground reveals", None, 'exclude'), + 'Gerudo Training Ground MQ Heavy Block Chest': ("a #feat of strength# rewards thieves with", None, 'exclude'), 'Ganons Tower Boss Key Chest': ("the #Evil King# hoards", None, 'exclude'), @@ -1038,7 +1039,7 @@ hintTable = { 'GV Fortress Side -> GV Carpenter Tent': ("a #tent in the valley# covers", None, 'entrance'), 'Graveyard Warp Pad Region -> Shadow Temple Entryway': ("at the #back of the Graveyard#, there is", None, 'entrance'), 'Lake Hylia -> Water Temple Lobby': ("deep #under a vast lake#, one can find", None, 'entrance'), - 'Gerudo Fortress -> Gerudo Training Grounds Lobby': ("paying a #fee to the Gerudos# grants access to", None, 'entrance'), + 'Gerudo Fortress -> Gerudo Training Ground Lobby': ("paying a #fee to the Gerudos# grants access to", None, 'entrance'), 'Zoras Fountain -> Jabu Jabus Belly Beginning': ("inside #Jabu Jabu#, one can find", None, 'entrance'), 'Kakariko Village -> Bottom of the Well': ("a #village well# leads to", None, 'entrance'), @@ -1085,7 +1086,7 @@ hintTable = { 'ZF Great Fairy Fountain': ("a #Great Fairy Fountain#", None, 'region'), 'Graveyard Shield Grave': ("a #grave with a free chest#", None, 'region'), 'Graveyard Heart Piece Grave': ("a chest spawned by #Sun's Song#", None, 'region'), - 'Graveyard Composers Grave': ("the #Composers' Grave#", None, 'region'), + 'Royal Familys Tomb': ("the #Royal Family's Tomb#", None, 'region'), 'Graveyard Dampes Grave': ("Dampé's Grave", None, 'region'), 'DMT Cow Grotto': ("a solitary #Cow#", None, 'region'), 'HC Storms Grotto': ("a sandy grotto with #fragile walls#", None, 'region'), @@ -1198,7 +1199,7 @@ hintTable = { 'Spirit Temple': ("the goddess of the sand", "Spirit Temple", 'dungeonName'), 'Ice Cavern': ("a frozen maze", "Ice Cavern", 'dungeonName'), 'Bottom of the Well': ("a shadow\'s prison", "Bottom of the Well", 'dungeonName'), - 'Gerudo Training Grounds': ("the test of thieves", "Gerudo Training Grounds", 'dungeonName'), + 'Gerudo Training Ground': ("the test of thieves", "Gerudo Training Ground", 'dungeonName'), 'Ganons Castle': ("a conquered citadel", "Inside Ganon's Castle", 'dungeonName'), 'Queen Gohma': ("One inside an #ancient tree#...", "One in the #Deku Tree#...", 'boss'), diff --git a/worlds/oot/ItemPool.py b/worlds/oot/ItemPool.py index d4b77f074b..24dda8e24f 100644 --- a/worlds/oot/ItemPool.py +++ b/worlds/oot/ItemPool.py @@ -570,15 +570,15 @@ vanillaSK = { 'Forest Temple Well Chest': 'Small Key (Forest Temple)', 'Ganons Castle Light Trial Invisible Enemies Chest': 'Small Key (Ganons Castle)', 'Ganons Castle Light Trial Lullaby Chest': 'Small Key (Ganons Castle)', - 'Gerudo Training Grounds Beamos Chest': 'Small Key (Gerudo Training Grounds)', - 'Gerudo Training Grounds Eye Statue Chest': 'Small Key (Gerudo Training Grounds)', - 'Gerudo Training Grounds Hammer Room Switch Chest': 'Small Key (Gerudo Training Grounds)', - 'Gerudo Training Grounds Heavy Block Third Chest': 'Small Key (Gerudo Training Grounds)', - 'Gerudo Training Grounds Hidden Ceiling Chest': 'Small Key (Gerudo Training Grounds)', - 'Gerudo Training Grounds Near Scarecrow Chest': 'Small Key (Gerudo Training Grounds)', - 'Gerudo Training Grounds Stalfos Chest': 'Small Key (Gerudo Training Grounds)', - 'Gerudo Training Grounds Underwater Silver Rupee Chest': 'Small Key (Gerudo Training Grounds)', - 'Gerudo Training Grounds Freestanding Key': 'Small Key (Gerudo Training Grounds)', + 'Gerudo Training Ground Beamos Chest': 'Small Key (Gerudo Training Ground)', + 'Gerudo Training Ground Eye Statue Chest': 'Small Key (Gerudo Training Ground)', + 'Gerudo Training Ground Hammer Room Switch Chest': 'Small Key (Gerudo Training Ground)', + 'Gerudo Training Ground Heavy Block Third Chest': 'Small Key (Gerudo Training Ground)', + 'Gerudo Training Ground Hidden Ceiling Chest': 'Small Key (Gerudo Training Ground)', + 'Gerudo Training Ground Near Scarecrow Chest': 'Small Key (Gerudo Training Ground)', + 'Gerudo Training Ground Stalfos Chest': 'Small Key (Gerudo Training Ground)', + 'Gerudo Training Ground Underwater Silver Rupee Chest': 'Small Key (Gerudo Training Ground)', + 'Gerudo Training Ground Freestanding Key': 'Small Key (Gerudo Training Ground)', 'Shadow Temple After Wind Hidden Chest': 'Small Key (Shadow Temple)', 'Shadow Temple Early Silver Rupee Chest': 'Small Key (Shadow Temple)', 'Shadow Temple Falling Spikes Switch Chest': 'Small Key (Shadow Temple)', @@ -612,9 +612,9 @@ vanillaSK = { 'Ganons Castle MQ Shadow Trial Eye Switch Chest': 'Small Key (Ganons Castle)', 'Ganons Castle MQ Spirit Trial Sun Back Left Chest': 'Small Key (Ganons Castle)', 'Ganons Castle MQ Forest Trial Freestanding Key': 'Small Key (Ganons Castle)', - 'Gerudo Training Grounds MQ Dinolfos Chest': 'Small Key (Gerudo Training Grounds)', - 'Gerudo Training Grounds MQ Flame Circle Chest': 'Small Key (Gerudo Training Grounds)', - 'Gerudo Training Grounds MQ Underwater Silver Rupee Chest': 'Small Key (Gerudo Training Grounds)', + 'Gerudo Training Ground MQ Dinolfos Chest': 'Small Key (Gerudo Training Ground)', + 'Gerudo Training Ground MQ Flame Circle Chest': 'Small Key (Gerudo Training Ground)', + 'Gerudo Training Ground MQ Underwater Silver Rupee Chest': 'Small Key (Gerudo Training Ground)', 'Shadow Temple MQ Falling Spikes Switch Chest': 'Small Key (Shadow Temple)', 'Shadow Temple MQ Invisible Blades Invisible Chest': 'Small Key (Shadow Temple)', 'Shadow Temple MQ Early Gibdos Chest': 'Small Key (Shadow Temple)', @@ -1031,7 +1031,7 @@ def get_pool_core(world): pool.extend(['Bombchus'] * 2) if not world.dungeon_mq['Bottom of the Well']: pool.extend(['Bombchus']) - if world.dungeon_mq['Gerudo Training Grounds']: + if world.dungeon_mq['Gerudo Training Ground']: pool.extend(['Bombchus']) if world.shuffle_medigoron_carpet_salesman: pool.append('Bombchus') @@ -1044,7 +1044,7 @@ def get_pool_core(world): pool.extend(['Bombchus (10)'] * 2) if not world.dungeon_mq['Bottom of the Well']: pool.extend(['Bombchus (10)']) - if world.dungeon_mq['Gerudo Training Grounds']: + if world.dungeon_mq['Gerudo Training Ground']: pool.extend(['Bombchus (10)']) if world.dungeon_mq['Ganons Castle']: pool.extend(['Bombchus (10)']) @@ -1058,49 +1058,49 @@ def get_pool_core(world): skip_in_spoiler_locations.append('Wasteland Bombchu Salesman') pool.extend(['Ice Trap']) - if not world.dungeon_mq['Gerudo Training Grounds']: + if not world.dungeon_mq['Gerudo Training Ground']: pool.extend(['Ice Trap']) if not world.dungeon_mq['Ganons Castle']: pool.extend(['Ice Trap'] * 4) if world.gerudo_fortress == 'open': - placed_items['GF North F1 Carpenter'] = 'Recovery Heart' - placed_items['GF North F2 Carpenter'] = 'Recovery Heart' - placed_items['GF South F1 Carpenter'] = 'Recovery Heart' - placed_items['GF South F2 Carpenter'] = 'Recovery Heart' - skip_in_spoiler_locations.extend(['GF North F1 Carpenter', 'GF North F2 Carpenter', 'GF South F1 Carpenter', 'GF South F2 Carpenter']) + placed_items['Hideout Jail Guard (1 Torch)'] = 'Recovery Heart' + placed_items['Hideout Jail Guard (2 Torches)'] = 'Recovery Heart' + placed_items['Hideout Jail Guard (3 Torches)'] = 'Recovery Heart' + placed_items['Hideout Jail Guard (4 Torches)'] = 'Recovery Heart' + skip_in_spoiler_locations.extend(['Hideout Jail Guard (1 Torch)', 'Hideout Jail Guard (2 Torches)', 'Hideout Jail Guard (3 Torches)', 'Hideout Jail Guard (4 Torches)']) elif world.shuffle_fortresskeys in ['any_dungeon', 'overworld', 'keysanity']: if world.gerudo_fortress == 'fast': - pool.append('Small Key (Gerudo Fortress)') - placed_items['GF North F2 Carpenter'] = 'Recovery Heart' - placed_items['GF South F1 Carpenter'] = 'Recovery Heart' - placed_items['GF South F2 Carpenter'] = 'Recovery Heart' - skip_in_spoiler_locations.extend(['GF North F2 Carpenter', 'GF South F1 Carpenter', 'GF South F2 Carpenter']) + pool.append('Small Key (Thieves Hideout)') + placed_items['Hideout Jail Guard (2 Torches)'] = 'Recovery Heart' + placed_items['Hideout Jail Guard (3 Torches)'] = 'Recovery Heart' + placed_items['Hideout Jail Guard (4 Torches)'] = 'Recovery Heart' + skip_in_spoiler_locations.extend(['Hideout Jail Guard (2 Torches)', 'Hideout Jail Guard (3 Torches)', 'Hideout Jail Guard (4 Torches)']) else: - pool.extend(['Small Key (Gerudo Fortress)'] * 4) + pool.extend(['Small Key (Thieves Hideout)'] * 4) if world.item_pool_value == 'plentiful': - pending_junk_pool.append('Small Key (Gerudo Fortress)') + pending_junk_pool.append('Small Key (Thieves Hideout)') else: if world.gerudo_fortress == 'fast': - placed_items['GF North F1 Carpenter'] = 'Small Key (Gerudo Fortress)' - placed_items['GF North F2 Carpenter'] = 'Recovery Heart' - placed_items['GF South F1 Carpenter'] = 'Recovery Heart' - placed_items['GF South F2 Carpenter'] = 'Recovery Heart' - skip_in_spoiler_locations.extend(['GF North F2 Carpenter', 'GF South F1 Carpenter', 'GF South F2 Carpenter']) + placed_items['Hideout Jail Guard (1 Torch)'] = 'Small Key (Thieves Hideout)' + placed_items['Hideout Jail Guard (2 Torches)'] = 'Recovery Heart' + placed_items['Hideout Jail Guard (3 Torches)'] = 'Recovery Heart' + placed_items['Hideout Jail Guard (4 Torches)'] = 'Recovery Heart' + skip_in_spoiler_locations.extend(['Hideout Jail Guard (2 Torches)', 'Hideout Jail Guard (3 Torches)', 'Hideout Jail Guard (4 Torches)']) else: - placed_items['GF North F1 Carpenter'] = 'Small Key (Gerudo Fortress)' - placed_items['GF North F2 Carpenter'] = 'Small Key (Gerudo Fortress)' - placed_items['GF South F1 Carpenter'] = 'Small Key (Gerudo Fortress)' - placed_items['GF South F2 Carpenter'] = 'Small Key (Gerudo Fortress)' + placed_items['Hideout Jail Guard (1 Torch)'] = 'Small Key (Gerudo Fortress)' + placed_items['Hideout Jail Guard (2 Torches)'] = 'Small Key (Gerudo Fortress)' + placed_items['Hideout Jail Guard (3 Torches)'] = 'Small Key (Gerudo Fortress)' + placed_items['Hideout Jail Guard (4 Torches)'] = 'Small Key (Gerudo Fortress)' if world.shuffle_gerudo_card and world.gerudo_fortress != 'open': pool.append('Gerudo Membership Card') elif world.shuffle_gerudo_card: pending_junk_pool.append('Gerudo Membership Card') - placed_items['GF Gerudo Membership Card'] = 'Ice Trap' - skip_in_spoiler_locations.append('GF Gerudo Membership Card') + placed_items['Hideout Gerudo Membership Card'] = 'Ice Trap' + skip_in_spoiler_locations.append('Hideout Gerudo Membership Card') else: - placed_items['GF Gerudo Membership Card'] = 'Gerudo Membership Card' + placed_items['Hideout Gerudo Membership Card'] = 'Gerudo Membership Card' if world.shuffle_gerudo_card and world.item_pool_value == 'plentiful': pending_junk_pool.append('Gerudo Membership Card') @@ -1111,7 +1111,7 @@ def get_pool_core(world): pending_junk_pool.append('Small Key (Water Temple)') pending_junk_pool.append('Small Key (Shadow Temple)') pending_junk_pool.append('Small Key (Spirit Temple)') - pending_junk_pool.append('Small Key (Gerudo Training Grounds)') + pending_junk_pool.append('Small Key (Gerudo Training Ground)') pending_junk_pool.append('Small Key (Ganons Castle)') if world.item_pool_value == 'plentiful' and world.shuffle_bosskeys in ['any_dungeon', 'overworld', 'keysanity']: @@ -1250,7 +1250,7 @@ def get_pool_core(world): pool.extend(ShT_vanilla) if not world.dungeon_mq['Bottom of the Well']: pool.extend(BW_vanilla) - if world.dungeon_mq['Gerudo Training Grounds']: + if world.dungeon_mq['Gerudo Training Ground']: pool.extend(GTG_MQ) else: pool.extend(GTG_vanilla) diff --git a/worlds/oot/Items.py b/worlds/oot/Items.py index 964137f868..9cf16424d7 100644 --- a/worlds/oot/Items.py +++ b/worlds/oot/Items.py @@ -6,7 +6,7 @@ def oot_data_to_ap_id(data, event): if event or data[2] is None or data[0] == 'Shop': return None offset = 66000 - if data[0] in ['Item', 'BossKey', 'Compass', 'Map', 'SmallKey', 'Token', 'GanonBossKey', 'FortressSmallKey', 'Song']: + if data[0] in ['Item', 'BossKey', 'Compass', 'Map', 'SmallKey', 'Token', 'GanonBossKey', 'HideoutSmallKey', 'Song']: return offset + data[2] else: raise Exception(f'Unexpected OOT item type found: {data[0]}') @@ -53,7 +53,7 @@ class OOTItem(Item): @property def dungeonitem(self) -> bool: - return self.type in ['SmallKey', 'FortressSmallKey', 'BossKey', 'GanonBossKey', 'Map', 'Compass'] + return self.type in ['SmallKey', 'HideoutSmallKey', 'BossKey', 'GanonBossKey', 'Map', 'Compass'] @@ -193,8 +193,8 @@ item_table = { 'Small Key (Spirit Temple)': ('SmallKey', True, 0xB2, {'progressive': float('Inf')}), 'Small Key (Shadow Temple)': ('SmallKey', True, 0xB3, {'progressive': float('Inf')}), 'Small Key (Bottom of the Well)': ('SmallKey', True, 0xB4, {'progressive': float('Inf')}), - 'Small Key (Gerudo Training Grounds)': ('SmallKey',True, 0xB5, {'progressive': float('Inf')}), - 'Small Key (Gerudo Fortress)': ('FortressSmallKey',True, 0xB6, {'progressive': float('Inf')}), + 'Small Key (Gerudo Training Ground)': ('SmallKey',True, 0xB5, {'progressive': float('Inf')}), + 'Small Key (Thieves Hideout)': ('HideoutSmallKey',True, 0xB6, {'progressive': float('Inf')}), 'Small Key (Ganons Castle)': ('SmallKey', True, 0xB7, {'progressive': float('Inf')}), 'Double Defense': ('Item', True, 0xB8, None), 'Magic Bean Pack': ('Item', True, 0xC9, None), diff --git a/worlds/oot/LocationList.py b/worlds/oot/LocationList.py index e487522fc3..c49c20de4e 100644 --- a/worlds/oot/LocationList.py +++ b/worlds/oot/LocationList.py @@ -19,6 +19,7 @@ def shop_address(shop_id, shelf_id): # LW Lost Woods # OGC Outside Ganon's Castle # SFM Sacred Forest Meadow +# TH Thieves' Hideout # ToT Temple of Time # ZD Zora's Domain # ZF Zora's Fountain @@ -52,7 +53,7 @@ location_table = OrderedDict([ ("Song from Impa", ("Song", 0xFF, 0x26, (0x2E8E925, 0x2E8E925), 'Zeldas Lullaby', ("Hyrule Castle", "Market", "Songs"))), ("Song from Malon", ("Song", 0xFF, 0x27, (0x0D7EB53, 0x0D7EBCF), 'Eponas Song', ("Lon Lon Ranch", "Songs",))), ("Song from Saria", ("Song", 0xFF, 0x28, (0x20B1DB1, 0x20B1DB1), 'Sarias Song', ("Sacred Forest Meadow", "Forest", "Songs"))), - ("Song from Composers Grave", ("Song", 0xFF, 0x29, (0x332A871, 0x332A871), 'Suns Song', ("the Graveyard", "Kakariko", "Songs"))), + ("Song from Royal Familys Tomb", ("Song", 0xFF, 0x29, (0x332A871, 0x332A871), 'Suns Song', ("the Graveyard", "Kakariko", "Songs"))), ("Song from Ocarina of Time", ("Song", 0xFF, 0x2A, (0x252FC89, 0x252FC89), 'Song of Time', ("Hyrule Field", "Songs", "Need Spiritual Stones"))), ("Song from Windmill", ("Song", 0xFF, 0x2B, (0x0E42C07, 0x0E42B8B), 'Song of Storms', ("Kakariko Village", "Kakariko", "Songs"))), ("Sheik in Forest", ("Song", 0xFF, 0x20, (0x20B0809, 0x20B0809), 'Minuet of Forest', ("Sacred Forest Meadow", "Forest", "Songs"))), @@ -70,7 +71,7 @@ location_table = OrderedDict([ ("KF Midos Bottom Right Chest", ("Chest", 0x28, 0x03, None, 'Recovery Heart', ("Kokiri Forest", "Forest",))), ("KF Kokiri Sword Chest", ("Chest", 0x55, 0x00, None, 'Kokiri Sword', ("Kokiri Forest", "Forest",))), ("KF Storms Grotto Chest", ("Chest", 0x3E, 0x0C, None, 'Rupees (20)', ("Kokiri Forest", "Forest", "Grottos"))), - ("KF Links House Cow", ("NPC", 0x34, 0x15, None, 'Milk', ("KF Links House", "Forest", "Cow", "Minigames"))), + ("KF Links House Cow", ("NPC", 0x34, 0x15, None, 'Milk', ("Kokiri Forest", "Forest", "Cow", "Minigames"))), ("KF GS Know It All House", ("GS Token", 0x0C, 0x02, None, 'Gold Skulltula Token', ("Kokiri Forest", "Skulltulas",))), ("KF GS Bean Patch", ("GS Token", 0x0C, 0x01, None, 'Gold Skulltula Token', ("Kokiri Forest", "Skulltulas",))), ("KF GS House of Twins", ("GS Token", 0x0C, 0x04, None, 'Gold Skulltula Token', ("Kokiri Forest", "Skulltulas",))), @@ -163,7 +164,7 @@ location_table = OrderedDict([ ("HC GS Storms Grotto", ("GS Token", 0x0E, 0x02, None, 'Gold Skulltula Token', ("Hyrule Castle", "Skulltulas", "Grottos"))), # Lon Lon Ranch - ("LLR Talons Chickens", ("NPC", 0x4C, 0x14, None, 'Bottle with Milk', ("Lon Lon Ranch", "Kakariko", "Minigames"))), + ("LLR Talons Chickens", ("NPC", 0x4C, 0x14, None, 'Bottle with Milk', ("Lon Lon Ranch", "Minigames"))), ("LLR Freestanding PoH", ("Collectable", 0x4C, 0x01, None, 'Piece of Heart', ("Lon Lon Ranch",))), ("LLR Deku Scrub Grotto Left", ("GrottoNPC", 0xFC, 0x30, None, 'Buy Deku Nut (5)', ("Lon Lon Ranch", "Deku Scrub", "Grottos"))), ("LLR Deku Scrub Grotto Center", ("GrottoNPC", 0xFC, 0x33, None, 'Buy Deku Seeds (30)', ("Lon Lon Ranch", "Deku Scrub", "Grottos"))), @@ -218,7 +219,7 @@ location_table = OrderedDict([ # Graveyard ("Graveyard Shield Grave Chest", ("Chest", 0x40, 0x00, None, 'Hylian Shield', ("the Graveyard", "Kakariko",))), ("Graveyard Heart Piece Grave Chest", ("Chest", 0x3F, 0x00, None, 'Piece of Heart', ("the Graveyard", "Kakariko",))), - ("Graveyard Composers Grave Chest", ("Chest", 0x41, 0x00, None, 'Bombs (5)', ("the Graveyard", "Kakariko",))), + ("Graveyard Royal Familys Tomb Chest", ("Chest", 0x41, 0x00, None, 'Bombs (5)', ("the Graveyard", "Kakariko",))), ("Graveyard Freestanding PoH", ("Collectable", 0x53, 0x04, None, 'Piece of Heart', ("the Graveyard", "Kakariko",))), ("Graveyard Dampe Gravedigging Tour", ("Collectable", 0x53, 0x08, None, 'Piece of Heart', ("the Graveyard", "Kakariko",))), ("Graveyard Hookshot Chest", ("Chest", 0x48, 0x00, None, 'Progressive Hookshot', ("the Graveyard", "Kakariko",))), @@ -338,17 +339,19 @@ location_table = OrderedDict([ ("GV GS Pillar", ("GS Token", 0x13, 0x04, None, 'Gold Skulltula Token', ("Gerudo Valley", "Skulltulas",))), # Gerudo's Fortress - ("GF North F1 Carpenter", ("Collectable", 0x0C, 0x0C, None, 'Small Key (Gerudo Fortress)', ("Gerudo's Fortress", "Gerudo",))), - ("GF North F2 Carpenter", ("Collectable", 0x0C, 0x0A, None, 'Small Key (Gerudo Fortress)', ("Gerudo's Fortress", "Gerudo",))), - ("GF South F1 Carpenter", ("Collectable", 0x0C, 0x0E, None, 'Small Key (Gerudo Fortress)', ("Gerudo's Fortress", "Gerudo",))), - ("GF South F2 Carpenter", ("Collectable", 0x0C, 0x0F, None, 'Small Key (Gerudo Fortress)', ("Gerudo's Fortress", "Gerudo",))), - ("GF Gerudo Membership Card", ("NPC", 0x0C, 0x3A, None, 'Gerudo Membership Card', ("Gerudo's Fortress", "Gerudo",))), ("GF Chest", ("Chest", 0x5D, 0x00, None, 'Piece of Heart', ("Gerudo's Fortress", "Gerudo",))), ("GF HBA 1000 Points", ("NPC", 0x5D, 0x3E, None, 'Piece of Heart', ("Gerudo's Fortress", "Gerudo", "Minigames"))), ("GF HBA 1500 Points", ("NPC", 0x5D, 0x30, None, 'Bow', ("Gerudo's Fortress", "Gerudo", "Minigames"))), ("GF GS Top Floor", ("GS Token", 0x14, 0x02, None, 'Gold Skulltula Token', ("Gerudo's Fortress", "Skulltulas",))), ("GF GS Archery Range", ("GS Token", 0x14, 0x01, None, 'Gold Skulltula Token', ("Gerudo's Fortress", "Skulltulas",))), + # Thieves' Hideout + ("Hideout Jail Guard (1 Torch)", ("Collectable", 0x0C, 0x0C, None, 'Small Key (Thieves Hideout)', ("Thieves' Hideout", "Gerudo",))), + ("Hideout Jail Guard (2 Torches)", ("Collectable", 0x0C, 0x0F, None, 'Small Key (Thieves Hideout)', ("Thieves' Hideout", "Gerudo",))), + ("Hideout Jail Guard (3 Torches)", ("Collectable", 0x0C, 0x0A, None, 'Small Key (Thieves Hideout)', ("Thieves' Hideout", "Gerudo",))), + ("Hideout Jail Guard (4 Torches)", ("Collectable", 0x0C, 0x0E, None, 'Small Key (Thieves Hideout)', ("Thieves' Hideout", "Gerudo",))), + ("Hideout Gerudo Membership Card", ("NPC", 0x0C, 0x3A, None, 'Gerudo Membership Card', ("Thieves' Hideout", "Gerudo",))), + # Wasteland ("Wasteland Bombchu Salesman", ("NPC", 0x5E, 0x03, None, 'Bombchus (10)', ("Haunted Wasteland",))), ("Wasteland Chest", ("Chest", 0x5E, 0x00, None, 'Rupees (50)', ("Haunted Wasteland",))), @@ -364,8 +367,8 @@ location_table = OrderedDict([ ("Colossus GS Hill", ("GS Token", 0x15, 0x04, None, 'Gold Skulltula Token', ("Desert Colossus", "Skulltulas",))), # Outside Ganon's Castle - ("OGC Great Fairy Reward", ("Cutscene", 0xFF, 0x15, None, 'Double Defense', ("outside Ganon's Castle", "Market", "Fairies"))), - ("OGC GS", ("GS Token", 0x0E, 0x01, None, 'Gold Skulltula Token', ("outside Ganon's Castle", "Skulltulas",))), + ("OGC Great Fairy Reward", ("Cutscene", 0xFF, 0x15, None, 'Double Defense', ("Outside Ganon's Castle", "Market", "Fairies"))), + ("OGC GS", ("GS Token", 0x0E, 0x01, None, 'Gold Skulltula Token', ("Outside Ganon's Castle", "Skulltulas",))), ## Dungeons # Deku Tree vanilla @@ -725,47 +728,47 @@ location_table = OrderedDict([ ("Ice Cavern MQ GS Ice Block", ("GS Token", 0x09, 0x04, None, 'Gold Skulltula Token', ("Ice Cavern", "Master Quest", "Skulltulas",))), ("Ice Cavern MQ GS Scarecrow", ("GS Token", 0x09, 0x01, None, 'Gold Skulltula Token', ("Ice Cavern", "Master Quest", "Skulltulas",))), - # Gerudo Training Grounds vanilla - ("Gerudo Training Grounds Lobby Left Chest", ("Chest", 0x0B, 0x13, None, 'Rupees (5)', ("Gerudo Training Grounds", "Vanilla",))), - ("Gerudo Training Grounds Lobby Right Chest", ("Chest", 0x0B, 0x07, None, 'Arrows (10)', ("Gerudo Training Grounds", "Vanilla",))), - ("Gerudo Training Grounds Stalfos Chest", ("Chest", 0x0B, 0x00, None, 'Small Key (Gerudo Training Grounds)', ("Gerudo Training Grounds", "Vanilla",))), - ("Gerudo Training Grounds Before Heavy Block Chest", ("Chest", 0x0B, 0x11, None, 'Arrows (30)', ("Gerudo Training Grounds", "Vanilla",))), - ("Gerudo Training Grounds Heavy Block First Chest", ("Chest", 0x0B, 0x0F, None, 'Rupees (200)', ("Gerudo Training Grounds", "Vanilla",))), - ("Gerudo Training Grounds Heavy Block Second Chest", ("Chest", 0x0B, 0x0E, None, 'Rupees (5)', ("Gerudo Training Grounds", "Vanilla",))), - ("Gerudo Training Grounds Heavy Block Third Chest", ("Chest", 0x0B, 0x14, None, 'Small Key (Gerudo Training Grounds)', ("Gerudo Training Grounds", "Vanilla",))), - ("Gerudo Training Grounds Heavy Block Fourth Chest", ("Chest", 0x0B, 0x02, None, 'Ice Trap', ("Gerudo Training Grounds", "Vanilla",))), - ("Gerudo Training Grounds Eye Statue Chest", ("Chest", 0x0B, 0x03, None, 'Small Key (Gerudo Training Grounds)', ("Gerudo Training Grounds", "Vanilla",))), - ("Gerudo Training Grounds Near Scarecrow Chest", ("Chest", 0x0B, 0x04, None, 'Small Key (Gerudo Training Grounds)', ("Gerudo Training Grounds", "Vanilla",))), - ("Gerudo Training Grounds Hammer Room Clear Chest", ("Chest", 0x0B, 0x12, None, 'Arrows (10)', ("Gerudo Training Grounds", "Vanilla",))), - ("Gerudo Training Grounds Hammer Room Switch Chest", ("Chest", 0x0B, 0x10, None, 'Small Key (Gerudo Training Grounds)', ("Gerudo Training Grounds", "Vanilla",))), - ("Gerudo Training Grounds Freestanding Key", ("Collectable", 0x0B, 0x01, None, 'Small Key (Gerudo Training Grounds)', ("Gerudo Training Grounds", "Vanilla",))), - ("Gerudo Training Grounds Maze Right Central Chest", ("Chest", 0x0B, 0x05, None, 'Bombchus (5)', ("Gerudo Training Grounds", "Vanilla",))), - ("Gerudo Training Grounds Maze Right Side Chest", ("Chest", 0x0B, 0x08, None, 'Arrows (30)', ("Gerudo Training Grounds", "Vanilla",))), - ("Gerudo Training Grounds Underwater Silver Rupee Chest", ("Chest", 0x0B, 0x0D, None, 'Small Key (Gerudo Training Grounds)', ("Gerudo Training Grounds", "Vanilla",))), - ("Gerudo Training Grounds Beamos Chest", ("Chest", 0x0B, 0x01, None, 'Small Key (Gerudo Training Grounds)', ("Gerudo Training Grounds", "Vanilla",))), - ("Gerudo Training Grounds Hidden Ceiling Chest", ("Chest", 0x0B, 0x0B, None, 'Small Key (Gerudo Training Grounds)', ("Gerudo Training Grounds", "Vanilla",))), - ("Gerudo Training Grounds Maze Path First Chest", ("Chest", 0x0B, 0x06, None, 'Rupees (50)', ("Gerudo Training Grounds", "Vanilla",))), - ("Gerudo Training Grounds Maze Path Second Chest", ("Chest", 0x0B, 0x0A, None, 'Rupees (20)', ("Gerudo Training Grounds", "Vanilla",))), - ("Gerudo Training Grounds Maze Path Third Chest", ("Chest", 0x0B, 0x09, None, 'Arrows (30)', ("Gerudo Training Grounds", "Vanilla",))), - ("Gerudo Training Grounds Maze Path Final Chest", ("Chest", 0x0B, 0x0C, None, 'Ice Arrows', ("Gerudo Training Grounds", "Vanilla",))), - # Gerudo Training Grounds MQ - ("Gerudo Training Grounds MQ Lobby Left Chest", ("Chest", 0x0B, 0x13, None, 'Arrows (10)', ("Gerudo Training Grounds", "Master Quest",))), - ("Gerudo Training Grounds MQ Lobby Right Chest", ("Chest", 0x0B, 0x07, None, 'Bombchus (5)', ("Gerudo Training Grounds", "Master Quest",))), - ("Gerudo Training Grounds MQ First Iron Knuckle Chest", ("Chest", 0x0B, 0x00, None, 'Rupees (5)', ("Gerudo Training Grounds", "Master Quest",))), - ("Gerudo Training Grounds MQ Before Heavy Block Chest", ("Chest", 0x0B, 0x11, None, 'Arrows (10)', ("Gerudo Training Grounds", "Master Quest",))), - ("Gerudo Training Grounds MQ Heavy Block Chest", ("Chest", 0x0B, 0x02, None, 'Rupees (50)', ("Gerudo Training Grounds", "Master Quest",))), - ("Gerudo Training Grounds MQ Eye Statue Chest", ("Chest", 0x0B, 0x03, None, 'Bombchus (10)', ("Gerudo Training Grounds", "Master Quest",))), - ("Gerudo Training Grounds MQ Ice Arrows Chest", ("Chest", 0x0B, 0x04, None, 'Ice Arrows', ("Gerudo Training Grounds", "Master Quest",))), - ("Gerudo Training Grounds MQ Second Iron Knuckle Chest", ("Chest", 0x0B, 0x12, None, 'Arrows (10)', ("Gerudo Training Grounds", "Master Quest",))), - ("Gerudo Training Grounds MQ Flame Circle Chest", ("Chest", 0x0B, 0x0E, None, 'Small Key (Gerudo Training Grounds)', ("Gerudo Training Grounds", "Master Quest",))), - ("Gerudo Training Grounds MQ Maze Right Central Chest", ("Chest", 0x0B, 0x05, None, 'Rupees (5)', ("Gerudo Training Grounds", "Master Quest",))), - ("Gerudo Training Grounds MQ Maze Right Side Chest", ("Chest", 0x0B, 0x08, None, 'Rupee (Treasure Chest Game)', ("Gerudo Training Grounds", "Master Quest",))), - ("Gerudo Training Grounds MQ Underwater Silver Rupee Chest", ("Chest", 0x0B, 0x0D, None, 'Small Key (Gerudo Training Grounds)', ("Gerudo Training Grounds", "Master Quest",))), - ("Gerudo Training Grounds MQ Dinolfos Chest", ("Chest", 0x0B, 0x01, None, 'Small Key (Gerudo Training Grounds)', ("Gerudo Training Grounds", "Master Quest",))), - ("Gerudo Training Grounds MQ Hidden Ceiling Chest", ("Chest", 0x0B, 0x0B, None, 'Rupees (50)', ("Gerudo Training Grounds", "Master Quest",))), - ("Gerudo Training Grounds MQ Maze Path First Chest", ("Chest", 0x0B, 0x06, None, 'Rupee (1)', ("Gerudo Training Grounds", "Master Quest",))), - ("Gerudo Training Grounds MQ Maze Path Third Chest", ("Chest", 0x0B, 0x09, None, 'Rupee (Treasure Chest Game)', ("Gerudo Training Grounds", "Master Quest",))), - ("Gerudo Training Grounds MQ Maze Path Second Chest", ("Chest", 0x0B, 0x0A, None, 'Rupees (20)', ("Gerudo Training Grounds", "Master Quest",))), + # Gerudo Training Ground vanilla + ("Gerudo Training Ground Lobby Left Chest", ("Chest", 0x0B, 0x13, None, 'Rupees (5)', ("Gerudo Training Ground", "Vanilla",))), + ("Gerudo Training Ground Lobby Right Chest", ("Chest", 0x0B, 0x07, None, 'Arrows (10)', ("Gerudo Training Ground", "Vanilla",))), + ("Gerudo Training Ground Stalfos Chest", ("Chest", 0x0B, 0x00, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Vanilla",))), + ("Gerudo Training Ground Before Heavy Block Chest", ("Chest", 0x0B, 0x11, None, 'Arrows (30)', ("Gerudo Training Ground", "Vanilla",))), + ("Gerudo Training Ground Heavy Block First Chest", ("Chest", 0x0B, 0x0F, None, 'Rupees (200)', ("Gerudo Training Ground", "Vanilla",))), + ("Gerudo Training Ground Heavy Block Second Chest", ("Chest", 0x0B, 0x0E, None, 'Rupees (5)', ("Gerudo Training Ground", "Vanilla",))), + ("Gerudo Training Ground Heavy Block Third Chest", ("Chest", 0x0B, 0x14, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Vanilla",))), + ("Gerudo Training Ground Heavy Block Fourth Chest", ("Chest", 0x0B, 0x02, None, 'Ice Trap', ("Gerudo Training Ground", "Vanilla",))), + ("Gerudo Training Ground Eye Statue Chest", ("Chest", 0x0B, 0x03, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Vanilla",))), + ("Gerudo Training Ground Near Scarecrow Chest", ("Chest", 0x0B, 0x04, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Vanilla",))), + ("Gerudo Training Ground Hammer Room Clear Chest", ("Chest", 0x0B, 0x12, None, 'Arrows (10)', ("Gerudo Training Ground", "Vanilla",))), + ("Gerudo Training Ground Hammer Room Switch Chest", ("Chest", 0x0B, 0x10, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Vanilla",))), + ("Gerudo Training Ground Freestanding Key", ("Collectable", 0x0B, 0x01, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Vanilla",))), + ("Gerudo Training Ground Maze Right Central Chest", ("Chest", 0x0B, 0x05, None, 'Bombchus (5)', ("Gerudo Training Ground", "Vanilla",))), + ("Gerudo Training Ground Maze Right Side Chest", ("Chest", 0x0B, 0x08, None, 'Arrows (30)', ("Gerudo Training Ground", "Vanilla",))), + ("Gerudo Training Ground Underwater Silver Rupee Chest", ("Chest", 0x0B, 0x0D, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Vanilla",))), + ("Gerudo Training Ground Beamos Chest", ("Chest", 0x0B, 0x01, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Vanilla",))), + ("Gerudo Training Ground Hidden Ceiling Chest", ("Chest", 0x0B, 0x0B, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Vanilla",))), + ("Gerudo Training Ground Maze Path First Chest", ("Chest", 0x0B, 0x06, None, 'Rupees (50)', ("Gerudo Training Ground", "Vanilla",))), + ("Gerudo Training Ground Maze Path Second Chest", ("Chest", 0x0B, 0x0A, None, 'Rupees (20)', ("Gerudo Training Ground", "Vanilla",))), + ("Gerudo Training Ground Maze Path Third Chest", ("Chest", 0x0B, 0x09, None, 'Arrows (30)', ("Gerudo Training Ground", "Vanilla",))), + ("Gerudo Training Ground Maze Path Final Chest", ("Chest", 0x0B, 0x0C, None, 'Ice Arrows', ("Gerudo Training Ground", "Vanilla",))), + # Gerudo Training Ground MQ + ("Gerudo Training Ground MQ Lobby Left Chest", ("Chest", 0x0B, 0x13, None, 'Arrows (10)', ("Gerudo Training Ground", "Master Quest",))), + ("Gerudo Training Ground MQ Lobby Right Chest", ("Chest", 0x0B, 0x07, None, 'Bombchus (5)', ("Gerudo Training Ground", "Master Quest",))), + ("Gerudo Training Ground MQ First Iron Knuckle Chest", ("Chest", 0x0B, 0x00, None, 'Rupees (5)', ("Gerudo Training Ground", "Master Quest",))), + ("Gerudo Training Ground MQ Before Heavy Block Chest", ("Chest", 0x0B, 0x11, None, 'Arrows (10)', ("Gerudo Training Ground", "Master Quest",))), + ("Gerudo Training Ground MQ Heavy Block Chest", ("Chest", 0x0B, 0x02, None, 'Rupees (50)', ("Gerudo Training Ground", "Master Quest",))), + ("Gerudo Training Ground MQ Eye Statue Chest", ("Chest", 0x0B, 0x03, None, 'Bombchus (10)', ("Gerudo Training Ground", "Master Quest",))), + ("Gerudo Training Ground MQ Ice Arrows Chest", ("Chest", 0x0B, 0x04, None, 'Ice Arrows', ("Gerudo Training Ground", "Master Quest",))), + ("Gerudo Training Ground MQ Second Iron Knuckle Chest", ("Chest", 0x0B, 0x12, None, 'Arrows (10)', ("Gerudo Training Ground", "Master Quest",))), + ("Gerudo Training Ground MQ Flame Circle Chest", ("Chest", 0x0B, 0x0E, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Master Quest",))), + ("Gerudo Training Ground MQ Maze Right Central Chest", ("Chest", 0x0B, 0x05, None, 'Rupees (5)', ("Gerudo Training Ground", "Master Quest",))), + ("Gerudo Training Ground MQ Maze Right Side Chest", ("Chest", 0x0B, 0x08, None, 'Rupee (Treasure Chest Game)', ("Gerudo Training Ground", "Master Quest",))), + ("Gerudo Training Ground MQ Underwater Silver Rupee Chest", ("Chest", 0x0B, 0x0D, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Master Quest",))), + ("Gerudo Training Ground MQ Dinolfos Chest", ("Chest", 0x0B, 0x01, None, 'Small Key (Gerudo Training Ground)', ("Gerudo Training Ground", "Master Quest",))), + ("Gerudo Training Ground MQ Hidden Ceiling Chest", ("Chest", 0x0B, 0x0B, None, 'Rupees (50)', ("Gerudo Training Ground", "Master Quest",))), + ("Gerudo Training Ground MQ Maze Path First Chest", ("Chest", 0x0B, 0x06, None, 'Rupee (1)', ("Gerudo Training Ground", "Master Quest",))), + ("Gerudo Training Ground MQ Maze Path Third Chest", ("Chest", 0x0B, 0x09, None, 'Rupee (Treasure Chest Game)', ("Gerudo Training Ground", "Master Quest",))), + ("Gerudo Training Ground MQ Maze Path Second Chest", ("Chest", 0x0B, 0x0A, None, 'Rupees (20)', ("Gerudo Training Ground", "Master Quest",))), # Ganon's Castle vanilla ("Ganons Castle Forest Trial Chest", ("Chest", 0x0D, 0x09, None, 'Rupees (5)', ("Ganon's Castle", "Vanilla",))), @@ -902,7 +905,7 @@ business_scrubs = [ (0x79, 40, 0x10DD, ["enable you to pick up more \x05\x41Deku\x01Nuts", "sell you a \x05\x42mysterious item"]), ] -dungeons = ('Deku Tree', 'Dodongo\'s Cavern', 'Jabu Jabu\'s Belly', 'Forest Temple', 'Fire Temple', 'Water Temple', 'Spirit Temple', 'Shadow Temple', 'Ice Cavern', 'Bottom of the Well', 'Gerudo Training Grounds', 'Ganon\'s Castle') +dungeons = ('Deku Tree', 'Dodongo\'s Cavern', 'Jabu Jabu\'s Belly', 'Forest Temple', 'Fire Temple', 'Water Temple', 'Spirit Temple', 'Shadow Temple', 'Ice Cavern', 'Bottom of the Well', 'Gerudo Training Ground', 'Ganon\'s Castle') location_groups = { 'Song': [name for (name, data) in location_table.items() if data[0] == 'Song'], 'Chest': [name for (name, data) in location_table.items() if data[0] == 'Chest'], diff --git a/worlds/oot/LogicTricks.py b/worlds/oot/LogicTricks.py index db8b792ab5..6950bc2124 100644 --- a/worlds/oot/LogicTricks.py +++ b/worlds/oot/LogicTricks.py @@ -1,7 +1,7 @@ known_logic_tricks = { 'Fewer Tunic Requirements': { 'name' : 'logic_fewer_tunic_requirements', - 'tags' : ("General", "Fire Temple", "Water Temple", "Gerudo Training Grounds", "Zora's Fountain",), + 'tags' : ("General", "Fire Temple", "Water Temple", "Gerudo Training Ground", "Zora's Fountain",), 'tooltip' : '''\ Allows the following possible without Tunics: - Enter Water Temple. The key below the center @@ -10,7 +10,7 @@ known_logic_tricks = { accessible, and not Volvagia. - Zora's Fountain Bottom Freestanding PoH. Might not have enough health to resurface. - - Gerudo Training Grounds Underwater + - Gerudo Training Ground Underwater Silver Rupee Chest. May need to make multiple trips. '''}, @@ -73,9 +73,9 @@ known_logic_tricks = { from below, by shooting it through the vines, bypassing the need to lower the staircase. '''}, - 'Gerudo Fortress "Kitchen" with No Additional Items': { + 'Thieves\' Hideout "Kitchen" with No Additional Items': { 'name' : 'logic_gerudo_kitchen', - 'tags' : ("Gerudo's Fortress",), + 'tags' : ("Thieves' Hideout", "Gerudo's Fortress"), 'tooltip' : '''\ The logic normally guarantees one of Bow, Hookshot, or Hover Boots. @@ -185,9 +185,9 @@ known_logic_tricks = { a particularly egregious example. Logic normally expects Din's Fire and Song of Time. '''}, - 'Gerudo Training Grounds MQ Left Side Silver Rupees with Hookshot': { + 'Gerudo Training Ground MQ Left Side Silver Rupees with Hookshot': { 'name' : 'logic_gtg_mq_with_hookshot', - 'tags' : ("Gerudo Training Grounds",), + 'tags' : ("Gerudo Training Ground",), 'tooltip' : '''\ The highest silver rupee can be obtained by hookshotting the target and then immediately jump @@ -239,14 +239,6 @@ known_logic_tricks = { or hit the shortcut switch at the top of the room and jump from the glass blocks that spawn. '''}, - 'Forest Temple MQ Twisted Hallway Switch with Hookshot': { - 'name' : 'logic_forest_mq_hallway_switch_hookshot', - 'tags' : ("Forest Temple",), - 'tooltip' : '''\ - There's a very small gap between the glass block - and the wall. Through that gap you can hookshot - the target on the ceiling. - '''}, 'Death Mountain Trail Chest with Strength': { 'name' : 'logic_dmt_bombable', 'tags' : ("Death Mountain Trail",), @@ -907,9 +899,9 @@ known_logic_tricks = { Skulltula and obtain the token by having the Boomerang interact with it along the return path. '''}, - 'Gerudo Training Grounds Left Side Silver Rupees without Hookshot': { + 'Gerudo Training Ground Left Side Silver Rupees without Hookshot': { 'name' : 'logic_gtg_without_hookshot', - 'tags' : ("Gerudo Training Grounds",), + 'tags' : ("Gerudo Training Ground",), 'tooltip' : '''\ After collecting the rest of the silver rupees in the room, you can reach the final silver rupee on the ceiling by being @@ -919,9 +911,9 @@ known_logic_tricks = { the edge of a flame wall before it can rise up to block you. To do so without taking damage is more precise. '''}, - 'Gerudo Training Grounds MQ Left Side Silver Rupees without Hookshot': { + 'Gerudo Training Ground MQ Left Side Silver Rupees without Hookshot': { 'name' : 'logic_gtg_mq_without_hookshot', - 'tags' : ("Gerudo Training Grounds",), + 'tags' : ("Gerudo Training Ground",), 'tooltip' : '''\ After collecting the rest of the silver rupees in the room, you can reach the final silver rupee on the ceiling by being @@ -932,18 +924,18 @@ known_logic_tricks = { Also included with this trick is that fact that the switch that unbars the door to the final chest of GTG can be hit without a projectile, using a precise jump slash. - This trick supersedes "Gerudo Training Grounds MQ Left Side + This trick supersedes "Gerudo Training Ground MQ Left Side Silver Rupees with Hookshot". '''}, - 'Reach Gerudo Training Grounds Fake Wall Ledge with Hover Boots': { + 'Reach Gerudo Training Ground Fake Wall Ledge with Hover Boots': { 'name' : 'logic_gtg_fake_wall', - 'tags' : ("Gerudo Training Grounds",), + 'tags' : ("Gerudo Training Ground",), 'tooltip' : '''\ A precise Hover Boots use from the top of the chest can allow you to grab the ledge without needing the usual requirements. In Master Quest, this always skips a Song of Time requirement. In Vanilla, this skips a Hookshot requirement, but is only - relevant if "Gerudo Training Grounds Left Side Silver Rupees + relevant if "Gerudo Training Ground Left Side Silver Rupees without Hookshot" is enabled. '''}, 'Water Temple Cracked Wall with No Additional Items': { @@ -1299,19 +1291,19 @@ known_logic_tricks = { Removes the requirements for the Lens of Truth in Ganon's Castle. '''}, - 'Gerudo Training Grounds MQ without Lens of Truth': { + 'Gerudo Training Ground MQ without Lens of Truth': { 'name' : 'logic_lens_gtg_mq', - 'tags' : ("Lens of Truth","Gerudo Training Grounds",), + 'tags' : ("Lens of Truth","Gerudo Training Ground",), 'tooltip' : '''\ Removes the requirements for the Lens of Truth - in Gerudo Training Grounds MQ. + in Gerudo Training Ground MQ. '''}, - 'Gerudo Training Grounds without Lens of Truth': { + 'Gerudo Training Ground without Lens of Truth': { 'name' : 'logic_lens_gtg', - 'tags' : ("Lens of Truth","Gerudo Training Grounds",), + 'tags' : ("Lens of Truth","Gerudo Training Ground",), 'tooltip' : '''\ Removes the requirements for the Lens of Truth - in Gerudo Training Grounds. + in Gerudo Training Ground. '''}, 'Jabu MQ without Lens of Truth': { 'name' : 'logic_lens_jabu_mq', diff --git a/worlds/oot/Messages.py b/worlds/oot/Messages.py index 8423562612..e576b96b51 100644 --- a/worlds/oot/Messages.py +++ b/worlds/oot/Messages.py @@ -308,7 +308,7 @@ KEYSANITY_MESSAGES = { 0x0095: "\x13\x77\x08You found a \x05\x41Small Key\x05\x40\x01for the \x05\x43Water Temple\x05\x40!\x09", 0x009B: "\x13\x77\x08You found a \x05\x41Small Key\x05\x40\x01for the \x05\x45Bottom of the Well\x05\x40!\x09", 0x009F: "\x13\x77\x08You found a \x05\x41Small Key\x05\x40\x01for the \x05\x46Gerudo Training\x01Grounds\x05\x40!\x09", - 0x00A0: "\x13\x77\x08You found a \x05\x41Small Key\x05\x40\x01for the \x05\x46Gerudo's Fortress\x05\x40!\x09", + 0x00A0: "\x13\x77\x08You found a \x05\x41Small Key\x05\x40\x01for the \x05\x46Thieves' Hideout\x05\x40!\x09", 0x00A1: "\x13\x77\x08You found a \x05\x41Small Key\x05\x40\x01for \x05\x41Ganon's Castle\x05\x40!\x09", 0x00A2: "\x13\x75\x08You found the \x05\x41Compass\x05\x40\x01for the \x05\x45Bottom of the Well\x05\x40!\x09", 0x00A3: "\x13\x76\x08You found the \x05\x41Dungeon Map\x05\x40\x01for the \x05\x45Shadow Temple\x05\x40!\x09", diff --git a/worlds/oot/Options.py b/worlds/oot/Options.py index f0715f2a2c..beac763932 100644 --- a/worlds/oot/Options.py +++ b/worlds/oot/Options.py @@ -421,8 +421,8 @@ class ShuffleKeys(Choice): class ShuffleGerudoKeys(Choice): - """Control where to shuffle the Gerudo Fortress small keys.""" - display_name = "Gerudo Fortress Keys" + """Control where to shuffle the Thieves' Hideout small keys.""" + display_name = "Thieves' Hideout Keys" option_vanilla = 0 option_overworld = 1 option_any_dungeon = 2 diff --git a/worlds/oot/Patches.py b/worlds/oot/Patches.py index cb7732f1b9..29ae009219 100644 --- a/worlds/oot/Patches.py +++ b/worlds/oot/Patches.py @@ -710,7 +710,7 @@ def patch_rom(world, rom): rom.write_byte(address,0x01) # Allow Warp Songs in additional places - rom.write_byte(0xB6D3D2, 0x00) # Gerudo Training Grounds + rom.write_byte(0xB6D3D2, 0x00) # Gerudo Training Ground rom.write_byte(0xB6D42A, 0x00) # Inside Ganon's Castle #Tell Sheik at Ice Cavern we are always an Adult @@ -719,10 +719,10 @@ def patch_rom(world, rom): rom.write_int32(0xc7BCA4, 0x00000000) # Allow Farore's Wind in dungeons where it's normally forbidden - rom.write_byte(0xB6D3D3, 0x00) # Gerudo Training Grounds + rom.write_byte(0xB6D3D3, 0x00) # Gerudo Training Ground rom.write_byte(0xB6D42B, 0x00) # Inside Ganon's Castle - # Remove disruptive text from Gerudo Training Grounds and early Shadow Temple (vanilla) + # Remove disruptive text from Gerudo Training Ground and early Shadow Temple (vanilla) Wonder_text = [0x27C00BC, 0x27C00CC, 0x27C00DC, 0x27C00EC, 0x27C00FC, 0x27C010C, 0x27C011C, 0x27C012C, 0x27CE080, 0x27CE090, 0x2887070, 0x2887080, 0x2887090, 0x2897070, 0x28C7134, 0x28D91BC, 0x28A60F4, 0x28AE084, 0x28B9174, 0x28BF168, 0x28BF178, 0x28BF188, 0x28A1144, 0x28A6104, 0x28D0094] @@ -1202,7 +1202,7 @@ def patch_rom(world, rom): if world.dungeon_mq['Ice Cavern']: mq_scenes.append(9) # Scene 10 has no layout changes, so it doesn't need to be patched - if world.dungeon_mq['Gerudo Training Grounds']: + if world.dungeon_mq['Gerudo Training Ground']: mq_scenes.append(11) if world.dungeon_mq['Ganons Castle']: mq_scenes.append(13) @@ -1378,7 +1378,7 @@ def patch_rom(world, rom): rom.write_byte(0x2E8E931, special['text_id']) #Fix text box elif location.name == 'Song from Malon': rom.write_byte(rom.sym('MALON_TEXT_ID'), special['text_id']) - elif location.name == 'Song from Composers Grave': + elif location.name == 'Song from Royal Familys Tomb': rom.write_int16(0xE09F66, bit_mask_pointer) rom.write_byte(0x332A87D, special['text_id']) #Fix text box elif location.name == 'Song from Saria': @@ -1685,7 +1685,7 @@ def patch_rom(world, rom): 'Shadow Temple': ("the \x05\x45Shadow Temple", 'Bongo Bongo', 0x7f, 0xa3), } for dungeon in world.dungeon_mq: - if dungeon in ['Gerudo Training Grounds', 'Ganons Castle']: + if dungeon in ['Gerudo Training Ground', 'Ganons Castle']: pass elif dungeon in ['Bottom of the Well', 'Ice Cavern']: dungeon_name, boss_name, compass_id, map_id = dungeon_list[dungeon] @@ -2184,7 +2184,7 @@ def configure_dungeon_info(rom, world): codes = ['Deku Tree', 'Dodongos Cavern', 'Jabu Jabus Belly', 'Forest Temple', 'Fire Temple', 'Water Temple', 'Spirit Temple', 'Shadow Temple', 'Bottom of the Well', 'Ice Cavern', 'Tower (N/A)', - 'Gerudo Training Grounds', 'Hideout (N/A)', 'Ganons Castle'] + 'Gerudo Training Ground', 'Hideout (N/A)', 'Ganons Castle'] dungeon_is_mq = [1 if world.dungeon_mq.get(c) else 0 for c in codes] rom.write_int32(rom.sym('cfg_dungeon_info_enable'), 1) diff --git a/worlds/oot/__init__.py b/worlds/oot/__init__.py index 4cccd5e598..9dcb21ae26 100644 --- a/worlds/oot/__init__.py +++ b/worlds/oot/__init__.py @@ -584,7 +584,7 @@ class OOTWorld(World): # only one exists "Bottom of the Well Lens of Truth Chest", "Bottom of the Well MQ Lens of Truth Chest", # only one exists - "Gerudo Training Grounds Maze Path Final Chest", "Gerudo Training Grounds MQ Ice Arrows Chest", + "Gerudo Training Ground Maze Path Final Chest", "Gerudo Training Ground MQ Ice Arrows Chest", ] # Place/set rules for dungeon items @@ -620,28 +620,28 @@ class OOTWorld(World): # Now fill items that can go into any dungeon. Retrieve the Gerudo Fortress keys from the pool if necessary if self.shuffle_fortresskeys == 'any_dungeon': - fortresskeys = filter(lambda item: item.player == self.player and item.type == 'FortressSmallKey', + fortresskeys = filter(lambda item: item.player == self.player and item.type == 'HideoutSmallKey', self.world.itempool) itempools['any_dungeon'].extend(fortresskeys) if itempools['any_dungeon']: for item in itempools['any_dungeon']: self.world.itempool.remove(item) itempools['any_dungeon'].sort(key=lambda item: - {'GanonBossKey': 4, 'BossKey': 3, 'SmallKey': 2, 'FortressSmallKey': 1}.get(item.type, 0)) + {'GanonBossKey': 4, 'BossKey': 3, 'SmallKey': 2, 'HideoutSmallKey': 1}.get(item.type, 0)) self.world.random.shuffle(any_dungeon_locations) fill_restrictive(self.world, self.world.get_all_state(False), any_dungeon_locations, itempools['any_dungeon'], True, True) # If anything is overworld-only, fill into local non-dungeon locations if self.shuffle_fortresskeys == 'overworld': - fortresskeys = filter(lambda item: item.player == self.player and item.type == 'FortressSmallKey', + fortresskeys = filter(lambda item: item.player == self.player and item.type == 'HideoutSmallKey', self.world.itempool) itempools['overworld'].extend(fortresskeys) if itempools['overworld']: for item in itempools['overworld']: self.world.itempool.remove(item) itempools['overworld'].sort(key=lambda item: - {'GanonBossKey': 4, 'BossKey': 3, 'SmallKey': 2, 'FortressSmallKey': 1}.get(item.type, 0)) + {'GanonBossKey': 4, 'BossKey': 3, 'SmallKey': 2, 'HideoutSmallKey': 1}.get(item.type, 0)) non_dungeon_locations = [loc for loc in self.get_locations() if not loc.item and loc not in any_dungeon_locations and (loc.type != 'Shop' or loc.name in self.shop_prices) and @@ -845,7 +845,7 @@ class OOTWorld(World): if loc.game == "Ocarina of Time" and loc.item.code and (not loc.locked or (loc.item.type == 'Song' or (loc.item.type == 'SmallKey' and world.worlds[loc.player].shuffle_smallkeys == 'any_dungeon') or - (loc.item.type == 'FortressSmallKey' and world.worlds[loc.player].shuffle_fortresskeys == 'any_dungeon') or + (loc.item.type == 'HideoutSmallKey' and world.worlds[loc.player].shuffle_fortresskeys == 'any_dungeon') or (loc.item.type == 'BossKey' and world.worlds[loc.player].shuffle_bosskeys == 'any_dungeon') or (loc.item.type == 'GanonBossKey' and world.worlds[loc.player].shuffle_ganon_bosskey == 'any_dungeon'))): if loc.player in barren_hint_players: @@ -977,7 +977,7 @@ class OOTWorld(World): return False if item.type == 'SmallKey' and self.shuffle_smallkeys in ['dungeon', 'vanilla']: return False - if item.type == 'FortressSmallKey' and self.shuffle_fortresskeys == 'vanilla': + if item.type == 'HideoutSmallKey' and self.shuffle_fortresskeys == 'vanilla': return False if item.type == 'BossKey' and self.shuffle_bosskeys in ['dungeon', 'vanilla']: return False diff --git a/worlds/oot/data/Glitched World/Gerudo Training Ground MQ.json b/worlds/oot/data/Glitched World/Gerudo Training Ground MQ.json new file mode 100644 index 0000000000..d36472fc9b --- /dev/null +++ b/worlds/oot/data/Glitched World/Gerudo Training Ground MQ.json @@ -0,0 +1,79 @@ +[ + { + "region_name": "Gerudo Training Ground Lobby", + "dungeon": "Gerudo Training Ground", + "locations": { + "Gerudo Training Ground MQ Lobby Left Chest": "True", + "Gerudo Training Ground MQ Lobby Right Chest": "True", + "Gerudo Training Ground MQ Hidden Ceiling Chest": "logic_lens_gtg_mq or can_use(Lens_of_Truth)", + "Gerudo Training Ground MQ Maze Path First Chest": "True", + "Gerudo Training Ground MQ Maze Path Second Chest": "True", + "Gerudo Training Ground MQ Maze Path Third Chest": "(Small_Key_Gerudo_Training_Ground, 1)" + }, + "exits": { + "Gerudo Fortress": "True", + "Gerudo Training Ground Left Side": "has_fire_source", + "Gerudo Training Ground Right Side": "Bow" + } + }, + { + "region_name": "Gerudo Training Ground Right Side", + "dungeon": "Gerudo Training Ground", + "locations": { + "Gerudo Training Ground MQ Dinolfos Chest": "True", + "Gerudo Training Ground MQ Underwater Silver Rupee Chest": " + (Hover_Boots or at('Gerudo Training Ground Central Maze Right', can_use(Longshot) or Bow)) and + has_fire_source and Iron_Boots and (logic_fewer_tunic_requirements or can_use(Zora_Tunic)) and + can_take_damage", + "Wall Fairy": "has_bottle and can_use(Bow)" #in the Dinalfos room shoot the Gerudo symbol above the door to the lava room. + } + }, + { + "region_name": "Gerudo Training Ground Left Side", + "dungeon": "Gerudo Training Ground", + "locations": { + "Gerudo Training Ground MQ First Iron Knuckle Chest": "True" + }, + "exits": { + "Gerudo Training Ground Stalfos Room": "can_use(Longshot) or (logic_gtg_mq_with_hookshot and can_use(Hookshot))" + } + }, + { + "region_name": "Gerudo Training Ground Stalfos Room", + "dungeon": "Gerudo Training Ground", + "locations": { + "Gerudo Training Ground MQ Before Heavy Block Chest": "True", + "Gerudo Training Ground MQ Heavy Block Chest": "can_use(Silver_Gauntlets)", + "Blue Fire": "has_bottle" + }, + "exits": { + "Gerudo Training Ground Back Areas": "can_play(Song_of_Time) and (logic_lens_gtg_mq or can_use(Lens_of_Truth)) and Blue_Fire" + } + }, + { + "region_name": "Gerudo Training Ground Back Areas", + "dungeon": "Gerudo Training Ground", + "locations": { + "Gerudo Training Ground MQ Eye Statue Chest": "Bow", + "Gerudo Training Ground MQ Second Iron Knuckle Chest": "True", + "Gerudo Training Ground MQ Flame Circle Chest": "True" + }, + "exits": { + "Gerudo Training Ground Central Maze Right": "Megaton_Hammer", + "Gerudo Training Ground Right Side": "can_use(Longshot)" + } + }, + { + "region_name": "Gerudo Training Ground Central Maze Right", + "dungeon": "Gerudo Training Ground", + "locations": { + "Gerudo Training Ground MQ Maze Right Central Chest": "True", + "Gerudo Training Ground MQ Maze Right Side Chest": "True", + "Gerudo Training Ground MQ Ice Arrows Chest": " + (Small_Key_Gerudo_Training_Ground, 3)" + }, + "exits": { + "Gerudo Training Ground Right Side": "True" + } + } +] diff --git a/worlds/oot/data/Glitched World/Gerudo Training Ground.json b/worlds/oot/data/Glitched World/Gerudo Training Ground.json new file mode 100644 index 0000000000..7c46ee62a5 --- /dev/null +++ b/worlds/oot/data/Glitched World/Gerudo Training Ground.json @@ -0,0 +1,112 @@ +[ + { + "region_name": "Gerudo Training Ground Lobby", + "dungeon": "Gerudo Training Ground", + "locations": { + "Gerudo Training Ground Lobby Left Chest": "can_use(Bow) or can_use(Slingshot)", + "Gerudo Training Ground Lobby Right Chest": "can_use(Bow) or can_use(Slingshot)", + "Gerudo Training Ground Stalfos Chest": "can_jumpslash", + "Gerudo Training Ground Beamos Chest": "has_explosives and can_jumpslash", + "Wall Fairy": "has_bottle and can_use(Bow)" #in the Beamos room shoot the Gerudo symbol above the door to the lava room. + }, + "exits": { + "Gerudo Training Ground Heavy Block Room": "True", + "Gerudo Training Ground Lava Room": " + here(has_explosives and can_jumpslash)", + "Gerudo Training Ground Central Maze": "True" + } + }, + { + "region_name": "Gerudo Training Ground Central Maze", + "dungeon": "Gerudo Training Ground", + "locations": { + "Gerudo Training Ground Hidden Ceiling Chest": "(Small_Key_Gerudo_Training_Ground, 3) + or (can_use(Hookshot) and can_mega) or (is_child and has_explosives and (can_live_dmg(0.5) or can_use(Nayrus_Love)))", + "Gerudo Training Ground Maze Path First Chest": "(Small_Key_Gerudo_Training_Ground, 4) + or (can_use(Hookshot) and can_mega) or (is_child and has_explosives and (can_live_dmg(1.0) or can_use(Nayrus_Love)))", + "Gerudo Training Ground Maze Path Second Chest": "(Small_Key_Gerudo_Training_Ground, 6) + or (can_use(Hookshot) and can_mega) or (is_child and has_explosives and (can_live_dmg(1.0) or can_use(Nayrus_Love)))", + "Gerudo Training Ground Maze Path Third Chest": "(Small_Key_Gerudo_Training_Ground, 7) + or (can_use(Hookshot) and can_mega) or (is_child and has_explosives and (can_live_dmg(0.5) or can_use(Nayrus_Love)))", + "Gerudo Training Ground Maze Path Final Chest": "(Small_Key_Gerudo_Training_Ground, 9) + or (can_use(Hookshot) and can_mega) or (is_child and has_explosives and (can_live_dmg(0.5) or can_use(Nayrus_Love)))" + }, + "exits": { + "Gerudo Training Ground Central Maze Right": "(Small_Key_Gerudo_Training_Ground, 9) + or (can_use(Hookshot) and can_mega) or (is_child and has_explosives)" + } + }, + { + "region_name": "Gerudo Training Ground Central Maze Right", + "dungeon": "Gerudo Training Ground", + "locations": { + "Gerudo Training Ground Maze Right Central Chest": "True", + "Gerudo Training Ground Maze Right Side Chest": "True", + "Gerudo Training Ground Freestanding Key": "True" + }, + "exits": { + "Gerudo Training Ground Lava Room": "True" + } + }, + { + "region_name": "Gerudo Training Ground Lava Room", + "dungeon": "Gerudo Training Ground", + "locations": { + "Gerudo Training Ground Underwater Silver Rupee Chest": " + can_use(Hookshot) and (can_play(Song_of_Time) or can_mega) and Iron_Boots" + }, + "exits": { + "Gerudo Training Ground Central Maze Right": "can_play(Song_of_Time) or is_child + or (can_use(Hookshot) and can_use(Hover_Boots) and can_shield and Bombs)", + "Gerudo Training Ground Hammer Room": "can_use(Hookshot)" + } + }, + { + "region_name": "Gerudo Training Ground Hammer Room", + "dungeon": "Gerudo Training Ground", + "locations": { + "Gerudo Training Ground Hammer Room Clear Chest": "True", + "Gerudo Training Ground Hammer Room Switch Chest": "can_use(Megaton_Hammer) or + can_live_dmg(0.5) or can_use(Nayrus_Love)" + }, + "exits": { + "Gerudo Training Ground Eye Statue Lower": "can_use(Bow)", + "Gerudo Training Ground Lava Room": "True" + } + }, + { + "region_name": "Gerudo Training Ground Eye Statue Lower", + "dungeon": "Gerudo Training Ground", + "locations": { + "Gerudo Training Ground Eye Statue Chest": "can_use(Bow)" + }, + "exits": { + "Gerudo Training Ground Hammer Room": "True" + } + }, + { + "region_name": "Gerudo Training Ground Eye Statue Upper", + "dungeon": "Gerudo Training Ground", + "locations": { + "Gerudo Training Ground Near Scarecrow Chest": "can_use(Bow)" + }, + "exits": { + "Gerudo Training Ground Eye Statue Lower": "True" + } + }, + { + "region_name": "Gerudo Training Ground Heavy Block Room", + "dungeon": "Gerudo Training Ground", + "locations": { + "Gerudo Training Ground Before Heavy Block Chest": "True", + "Gerudo Training Ground Heavy Block First Chest": "can_use(Silver_Gauntlets)", + "Gerudo Training Ground Heavy Block Second Chest": "can_use(Silver_Gauntlets)", + "Gerudo Training Ground Heavy Block Third Chest": "can_use(Silver_Gauntlets)", + "Gerudo Training Ground Heavy Block Fourth Chest": "can_use(Silver_Gauntlets)" + }, + "exits": { + "Gerudo Training Ground Eye Statue Upper": "can_use(Hookshot) or can_hover or + (is_adult and (Hover_Boots or (can_shield and Bombs)))" + } + } +] diff --git a/worlds/oot/data/Glitched World/Gerudo Training Grounds MQ.json b/worlds/oot/data/Glitched World/Gerudo Training Grounds MQ.json deleted file mode 100644 index 388d4b59bb..0000000000 --- a/worlds/oot/data/Glitched World/Gerudo Training Grounds MQ.json +++ /dev/null @@ -1,79 +0,0 @@ -[ - { - "region_name": "Gerudo Training Grounds Lobby", - "dungeon": "Gerudo Training Grounds", - "locations": { - "Gerudo Training Grounds MQ Lobby Left Chest": "True", - "Gerudo Training Grounds MQ Lobby Right Chest": "True", - "Gerudo Training Grounds MQ Hidden Ceiling Chest": "logic_lens_gtg_mq or can_use(Lens_of_Truth)", - "Gerudo Training Grounds MQ Maze Path First Chest": "True", - "Gerudo Training Grounds MQ Maze Path Second Chest": "True", - "Gerudo Training Grounds MQ Maze Path Third Chest": "(Small_Key_Gerudo_Training_Grounds, 1)" - }, - "exits": { - "Gerudo Fortress": "True", - "Gerudo Training Grounds Left Side": "has_fire_source", - "Gerudo Training Grounds Right Side": "Bow" - } - }, - { - "region_name": "Gerudo Training Grounds Right Side", - "dungeon": "Gerudo Training Grounds", - "locations": { - "Gerudo Training Grounds MQ Dinolfos Chest": "True", - "Gerudo Training Grounds MQ Underwater Silver Rupee Chest": " - (Hover_Boots or at('Gerudo Training Grounds Central Maze Right', can_use(Longshot) or Bow)) and - has_fire_source and Iron_Boots and (logic_fewer_tunic_requirements or can_use(Zora_Tunic)) and - can_take_damage", - "Wall Fairy": "has_bottle and can_use(Bow)" #in the Dinalfos room shoot the Gerudo symbol above the door to the lava room. - } - }, - { - "region_name": "Gerudo Training Grounds Left Side", - "dungeon": "Gerudo Training Grounds", - "locations": { - "Gerudo Training Grounds MQ First Iron Knuckle Chest": "True" - }, - "exits": { - "Gerudo Training Grounds Stalfos Room": "can_use(Longshot) or (logic_gtg_mq_with_hookshot and can_use(Hookshot))" - } - }, - { - "region_name": "Gerudo Training Grounds Stalfos Room", - "dungeon": "Gerudo Training Grounds", - "locations": { - "Gerudo Training Grounds MQ Before Heavy Block Chest": "True", - "Gerudo Training Grounds MQ Heavy Block Chest": "can_use(Silver_Gauntlets)", - "Blue Fire": "has_bottle" - }, - "exits": { - "Gerudo Training Grounds Back Areas": "can_play(Song_of_Time) and (logic_lens_gtg_mq or can_use(Lens_of_Truth)) and Blue_Fire" - } - }, - { - "region_name": "Gerudo Training Grounds Back Areas", - "dungeon": "Gerudo Training Grounds", - "locations": { - "Gerudo Training Grounds MQ Eye Statue Chest": "Bow", - "Gerudo Training Grounds MQ Second Iron Knuckle Chest": "True", - "Gerudo Training Grounds MQ Flame Circle Chest": "True" - }, - "exits": { - "Gerudo Training Grounds Central Maze Right": "Megaton_Hammer", - "Gerudo Training Grounds Right Side": "can_use(Longshot)" - } - }, - { - "region_name": "Gerudo Training Grounds Central Maze Right", - "dungeon": "Gerudo Training Grounds", - "locations": { - "Gerudo Training Grounds MQ Maze Right Central Chest": "True", - "Gerudo Training Grounds MQ Maze Right Side Chest": "True", - "Gerudo Training Grounds MQ Ice Arrows Chest": " - (Small_Key_Gerudo_Training_Grounds, 3)" - }, - "exits": { - "Gerudo Training Grounds Right Side": "True" - } - } -] diff --git a/worlds/oot/data/Glitched World/Gerudo Training Grounds.json b/worlds/oot/data/Glitched World/Gerudo Training Grounds.json deleted file mode 100644 index 793c115b43..0000000000 --- a/worlds/oot/data/Glitched World/Gerudo Training Grounds.json +++ /dev/null @@ -1,112 +0,0 @@ -[ - { - "region_name": "Gerudo Training Grounds Lobby", - "dungeon": "Gerudo Training Grounds", - "locations": { - "Gerudo Training Grounds Lobby Left Chest": "can_use(Bow) or can_use(Slingshot)", - "Gerudo Training Grounds Lobby Right Chest": "can_use(Bow) or can_use(Slingshot)", - "Gerudo Training Grounds Stalfos Chest": "can_jumpslash", - "Gerudo Training Grounds Beamos Chest": "has_explosives and can_jumpslash", - "Wall Fairy": "has_bottle and can_use(Bow)" #in the Beamos room shoot the Gerudo symbol above the door to the lava room. - }, - "exits": { - "Gerudo Training Grounds Heavy Block Room": "True", - "Gerudo Training Grounds Lava Room": " - here(has_explosives and can_jumpslash)", - "Gerudo Training Grounds Central Maze": "True" - } - }, - { - "region_name": "Gerudo Training Grounds Central Maze", - "dungeon": "Gerudo Training Grounds", - "locations": { - "Gerudo Training Grounds Hidden Ceiling Chest": "(Small_Key_Gerudo_Training_Grounds, 3) - or (can_use(Hookshot) and can_mega) or (is_child and has_explosives and (can_live_dmg(0.5) or can_use(Nayrus_Love)))", - "Gerudo Training Grounds Maze Path First Chest": "(Small_Key_Gerudo_Training_Grounds, 4) - or (can_use(Hookshot) and can_mega) or (is_child and has_explosives and (can_live_dmg(1.0) or can_use(Nayrus_Love)))", - "Gerudo Training Grounds Maze Path Second Chest": "(Small_Key_Gerudo_Training_Grounds, 6) - or (can_use(Hookshot) and can_mega) or (is_child and has_explosives and (can_live_dmg(1.0) or can_use(Nayrus_Love)))", - "Gerudo Training Grounds Maze Path Third Chest": "(Small_Key_Gerudo_Training_Grounds, 7) - or (can_use(Hookshot) and can_mega) or (is_child and has_explosives and (can_live_dmg(0.5) or can_use(Nayrus_Love)))", - "Gerudo Training Grounds Maze Path Final Chest": "(Small_Key_Gerudo_Training_Grounds, 9) - or (can_use(Hookshot) and can_mega) or (is_child and has_explosives and (can_live_dmg(0.5) or can_use(Nayrus_Love)))" - }, - "exits": { - "Gerudo Training Grounds Central Maze Right": "(Small_Key_Gerudo_Training_Grounds, 9) - or (can_use(Hookshot) and can_mega) or (is_child and has_explosives)" - } - }, - { - "region_name": "Gerudo Training Grounds Central Maze Right", - "dungeon": "Gerudo Training Grounds", - "locations": { - "Gerudo Training Grounds Maze Right Central Chest": "True", - "Gerudo Training Grounds Maze Right Side Chest": "True", - "Gerudo Training Grounds Freestanding Key": "True" - }, - "exits": { - "Gerudo Training Grounds Lava Room": "True" - } - }, - { - "region_name": "Gerudo Training Grounds Lava Room", - "dungeon": "Gerudo Training Grounds", - "locations": { - "Gerudo Training Grounds Underwater Silver Rupee Chest": " - can_use(Hookshot) and (can_play(Song_of_Time) or can_mega) and Iron_Boots" - }, - "exits": { - "Gerudo Training Grounds Central Maze Right": "can_play(Song_of_Time) or is_child - or (can_use(Hookshot) and can_use(Hover_Boots) and can_shield and Bombs)", - "Gerudo Training Grounds Hammer Room": "can_use(Hookshot)" - } - }, - { - "region_name": "Gerudo Training Grounds Hammer Room", - "dungeon": "Gerudo Training Grounds", - "locations": { - "Gerudo Training Grounds Hammer Room Clear Chest": "True", - "Gerudo Training Grounds Hammer Room Switch Chest": "can_use(Megaton_Hammer) or - can_live_dmg(0.5) or can_use(Nayrus_Love)" - }, - "exits": { - "Gerudo Training Grounds Eye Statue Lower": "can_use(Bow)", - "Gerudo Training Grounds Lava Room": "True" - } - }, - { - "region_name": "Gerudo Training Grounds Eye Statue Lower", - "dungeon": "Gerudo Training Grounds", - "locations": { - "Gerudo Training Grounds Eye Statue Chest": "can_use(Bow)" - }, - "exits": { - "Gerudo Training Grounds Hammer Room": "True" - } - }, - { - "region_name": "Gerudo Training Grounds Eye Statue Upper", - "dungeon": "Gerudo Training Grounds", - "locations": { - "Gerudo Training Grounds Near Scarecrow Chest": "can_use(Bow)" - }, - "exits": { - "Gerudo Training Grounds Eye Statue Lower": "True" - } - }, - { - "region_name": "Gerudo Training Grounds Heavy Block Room", - "dungeon": "Gerudo Training Grounds", - "locations": { - "Gerudo Training Grounds Before Heavy Block Chest": "True", - "Gerudo Training Grounds Heavy Block First Chest": "can_use(Silver_Gauntlets)", - "Gerudo Training Grounds Heavy Block Second Chest": "can_use(Silver_Gauntlets)", - "Gerudo Training Grounds Heavy Block Third Chest": "can_use(Silver_Gauntlets)", - "Gerudo Training Grounds Heavy Block Fourth Chest": "can_use(Silver_Gauntlets)" - }, - "exits": { - "Gerudo Training Grounds Eye Statue Upper": "can_use(Hookshot) or can_hover or - (is_adult and (Hover_Boots or (can_shield and Bombs)))" - } - } -] diff --git a/worlds/oot/data/Glitched World/Overworld.json b/worlds/oot/data/Glitched World/Overworld.json index 056aa9eea3..f47c85a0b3 100644 --- a/worlds/oot/data/Glitched World/Overworld.json +++ b/worlds/oot/data/Glitched World/Overworld.json @@ -324,18 +324,18 @@ Gerudo_Membership_Card and can_ride_epona and Bow and is_adult", "GF HBA 1500 Points": " Gerudo_Membership_Card and can_ride_epona and Bow and is_adult", - "GF North F1 Carpenter": "is_adult or (is_child and can_child_damage)", - "GF North F2 Carpenter": "is_adult or (is_child and can_child_damage)", - "GF South F1 Carpenter": "is_adult or (is_child and can_child_damage)", - "GF South F2 Carpenter": "is_adult or (is_child and can_child_damage)", - "GF Gerudo Membership Card": "can_finish_GerudoFortress", + "Hideout Jail Guard (1 Torch)": "is_adult or (is_child and can_child_damage)", + "Hideout Jail Guard (2 Torches)": "is_adult or (is_child and can_child_damage)", + "Hideout Jail Guard (3 Torches)": "is_adult or (is_child and can_child_damage)", + "Hideout Jail Guard (4 Torches)": "is_adult or (is_child and can_child_damage)", + "Hideout Gerudo Membership Card": "can_finish_GerudoFortress", "GF GS Archery Range": "can_use(Hookshot) and at_night", "GF GS Top Floor": "at_night and is_adult" }, "exits": { "Haunted Wasteland": "is_child or 'GF Gate Open' or ((Progressive_Hookshot and (Hover_Boots or can_mega)) or (can_isg and Bombs) )", - "Gerudo Training Grounds Lobby": "True" + "Gerudo Training Ground Lobby": "True" } }, { @@ -707,7 +707,7 @@ }, "exits": { "Graveyard Shield Grave": "True", - "Graveyard Composers Grave": "can_play(Zeldas_Lullaby) or at('Graveyard Warp Pad Region', True)", + "Graveyard Royal Familys Tomb": "can_play(Zeldas_Lullaby) or at('Graveyard Warp Pad Region', True)", "Graveyard Heart Piece Grave": "True", "Graveyard Dampes Grave": "is_adult or at('Graveyard Warp Pad Region', True)", "Graveyard Dampes House": "True", @@ -728,10 +728,10 @@ } }, { - "region_name": "Graveyard Composers Grave", + "region_name": "Graveyard Royal Familys Tomb", "locations": { - "Graveyard Composers Grave Chest": "has_fire_source or (is_child and Sticks and (can_live_dmg(0.75) or can_use(Nayrus_Love)))", - "Song from Composers Grave": " + "Graveyard Royal Familys Tomb Chest": "has_fire_source or (is_child and Sticks and (can_live_dmg(0.75) or can_use(Nayrus_Love)))", + "Song from Royal Familys Tomb": " is_adult or (Slingshot or Boomerang or Sticks or has_explosives or Kokiri_Sword)" diff --git a/worlds/oot/data/LogicHelpers.json b/worlds/oot/data/LogicHelpers.json index c1766a1e99..099aa2ea63 100644 --- a/worlds/oot/data/LogicHelpers.json +++ b/worlds/oot/data/LogicHelpers.json @@ -83,8 +83,8 @@ "has_fire_source_with_torch": "has_fire_source or (is_child and Sticks)", # Gerudo Fortress - "can_finish_GerudoFortress": "(gerudo_fortress == 'normal' and (Small_Key_Gerudo_Fortress, 4) and (is_adult or Kokiri_Sword or is_glitched) and (is_adult and (Bow or Hookshot or Hover_Boots) or Gerudo_Membership_Card or logic_gerudo_kitchen or is_glitched)) - or (gerudo_fortress == 'fast' and Small_Key_Gerudo_Fortress and (is_adult or Kokiri_Sword or is_glitched)) + "can_finish_GerudoFortress": "(gerudo_fortress == 'normal' and (Small_Key_Thieves_Hideout, 4) and (is_adult or Kokiri_Sword or is_glitched) and (is_adult and (Bow or Hookshot or Hover_Boots) or Gerudo_Membership_Card or logic_gerudo_kitchen or is_glitched)) + or (gerudo_fortress == 'fast' and Small_Key_Thieves_Hideout and (is_adult or Kokiri_Sword or is_glitched)) or (gerudo_fortress != 'normal' and gerudo_fortress != 'fast')", # Mirror shield does not count because it cannot reflect scrub attack. "has_shield": "(is_adult and Hylian_Shield) or (is_child and Deku_Shield)", diff --git a/worlds/oot/data/World/Deku Tree MQ.json b/worlds/oot/data/World/Deku Tree MQ.json index 3fbafc3587..e5fc840ed5 100644 --- a/worlds/oot/data/World/Deku Tree MQ.json +++ b/worlds/oot/data/World/Deku Tree MQ.json @@ -32,7 +32,7 @@ (can_use(Hookshot) or can_use(Boomerang)) and here(has_bombchus or (Bombs and (can_play(Song_of_Time) or is_adult)) or - (can_use(Hammer) and (can_play(Song_of_Time) or logic_deku_mq_compass_gs)))" + (can_use(Megaton_Hammer) and (can_play(Song_of_Time) or logic_deku_mq_compass_gs)))" }, "exits": { "Deku Tree Lobby": "True" diff --git a/worlds/oot/data/World/Dodongos Cavern MQ.json b/worlds/oot/data/World/Dodongos Cavern MQ.json index 298604befe..cd466cc677 100644 --- a/worlds/oot/data/World/Dodongos Cavern MQ.json +++ b/worlds/oot/data/World/Dodongos Cavern MQ.json @@ -41,7 +41,7 @@ (logic_dc_mq_eyes and Progressive_Strength_Upgrade and (is_adult or logic_dc_mq_child_back) and (here(can_use(Sticks)) or can_use(Dins_Fire) or - (is_adult and (logic_dc_jump or Hammer or Hover_Boots or Hookshot))))" + (is_adult and (logic_dc_jump or Megaton_Hammer or Hover_Boots or Hookshot))))" } }, { diff --git a/worlds/oot/data/World/Forest Temple MQ.json b/worlds/oot/data/World/Forest Temple MQ.json index a259412256..4050a6fb6f 100644 --- a/worlds/oot/data/World/Forest Temple MQ.json +++ b/worlds/oot/data/World/Forest Temple MQ.json @@ -33,8 +33,7 @@ is_adult and (Progressive_Strength_Upgrade or (logic_forest_mq_block_puzzle and has_bombchus and can_use(Hookshot)))", "Forest Temple Outdoor Ledge": " - (logic_forest_mq_hallway_switch_jumpslash and can_use(Hover_Boots)) or - (logic_forest_mq_hallway_switch_hookshot and can_use(Hookshot))", + (logic_forest_mq_hallway_switch_jumpslash and can_use(Hover_Boots))", "Forest Temple Boss Region": " Forest_Temple_Jo_and_Beth and Forest_Temple_Amy_and_Meg" } diff --git a/worlds/oot/data/World/Gerudo Training Ground MQ.json b/worlds/oot/data/World/Gerudo Training Ground MQ.json new file mode 100644 index 0000000000..98c68b8707 --- /dev/null +++ b/worlds/oot/data/World/Gerudo Training Ground MQ.json @@ -0,0 +1,98 @@ +[ + { + "region_name": "Gerudo Training Ground Lobby", + "dungeon": "Gerudo Training Ground", + "locations": { + "Gerudo Training Ground MQ Lobby Left Chest": "True", + "Gerudo Training Ground MQ Lobby Right Chest": "True", + "Gerudo Training Ground MQ Hidden Ceiling Chest": "logic_lens_gtg_mq or can_use(Lens_of_Truth)", + "Gerudo Training Ground MQ Maze Path First Chest": "True", + "Gerudo Training Ground MQ Maze Path Second Chest": "True", + "Gerudo Training Ground MQ Maze Path Third Chest": "(Small_Key_Gerudo_Training_Ground, 1)" + }, + "exits": { + "Gerudo Fortress": "True", + "Gerudo Training Ground Left Side": "here(has_fire_source)", + "Gerudo Training Ground Right Side": "here(can_use(Bow) or can_use(Slingshot))" + } + }, + { + "region_name": "Gerudo Training Ground Right Side", + "dungeon": "Gerudo Training Ground", + "locations": { + "Gerudo Training Ground MQ Dinolfos Chest": "is_adult", + "Wall Fairy": "has_bottle and can_use(Bow)" #in the Dinalfos room shoot the Gerudo symbol above the door to the lava room. + }, + "exits": { + # Still requires has_fire_source in the room + "Gerudo Training Ground Underwater": " + (Bow or can_use(Longshot)) and can_use(Hover_Boots)" + } + }, + { + "region_name": "Gerudo Training Ground Underwater", + "dungeon": "Gerudo Training Ground", + "locations": { + "Gerudo Training Ground MQ Underwater Silver Rupee Chest": " + has_fire_source and can_use(Iron_Boots) and + (logic_fewer_tunic_requirements or can_use(Zora_Tunic)) and can_take_damage" + } + }, + { + "region_name": "Gerudo Training Ground Left Side", + "dungeon": "Gerudo Training Ground", + "locations": { + "Gerudo Training Ground MQ First Iron Knuckle Chest": "is_adult or Kokiri_Sword or has_explosives" + }, + "exits": { + "Gerudo Training Ground Stalfos Room": " + can_use(Longshot) or logic_gtg_mq_without_hookshot or + (logic_gtg_mq_with_hookshot and can_use(Hookshot))" + } + }, + { + "region_name": "Gerudo Training Ground Stalfos Room", + "dungeon": "Gerudo Training Ground", + "locations": { + # Very difficult to fight the Stalfos and Stulltulas under the time limit as child. + "Gerudo Training Ground MQ Before Heavy Block Chest": "is_adult", + "Gerudo Training Ground MQ Heavy Block Chest": "can_use(Silver_Gauntlets)", + "Blue Fire": "has_bottle" + }, + "exits": { + "Gerudo Training Ground Back Areas": " + is_adult and (logic_lens_gtg_mq or can_use(Lens_of_Truth)) and Blue_Fire and + (can_play(Song_of_Time) or (logic_gtg_fake_wall and can_use(Hover_Boots)))" + } + }, + { + "region_name": "Gerudo Training Ground Back Areas", + "dungeon": "Gerudo Training Ground", + "locations": { + "Gerudo Training Ground MQ Eye Statue Chest": "Bow", + "Gerudo Training Ground MQ Second Iron Knuckle Chest": "True", + "Gerudo Training Ground MQ Flame Circle Chest": "can_use(Hookshot) or Bow or has_explosives" + }, + "exits": { + "Gerudo Training Ground Central Maze Right": "Megaton_Hammer", + "Gerudo Training Ground Right Side": "can_use(Longshot)" + } + }, + { + "region_name": "Gerudo Training Ground Central Maze Right", + "dungeon": "Gerudo Training Ground", + "locations": { + "Gerudo Training Ground MQ Maze Right Central Chest": "True", + "Gerudo Training Ground MQ Maze Right Side Chest": "True", + # The switch that opens the door to the Ice Arrows chest can be hit with a precise jumpslash. + "Gerudo Training Ground MQ Ice Arrows Chest": " + (Small_Key_Gerudo_Training_Ground, 3)" + }, + "exits": { + # guarantees fire with torch + "Gerudo Training Ground Underwater": " + can_use(Longshot) or (can_use(Hookshot) and Bow)", + "Gerudo Training Ground Right Side": "can_use(Hookshot)" + } + } +] diff --git a/worlds/oot/data/World/Gerudo Training Ground.json b/worlds/oot/data/World/Gerudo Training Ground.json new file mode 100644 index 0000000000..dfaed49a8c --- /dev/null +++ b/worlds/oot/data/World/Gerudo Training Ground.json @@ -0,0 +1,120 @@ +[ + { + "region_name": "Gerudo Training Ground Lobby", + "dungeon": "Gerudo Training Ground", + "locations": { + "Gerudo Training Ground Lobby Left Chest": "can_use(Bow) or can_use(Slingshot)", + "Gerudo Training Ground Lobby Right Chest": "can_use(Bow) or can_use(Slingshot)", + "Gerudo Training Ground Stalfos Chest": "is_adult or Kokiri_Sword", + "Gerudo Training Ground Beamos Chest": "has_explosives and (is_adult or Kokiri_Sword)", + "Wall Fairy": "has_bottle and can_use(Bow)" #in the Beamos room shoot the Gerudo symbol above the door to the lava room. + }, + "exits": { + "Gerudo Fortress": "True", + "Gerudo Training Ground Heavy Block Room": " + (is_adult or Kokiri_Sword) and + (can_use(Hookshot) or logic_gtg_without_hookshot)", + "Gerudo Training Ground Lava Room": " + here(has_explosives and (is_adult or Kokiri_Sword))", + "Gerudo Training Ground Central Maze": "True" + } + }, + { + "region_name": "Gerudo Training Ground Central Maze", + "dungeon": "Gerudo Training Ground", + "locations": { + "Gerudo Training Ground Hidden Ceiling Chest": "(Small_Key_Gerudo_Training_Ground, 3) and (logic_lens_gtg or can_use(Lens_of_Truth))", + "Gerudo Training Ground Maze Path First Chest": "(Small_Key_Gerudo_Training_Ground, 4)", + "Gerudo Training Ground Maze Path Second Chest": "(Small_Key_Gerudo_Training_Ground, 6)", + "Gerudo Training Ground Maze Path Third Chest": "(Small_Key_Gerudo_Training_Ground, 7)", + "Gerudo Training Ground Maze Path Final Chest": "(Small_Key_Gerudo_Training_Ground, 9)" + }, + "exits": { + "Gerudo Training Ground Central Maze Right": "(Small_Key_Gerudo_Training_Ground, 9)" + } + }, + { + "region_name": "Gerudo Training Ground Central Maze Right", + "dungeon": "Gerudo Training Ground", + "locations": { + "Gerudo Training Ground Maze Right Central Chest": "True", + "Gerudo Training Ground Maze Right Side Chest": "True", + "Gerudo Training Ground Freestanding Key": "True" + }, + "exits": { + "Gerudo Training Ground Hammer Room": "can_use(Hookshot)", + "Gerudo Training Ground Lava Room": "True" + } + }, + { + "region_name": "Gerudo Training Ground Lava Room", + "dungeon": "Gerudo Training Ground", + "locations": { + "Gerudo Training Ground Underwater Silver Rupee Chest": " + can_use(Hookshot) and can_play(Song_of_Time) and Iron_Boots and + (logic_fewer_tunic_requirements or can_use(Zora_Tunic))" + }, + "exits": { + "Gerudo Training Ground Central Maze Right": "can_play(Song_of_Time) or is_child", + "Gerudo Training Ground Hammer Room": " + can_use(Longshot) or (can_use(Hookshot) and can_use(Hover_Boots))" + } + }, + { + "region_name": "Gerudo Training Ground Hammer Room", + "dungeon": "Gerudo Training Ground", + "locations": { + "Gerudo Training Ground Hammer Room Clear Chest": "True", + "Gerudo Training Ground Hammer Room Switch Chest": "can_use(Megaton_Hammer)" + }, + "exits": { + "Gerudo Training Ground Eye Statue Lower": "can_use(Megaton_Hammer) and Bow", + "Gerudo Training Ground Lava Room": "True" + } + }, + { + "region_name": "Gerudo Training Ground Eye Statue Lower", + "dungeon": "Gerudo Training Ground", + "locations": { + "Gerudo Training Ground Eye Statue Chest": "can_use(Bow)" + }, + "exits": { + "Gerudo Training Ground Hammer Room": "True" + } + }, + { + "region_name": "Gerudo Training Ground Eye Statue Upper", + "dungeon": "Gerudo Training Ground", + "locations": { + "Gerudo Training Ground Near Scarecrow Chest": "can_use(Bow)" + }, + "exits": { + "Gerudo Training Ground Eye Statue Lower": "True" + } + }, + { + "region_name": "Gerudo Training Ground Heavy Block Room", + "dungeon": "Gerudo Training Ground", + "locations": { + "Gerudo Training Ground Before Heavy Block Chest": "True" + }, + "exits": { + "Gerudo Training Ground Eye Statue Upper": " + (logic_lens_gtg or can_use(Lens_of_Truth)) and + (can_use(Hookshot) or (logic_gtg_fake_wall and can_use(Hover_Boots)))", + "Gerudo Training Ground Like Like Room": " + can_use(Silver_Gauntlets) and (logic_lens_gtg or can_use(Lens_of_Truth)) and + (can_use(Hookshot) or (logic_gtg_fake_wall and can_use(Hover_Boots)))" + } + }, + { + "region_name": "Gerudo Training Ground Like Like Room", + "dungeon": "Gerudo Training Ground", + "locations": { + "Gerudo Training Ground Heavy Block First Chest": "True", + "Gerudo Training Ground Heavy Block Second Chest": "True", + "Gerudo Training Ground Heavy Block Third Chest": "True", + "Gerudo Training Ground Heavy Block Fourth Chest": "True" + } + } +] diff --git a/worlds/oot/data/World/Gerudo Training Grounds MQ.json b/worlds/oot/data/World/Gerudo Training Grounds MQ.json deleted file mode 100644 index 34dc2f2f3d..0000000000 --- a/worlds/oot/data/World/Gerudo Training Grounds MQ.json +++ /dev/null @@ -1,98 +0,0 @@ -[ - { - "region_name": "Gerudo Training Grounds Lobby", - "dungeon": "Gerudo Training Grounds", - "locations": { - "Gerudo Training Grounds MQ Lobby Left Chest": "True", - "Gerudo Training Grounds MQ Lobby Right Chest": "True", - "Gerudo Training Grounds MQ Hidden Ceiling Chest": "logic_lens_gtg_mq or can_use(Lens_of_Truth)", - "Gerudo Training Grounds MQ Maze Path First Chest": "True", - "Gerudo Training Grounds MQ Maze Path Second Chest": "True", - "Gerudo Training Grounds MQ Maze Path Third Chest": "(Small_Key_Gerudo_Training_Grounds, 1)" - }, - "exits": { - "Gerudo Fortress": "True", - "Gerudo Training Grounds Left Side": "here(has_fire_source)", - "Gerudo Training Grounds Right Side": "here(can_use(Bow) or can_use(Slingshot))" - } - }, - { - "region_name": "Gerudo Training Grounds Right Side", - "dungeon": "Gerudo Training Grounds", - "locations": { - "Gerudo Training Grounds MQ Dinolfos Chest": "is_adult", - "Wall Fairy": "has_bottle and can_use(Bow)" #in the Dinalfos room shoot the Gerudo symbol above the door to the lava room. - }, - "exits": { - # Still requires has_fire_source in the room - "Gerudo Training Grounds Underwater": " - (Bow or can_use(Longshot)) and can_use(Hover_Boots)" - } - }, - { - "region_name": "Gerudo Training Grounds Underwater", - "dungeon": "Gerudo Training Grounds", - "locations": { - "Gerudo Training Grounds MQ Underwater Silver Rupee Chest": " - has_fire_source and can_use(Iron_Boots) and - (logic_fewer_tunic_requirements or can_use(Zora_Tunic)) and can_take_damage" - } - }, - { - "region_name": "Gerudo Training Grounds Left Side", - "dungeon": "Gerudo Training Grounds", - "locations": { - "Gerudo Training Grounds MQ First Iron Knuckle Chest": "is_adult or Kokiri_Sword or has_explosives" - }, - "exits": { - "Gerudo Training Grounds Stalfos Room": " - can_use(Longshot) or logic_gtg_mq_without_hookshot or - (logic_gtg_mq_with_hookshot and can_use(Hookshot))" - } - }, - { - "region_name": "Gerudo Training Grounds Stalfos Room", - "dungeon": "Gerudo Training Grounds", - "locations": { - # Very difficult to fight the Stalfos and Stulltulas under the time limit as child. - "Gerudo Training Grounds MQ Before Heavy Block Chest": "is_adult", - "Gerudo Training Grounds MQ Heavy Block Chest": "can_use(Silver_Gauntlets)", - "Blue Fire": "has_bottle" - }, - "exits": { - "Gerudo Training Grounds Back Areas": " - is_adult and (logic_lens_gtg_mq or can_use(Lens_of_Truth)) and Blue_Fire and - (can_play(Song_of_Time) or (logic_gtg_fake_wall and can_use(Hover_Boots)))" - } - }, - { - "region_name": "Gerudo Training Grounds Back Areas", - "dungeon": "Gerudo Training Grounds", - "locations": { - "Gerudo Training Grounds MQ Eye Statue Chest": "Bow", - "Gerudo Training Grounds MQ Second Iron Knuckle Chest": "True", - "Gerudo Training Grounds MQ Flame Circle Chest": "can_use(Hookshot) or Bow or has_explosives" - }, - "exits": { - "Gerudo Training Grounds Central Maze Right": "Megaton_Hammer", - "Gerudo Training Grounds Right Side": "can_use(Longshot)" - } - }, - { - "region_name": "Gerudo Training Grounds Central Maze Right", - "dungeon": "Gerudo Training Grounds", - "locations": { - "Gerudo Training Grounds MQ Maze Right Central Chest": "True", - "Gerudo Training Grounds MQ Maze Right Side Chest": "True", - # The switch that opens the door to the Ice Arrows chest can be hit with a precise jumpslash. - "Gerudo Training Grounds MQ Ice Arrows Chest": " - (Small_Key_Gerudo_Training_Grounds, 3)" - }, - "exits": { - # guarantees fire with torch - "Gerudo Training Grounds Underwater": " - can_use(Longshot) or (can_use(Hookshot) and Bow)", - "Gerudo Training Grounds Right Side": "can_use(Hookshot)" - } - } -] diff --git a/worlds/oot/data/World/Gerudo Training Grounds.json b/worlds/oot/data/World/Gerudo Training Grounds.json deleted file mode 100644 index a5b4f940dd..0000000000 --- a/worlds/oot/data/World/Gerudo Training Grounds.json +++ /dev/null @@ -1,120 +0,0 @@ -[ - { - "region_name": "Gerudo Training Grounds Lobby", - "dungeon": "Gerudo Training Grounds", - "locations": { - "Gerudo Training Grounds Lobby Left Chest": "can_use(Bow) or can_use(Slingshot)", - "Gerudo Training Grounds Lobby Right Chest": "can_use(Bow) or can_use(Slingshot)", - "Gerudo Training Grounds Stalfos Chest": "is_adult or Kokiri_Sword", - "Gerudo Training Grounds Beamos Chest": "has_explosives and (is_adult or Kokiri_Sword)", - "Wall Fairy": "has_bottle and can_use(Bow)" #in the Beamos room shoot the Gerudo symbol above the door to the lava room. - }, - "exits": { - "Gerudo Fortress": "True", - "Gerudo Training Grounds Heavy Block Room": " - (is_adult or Kokiri_Sword) and - (can_use(Hookshot) or logic_gtg_without_hookshot)", - "Gerudo Training Grounds Lava Room": " - here(has_explosives and (is_adult or Kokiri_Sword))", - "Gerudo Training Grounds Central Maze": "True" - } - }, - { - "region_name": "Gerudo Training Grounds Central Maze", - "dungeon": "Gerudo Training Grounds", - "locations": { - "Gerudo Training Grounds Hidden Ceiling Chest": "(Small_Key_Gerudo_Training_Grounds, 3) and (logic_lens_gtg or can_use(Lens_of_Truth))", - "Gerudo Training Grounds Maze Path First Chest": "(Small_Key_Gerudo_Training_Grounds, 4)", - "Gerudo Training Grounds Maze Path Second Chest": "(Small_Key_Gerudo_Training_Grounds, 6)", - "Gerudo Training Grounds Maze Path Third Chest": "(Small_Key_Gerudo_Training_Grounds, 7)", - "Gerudo Training Grounds Maze Path Final Chest": "(Small_Key_Gerudo_Training_Grounds, 9)" - }, - "exits": { - "Gerudo Training Grounds Central Maze Right": "(Small_Key_Gerudo_Training_Grounds, 9)" - } - }, - { - "region_name": "Gerudo Training Grounds Central Maze Right", - "dungeon": "Gerudo Training Grounds", - "locations": { - "Gerudo Training Grounds Maze Right Central Chest": "True", - "Gerudo Training Grounds Maze Right Side Chest": "True", - "Gerudo Training Grounds Freestanding Key": "True" - }, - "exits": { - "Gerudo Training Grounds Hammer Room": "can_use(Hookshot)", - "Gerudo Training Grounds Lava Room": "True" - } - }, - { - "region_name": "Gerudo Training Grounds Lava Room", - "dungeon": "Gerudo Training Grounds", - "locations": { - "Gerudo Training Grounds Underwater Silver Rupee Chest": " - can_use(Hookshot) and can_play(Song_of_Time) and Iron_Boots and - (logic_fewer_tunic_requirements or can_use(Zora_Tunic))" - }, - "exits": { - "Gerudo Training Grounds Central Maze Right": "can_play(Song_of_Time) or is_child", - "Gerudo Training Grounds Hammer Room": " - can_use(Longshot) or (can_use(Hookshot) and can_use(Hover_Boots))" - } - }, - { - "region_name": "Gerudo Training Grounds Hammer Room", - "dungeon": "Gerudo Training Grounds", - "locations": { - "Gerudo Training Grounds Hammer Room Clear Chest": "True", - "Gerudo Training Grounds Hammer Room Switch Chest": "can_use(Megaton_Hammer)" - }, - "exits": { - "Gerudo Training Grounds Eye Statue Lower": "can_use(Megaton_Hammer) and Bow", - "Gerudo Training Grounds Lava Room": "True" - } - }, - { - "region_name": "Gerudo Training Grounds Eye Statue Lower", - "dungeon": "Gerudo Training Grounds", - "locations": { - "Gerudo Training Grounds Eye Statue Chest": "can_use(Bow)" - }, - "exits": { - "Gerudo Training Grounds Hammer Room": "True" - } - }, - { - "region_name": "Gerudo Training Grounds Eye Statue Upper", - "dungeon": "Gerudo Training Grounds", - "locations": { - "Gerudo Training Grounds Near Scarecrow Chest": "can_use(Bow)" - }, - "exits": { - "Gerudo Training Grounds Eye Statue Lower": "True" - } - }, - { - "region_name": "Gerudo Training Grounds Heavy Block Room", - "dungeon": "Gerudo Training Grounds", - "locations": { - "Gerudo Training Grounds Before Heavy Block Chest": "True" - }, - "exits": { - "Gerudo Training Grounds Eye Statue Upper": " - (logic_lens_gtg or can_use(Lens_of_Truth)) and - (can_use(Hookshot) or (logic_gtg_fake_wall and can_use(Hover_Boots)))", - "Gerudo Training Grounds Like Like Room": " - can_use(Silver_Gauntlets) and (logic_lens_gtg or can_use(Lens_of_Truth)) and - (can_use(Hookshot) or (logic_gtg_fake_wall and can_use(Hover_Boots)))" - } - }, - { - "region_name": "Gerudo Training Grounds Like Like Room", - "dungeon": "Gerudo Training Grounds", - "locations": { - "Gerudo Training Grounds Heavy Block First Chest": "True", - "Gerudo Training Grounds Heavy Block Second Chest": "True", - "Gerudo Training Grounds Heavy Block Third Chest": "True", - "Gerudo Training Grounds Heavy Block Fourth Chest": "True" - } - } -] diff --git a/worlds/oot/data/World/Overworld.json b/worlds/oot/data/World/Overworld.json index fa01ab6072..fca10a7a8b 100644 --- a/worlds/oot/data/World/Overworld.json +++ b/worlds/oot/data/World/Overworld.json @@ -589,14 +589,14 @@ Gerudo_Membership_Card and can_ride_epona and Bow and at_day", "GF HBA 1500 Points": " Gerudo_Membership_Card and can_ride_epona and Bow and at_day", - "GF North F1 Carpenter": "is_adult or Kokiri_Sword", - "GF North F2 Carpenter": " + "Hideout Jail Guard (1 Torch)": "is_adult or Kokiri_Sword", + "Hideout Jail Guard (2 Torches)": "is_adult or Kokiri_Sword", + "Hideout Jail Guard (3 Torches)": " (is_adult or Kokiri_Sword) and (Gerudo_Membership_Card or can_use(Bow) or can_use(Hookshot) or can_use(Hover_Boots) or logic_gerudo_kitchen)", - "GF South F1 Carpenter": "is_adult or Kokiri_Sword", - "GF South F2 Carpenter": "is_adult or Kokiri_Sword", - "GF Gerudo Membership Card": "can_finish_GerudoFortress", + "Hideout Jail Guard (4 Torches)": "is_adult or Kokiri_Sword", + "Hideout Gerudo Membership Card": "can_finish_GerudoFortress", "GF GS Archery Range": " can_use(Hookshot) and Gerudo_Membership_Card and at_night", "GF GS Top Floor": " @@ -607,7 +607,7 @@ "exits": { "GV Fortress Side": "True", "GF Outside Gate": "'GF Gate Open'", - "Gerudo Training Grounds Lobby": "Gerudo_Membership_Card and is_adult", + "Gerudo Training Ground Lobby": "Gerudo_Membership_Card and is_adult", "GF Storms Grotto": "is_adult and can_open_storm_grotto" # Not there as child } }, @@ -1290,7 +1290,7 @@ }, "exits": { "Graveyard Shield Grave": "is_adult or at_night", - "Graveyard Composers Grave": "can_play(Zeldas_Lullaby)", + "Graveyard Royal Familys Tomb": "can_play(Zeldas_Lullaby)", "Graveyard Heart Piece Grave": "is_adult or at_night", "Graveyard Dampes Grave": "is_adult", "Graveyard Dampes House": "is_adult or at_dampe_time", @@ -1321,12 +1321,12 @@ } }, { - "region_name": "Graveyard Composers Grave", - "pretty_name": "the Composers' Grave", - "scene": "Graveyard Composers Grave", + "region_name": "Graveyard Royal Familys Tomb", + "pretty_name": "the Royal Family's Tomb", + "scene": "Graveyard Royal Familys Tomb", "locations": { - "Graveyard Composers Grave Chest": "has_fire_source", - "Song from Composers Grave": " + "Graveyard Royal Familys Tomb Chest": "has_fire_source", + "Song from Royal Familys Tomb": " is_adult or (Slingshot or Boomerang or Sticks or has_explosives or Kokiri_Sword)" From e711490f6c017a330cdd207b4aadf7884972d540 Mon Sep 17 00:00:00 2001 From: espeon65536 Date: Sun, 1 May 2022 13:07:15 -0500 Subject: [PATCH 038/149] OoT: bump data version --- worlds/oot/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/worlds/oot/__init__.py b/worlds/oot/__init__.py index 9dcb21ae26..a9798c796d 100644 --- a/worlds/oot/__init__.py +++ b/worlds/oot/__init__.py @@ -81,7 +81,7 @@ class OOTWorld(World): remote_items: bool = False remote_start_inventory: bool = False - data_version = 1 + data_version = 2 required_client_version = (0, 3, 2) From c102d602b350ab2f242056509cf132e84236395b Mon Sep 17 00:00:00 2001 From: espeon65536 Date: Sun, 1 May 2022 13:27:53 -0500 Subject: [PATCH 039/149] OoT: update ASM to version 6.2 --- worlds/oot/Patches.py | 4 - worlds/oot/data/generated/rom_patch.txt | 24174 +++++++++++----------- worlds/oot/data/generated/symbols.json | 242 +- 3 files changed, 12332 insertions(+), 12088 deletions(-) diff --git a/worlds/oot/Patches.py b/worlds/oot/Patches.py index 29ae009219..bb1c588823 100644 --- a/worlds/oot/Patches.py +++ b/worlds/oot/Patches.py @@ -826,10 +826,6 @@ def patch_rom(world, rom): exit_table = generate_exit_lookup_table() - if world.entrance_shuffle: - # Disable the fog state entirely to avoid fog glitches - rom.write_byte(rom.sym('NO_FOG_STATE'), 1) - if world.disable_trade_revert: # Disable trade quest timers and prevent trade items from ever reverting rom.write_byte(rom.sym('DISABLE_TIMERS'), 0x01) diff --git a/worlds/oot/data/generated/rom_patch.txt b/worlds/oot/data/generated/rom_patch.txt index 78e8e76f98..67225a5842 100644 --- a/worlds/oot/data/generated/rom_patch.txt +++ b/worlds/oot/data/generated/rom_patch.txt @@ -1,7 +1,7 @@ -10,107b723a -14,b03a17fc +10,107b6b3a +14,36f34be0 d1b0,3480000 -d1b4,348ef80 +d1b4,348f310 d1b8,3480000 d1c0,0 d1c4,0 @@ -186,23 +186,23 @@ d288,0 89ebe8,0 89ebec,0 89ebf0,0 -a88f78,c102366 -a89048,c10237f -a98c30,c1003c6 -a9e838,810077c -ac7ad4,c100346 +a88f78,c1023a6 +a89048,c1023bf +a98c30,c1003c5 +a9e838,810077b +ac7ad4,c100345 ac8608,902025 ac860c,848e00a4 ac8610,34010043 ac8614,0 ac8618,0 ac91b4,0 -ac9abc,c100407 +ac9abc,c100406 ac9ac0,0 -accd34,c1004c1 +accd34,c1004c0 accd38,8e190000 -accde0,c101b73 -acce18,c1008d6 +accde0,c101ba4 +acce18,c1008d5 acce1c,8e0200a4 acce20,1060001e acce24,0 @@ -211,7 +211,7 @@ acce2c,0 acce34,0 acce38,0 acce3c,0 -acce88,c101a37 +acce88,c101a68 acce8c,34040001 acce90,0 acce94,0 @@ -229,45 +229,45 @@ adaa78,0 adaba8,0 adabcc,0 adabe4,0 -ae5764,81006a2 +ae5764,81006a1 ae5768,0 -ae59e0,81006be -ae5df8,c1003ff +ae59e0,81006bd +ae5df8,c1003fe ae5e04,0 ae74d8,340e0000 ae807c,6010007 ae8080,84b80030 -ae8084,c100b2d +ae8084,c100b23 ae8088,0 ae8090,0 ae8094,0 ae8098,0 -ae986c,8100b0d +ae986c,8100b03 ae9870,3c01800f ae9ed8,35ee0000 -aeb67c,c1009b3 +aeb67c,c1009b2 aeb680,0 aeb764,26380008 aeb768,ae9802b0 -aeb76c,c101daf +aeb76c,c101de0 aeb778,400821 -af1814,c100e6e +af1814,c100e64 af1818,0 af74f8,afbf0044 -af74fc,c100a3e +af74fc,c100a34 af7500,0 af7504,8fbf0044 af7650,afbf0034 -af7654,c100a4c +af7654,c100a42 af7658,0 af765c,8fbf0034 af76b8,afbf000c -af76bc,c100a33 +af76bc,c100a29 af76c4,8fbf000c b06400,820f0ede b0640c,31f80002 b06bb8,34190000 -b06c2c,c1007bd +b06c2c,c1007bc b06c30,a2280020 b10218,afa40020 b1021c,30a8fffe @@ -319,22 +319,23 @@ b10320,242983fc b10324,242a82c4 b10328,242b83e4 b1032c,242c83d8 -b10cc0,c1004a9 +b10cc0,c1004a8 b10cc4,3c010001 -b12a34,c100655 +b12a34,c100654 b12a38,0 -b12a60,8101f93 -b12e44,8101fa2 +b12a60,8101fc2 +b12e30,c101fd3 +b12e44,8101fe2 b17bb4,afbf001c b17bb8,afa40140 b17bbc,3c048040 -b17bc0,3406ef80 +b17bc0,3406f310 b17bc4,c00037c b17bc8,3c050348 -b17bcc,c100339 +b17bcc,c100338 b17bd0,0 b17bd4,0 -b2b488,c100bf8 +b2b488,c100bee b2b48c,0 b2b490,0 b2b494,0 @@ -343,7 +344,7 @@ b2b49c,0 b2b4f0,3c048013 b2b4f4,24848a50 b2b4f8,3c058040 -b2b4fc,24a52fc0 +b2b4fc,24a52f98 b2b500,c015c0c b2b504,34060018 b2b508,3c048013 @@ -364,53 +365,53 @@ b2e830,8ca5b188 b2e854,3c058001 b2e858,8ca5b198 b3dd3c,3c018040 -b3dd40,8c242fd8 +b3dd40,8c242fb0 b3dd44,c02e195 -b3dd48,8c252fdc +b3dd48,8c252fb4 b3dd4c,8fbf0014 b3dd54,27bd0018 -b51694,c1007d0 -b516c4,c1007d7 -b52784,c1007f1 +b51694,c1007cf +b516c4,c1007d6 +b52784,c1007f0 b52788,0 b5278c,8fbf003c b5293c,10000018 -b54b38,c10076b -b54e5c,c100758 +b54b38,c10076a +b54e5c,c100757 b55428,a42063ed -b55a64,c1007a2 +b55a64,c1007a1 b575c8,acae0000 b58320,afbf0000 -b58324,c1009f8 +b58324,c1009ee b58328,0 b5832c,8fbf0000 b58330,0 b7ec4c,8009a3ac -ba16ac,c100ce2 +ba16ac,c100cd8 ba16b0,a42fca2a -ba16e0,c100ced +ba16e0,c100ce3 ba16e4,a439ca2a ba18c4,340c00c8 ba1980,340800c8 ba19dc,0 -ba1c68,c100cf8 +ba1c68,c100cee ba1c6c,a42dca2a ba1c70,850e4a38 -ba1cd0,c100d03 +ba1cd0,c100cf9 ba1cd4,a439ca2a -ba1d04,c100d0e +ba1d04,c100d04 ba1d08,0 ba1e20,340d00c8 -ba32cc,c100d19 +ba32cc,c100d0f ba32d0,a439ca2a -ba3300,c100d24 +ba3300,c100d1a ba3304,a42bca2a ba34dc,341800c8 ba3654,0 ba39d0,340d00c8 -baa168,c100ccc +baa168,c100cc2 baa16c,a42eca2a -baa198,c100cd7 +baa198,c100ccd baa19c,a42dca2a baa3ac,a07025 bac064,7821 @@ -421,10 +422,10 @@ bae5a4,a46b4a6c bae5c8,0 bae864,0 baed6c,0 -baf4f4,c100d2f +baf4f4,c100d25 baf4f8,2002025 baf738,102825 -baf73c,c101877 +baf73c,c101848 baf740,330400ff baf744,8fb00018 baf748,8fbf001c @@ -456,91 +457,92 @@ bb6134,0 bb6138,0 bb61e0,0 bb61e4,0 -bb6688,c100664 +bb6688,c100663 bb668c,0 -bb67c4,c100664 +bb67c4,c100663 bb67c8,1826021 -bb6cf0,c100693 +bb6cf0,c100692 bb6cf4,0 bb77b4,0 bb7894,0 bb7ba0,0 bb7bfc,0 -bb7c88,c10065e +bb7c88,c10065d bb7c8c,1cf8821 -bb7d10,c10065e +bb7d10,c10065d bb7d14,0 -bc088c,c100671 +bc088c,c100670 bc0890,0 -bcdbd8,c100d41 -bcecbc,8100377 +bcdbd8,c100d37 +bcecbc,8100376 bcecc0,0 bcecc4,0 bcecc8,0 bceccc,0 bcecd0,0 bcf73c,afbf0000 -bcf740,c10080f +bcf740,c10080e bcf744,0 bcf748,8fbf0000 -bcf914,c100807 +bcf914,c100806 bcf918,0 -bd4c58,c100ba1 +bd4c58,c100b97 bd4c5c,270821 -bd5c58,c1005c0 +bd5c58,c1005bf bd5c5c,301c825 -bd6958,c100a29 +bd6958,c100a1f bd695c,0 -bd9a04,c1009d9 +bd9a04,c1009cf bd9a08,0 -bda0a0,c10034a -bda0d8,c100367 +bda0a0,c100349 +bda0d8,c100366 bda0e4,0 -bda264,c10036a +bda264,c100369 bda270,0 -bda2e8,c100385 +bda2e8,c100384 bda2ec,812a0002 bda2f0,5600018 bda2f4,0 -be1bc8,c1005d1 +be1bc8,c1005d0 be1bcc,afa50034 be1c98,3c014218 -be4a14,c100e1c -be4a40,c100e36 -be4a60,8100e4e +be4a14,c100e12 +be4a40,c100e2c +be4a60,8100e44 be4a64,0 -be5d8c,c100e78 +be5d8c,c100e6e be5d90,0 -be9ac0,c1003a1 -be9ad8,c1003ac +be9ac0,c1003a0 +be9ad8,c1003ab be9adc,8fa20024 be9ae4,8fa40028 be9bdc,24018383 -bea044,c100485 +bea044,c100484 bea048,0 -c004ec,81005fa +c004ec,81005f9 c0067c,28610064 c0082c,340e0018 c00830,8c4f00a0 -c01078,c100844 +c01078,c100843 c0107c,0 c01080,0 c01084,0 c01088,0 c0108c,0 -c018a0,c10060f -c064bc,c1009bd -c06e5c,c1009bd -c0722c,c1009bd -c07230,add80008 -c07494,c1009bd -c075a8,c1009c8 -c07648,c1009c8 -c0e77c,c1007b7 +c018a0,c10060e +c06198,c1009bc +c064bc,920201ec +c06e5c,920201ec +c07230,920201ec +c07494,920201ec +c075a8,931901ed +c07648,931901ed +c0796c,1f0 +c0e77c,c1007b6 c0e780,ac400428 -c5a9f0,c100cc7 -c6c7a8,c10061f -c6c920,c10061f +c5a9f0,c100cbd +c6c7a8,c10061e +c6c920,c10061e c6cedc,340b0001 c6ed84,946f00a2 c6ed88,31f80018 @@ -550,7 +552,7 @@ c6ff38,4600848d c6ff3c,44069000 c6ff44,27bdffe8 c6ff48,afbf0004 -c6ff4c,c100a04 +c6ff4c,c1009fa c6ff50,0 c6ff54,8fbf0004 c6ff58,27bd0018 @@ -561,7 +563,7 @@ c6ff68,0 c6ff6c,0 c6ff70,0 c6ff74,0 -c72c64,c100bdf +c72c64,c100bd5 c72c68,2002021 c72c70,15e00006 c72c74,0 @@ -575,32 +577,32 @@ c7bd08,0 c82550,0 c892dc,340e0001 c8931c,340a0001 -c89744,c1003d3 +c89744,c1003d2 c89868,920e1d28 c898a4,92191d29 c898c8,920a1d2a -c8b24c,c100504 +c8b24c,c100503 c8b250,2002025 -ca6dc0,81023a1 +ca6dc0,81023e1 ca6dc4,0 -cb6874,c10069c -cc0038,c100465 +cb6874,c10069b +cc0038,c100464 cc003c,8fa40018 cc3fa8,a20101f8 cc4024,0 -cc4038,c1009a2 +cc4038,c1009a1 cc403c,240c0004 cc453c,806 -cc8594,c1005e4 +cc8594,c1005e3 cc8598,24180006 -cc85b8,c100e01 +cc85b8,c100df7 cc85bc,afa50064 -cce9a4,c100ec0 +cce9a4,c100eb6 cce9a8,8e04011c cdf3ec,0 cdf404,0 -cdf420,c1005b4 -cdf638,c1005c8 +cdf420,c1005b3 +cdf638,c1005c7 cdf63c,e7a40034 cdf790,2405001e cf1ab8,0 @@ -609,44 +611,44 @@ cf1ac0,31280040 cf1ac4,35390040 cf1ac8,af19b4a8 cf1acc,34090006 -cf73c8,c100bb9 +cf73c8,c100baf cf73cc,3c010001 -cf7ad4,c1005ae +cf7ad4,c1005ad cf7ad8,afa50044 d12f78,340f0000 -d357d4,c100b1b +d357d4,c100b11 d35efc,0 d35f54,10000008 -d4bcb0,c100ddc +d4bcb0,c100dd2 d4bcb4,8619001c -d4be6c,c100986 -d52698,c1004e0 +d4be6c,c100985 +d52698,c1004df d5269c,8e190024 -d5b264,c100aa9 -d5b660,8100aac +d5b264,c100a9f +d5b660,8100aa2 d5b664,0 -d5ff94,c100eb6 +d5ff94,c100eac d5ff98,44d9f800 -d62100,c100c69 +d62100,c100c5f d62110,3c014248 d62128,0 d6215c,0 -d621cc,c100c77 +d621cc,c100c6d d621dc,3c014248 d6221c,0 -d68d68,c100c21 +d68d68,c100c17 d68d6c,afb20044 d68d70,3c098040 -d68d74,2529307c +d68d74,25293054 d68d78,81290000 d68d7c,11200186 d68d80,8fbf004c -d68d84,c100c35 +d68d84,c100c2b d68d88,f7b80030 -d69c80,c100c3d -d6cc18,c100cbf +d69c80,c100c33 +d6cc18,c100cb5 d6cc1c,0 -d6cdd4,c100cc3 +d6cdd4,c100cb9 d6cdd8,0 d73118,0 d73128,0 @@ -713,34 +715,34 @@ d7e8d4,340e0001 d7e8d8,804f0ede d7e8e0,5700000f d7eb4c,0 -d7eb70,c100d5e +d7eb70,c100d54 d7eb74,acc80004 d7ebbc,0 -d7ebc8,c100d66 +d7ebc8,c100d5c d7ebf0,27bdffe8 d7ebf4,afbf0014 -d7ebf8,c100d71 +d7ebf8,c100d67 d7ebfc,8ca21c44 d7ec04,0 -d7ec10,c100d75 +d7ec10,c100d6b d7ec14,971804c6 d7ec2c,0 -d7ec34,c100d8c +d7ec34,c100d82 d7ec40,0 d7ec54,0 -d7ec60,8100d7e -d7ec70,8100da4 +d7ec60,8100d74 +d7ec70,8100d9a db13d0,24090076 -db532c,c100435 -db53e8,81023d3 +db532c,c100434 +db53e8,8102413 db53ec,0 dbec80,34020000 -dbf428,c1007f9 +dbf428,c1007f8 dbf434,44989000 dbf438,e652019c dbf484,0 dbf4a8,0 -dc7090,c100819 +dc7090,c100818 dc7094,c60a0198 dc87a0,0 dc87bc,0 @@ -760,7 +762,7 @@ dd3754,3c064000 dd375c,3c074000 dd3760,0 dd3764,0 -de1018,c1023ec +de1018,c10242c de101c,0 de1020,0 de1024,0 @@ -770,20 +772,20 @@ de1030,0 de1034,0 de1038,0 de103c,0 -de1050,81023ec +de1050,810242c de1054,0 df2644,76 df7a90,340e0018 df7a94,8c4f00a0 -df7cb0,c10063f +df7cb0,c10063e dfec3c,3c188012 dfec40,8f18ae8c dfec48,33190010 dfec4c,0 e09f68,806f0ede e09f74,31f80004 -e09fb0,c100422 -e0ec50,c100c0f +e09fb0,c100421 +e0ec50,c100c05 e0ec54,2202825 e11e98,9442a674 e11e9c,304e0040 @@ -798,35 +800,35 @@ e11ebc,0 e11ec0,0 e11ec4,0 e11ec8,0 -e11f90,c1004eb +e11f90,c1004ea e11f94,0 -e12a04,c100e55 +e12a04,c100e4b e12a20,ac8302a4 e1f72c,27bdffe8 e1f730,afbf0014 -e1f734,c100e9a +e1f734,c100e90 e1f738,0 e1f73c,8fbf0014 e1f740,27bd0018 e1f744,28410005 e1f748,14200012 e1f74c,24010005 -e1feac,c100eac +e1feac,c100ea2 e1feb0,3c0743cf -e20410,c100b47 +e20410,c100b3d e20414,0 -e206dc,c100b55 +e206dc,c100b4b e206e0,0 -e2076c,c100b65 +e2076c,c100b5b e20770,afa40020 -e20798,c100b5d +e20798,c100b53 e2079c,0 -e24e7c,c1004b8 +e24e7c,c1004b7 e24e80,0 -e29388,8100443 -e2a044,c10044c -e2b0b4,c100454 -e2b434,c100857 +e29388,8100442 +e2a044,c10044b +e2b0b4,c100453 +e2b434,c100856 e2b438,0 e2b43c,0 e2b440,0 @@ -838,28 +840,28 @@ e2b454,0 e2b458,0 e2b45c,0 e2b460,0 -e2c03c,c100979 +e2c03c,c100978 e2c040,2442a5d0 e2cc1c,3c058012 e2cc20,24a5a5d0 e2cc24,86080270 e2cc28,15000009 e2cc2c,90b9008a -e2d714,c100826 +e2d714,c100825 e2d71c,340900bf e2d720,0 -e2d890,c100835 +e2d890,c100834 e2d894,0 e2f090,34 -e429dc,c100559 +e429dc,c100558 e429e0,0 e429e4,10000053 e429e8,0 -e42b5c,c10053f +e42b5c,c10053e e42b64,1000000d e42b68,0 -e42c00,c100537 -e42c44,c1005a0 +e42c00,c100536 +e42c44,c10059f e42c48,860e008a e42c4c,15400045 e50888,340403e7 @@ -867,18 +869,37 @@ e55c4c,340c0000 e56290,0 e56294,340b401f e56298,0 -e565d0,c100c00 +e565d0,c100bf6 e565d4,0 e565d8,2002025 +e571d0,3c038041 +e571d4,906db5a4 +e571d8,340c0001 +e571dc,11ac0004 +e571e0,0 +e57208,3c038041 +e5720c,906db5a4 +e57210,340c0002 +e57214,11ac000d +e57218,0 +e5721c,0 +e57220,0 +e57224,0 +e57228,0 +e5722c,0 +e57230,0 +e57234,0 +e57238,0 +e5723c,0 e59cd4,0 e59cd8,0 -e59e68,8102425 +e59e68,8102465 e59e6c,0 -e59ecc,810244e +e59ecc,810248e e59ed0,0 -e5b2f4,c100e83 +e5b2f4,c100e79 e5b2f8,afa5001c -e5b538,c100e8f +e5b538,c100e85 e5b53c,3c07461c e62630,a48001f8 e62634,2463a5d0 @@ -934,7 +955,7 @@ e6befc,0 e6bf4c,340d0000 e6bf50,0 e7cc90,240e000c -e7d19c,c100d35 +e7d19c,c100d2b e7d1a0,3c050600 e7d1a4,10a80003 e7d1a8,3025 @@ -954,19 +975,19 @@ e9f5b0,3e00008 e9f5b4,0 e9f5b8,0 e9f5bc,0 -e9f678,c1004eb +e9f678,c1004ea e9f67c,0 -e9f7a8,c1004eb +e9f7a8,c1004ea e9f7ac,0 -ebb85c,c10062a +ebb85c,c100629 ebb864,14400012 ebb86c,10000014 -ec1120,c1004eb +ec1120,c1004ea ec1124,0 ec68bc,8fad002c ec68c0,340c000a ec68c4,a5ac0110 -ec68c8,c101b31 +ec68c8,c101b62 ec68cc,2002021 ec68d0,0 ec68d4,0 @@ -976,14 +997,14 @@ ec68e0,0 ec69ac,8fad002c ec69b0,340c000a ec69b4,a5ac0110 -ec69b8,c101b31 +ec69b8,c101b62 ec69bc,2002021 ec69c0,0 ec69c4,0 ec69c8,0 ec69cc,0 ec69d0,0 -ec6b04,81023ba +ec6b04,81023fa ec6b08,0 ec9ce4,2419007a ed2858,20180008 @@ -991,9 +1012,9 @@ ed2fac,806e0f18 ed2fec,340a0000 ed5a28,340e0018 ed5a2c,8ccf00a0 -ed645c,c100822 +ed645c,c100821 ed6460,0 -ee7b84,c100950 +ee7b84,c10094f ee7b8c,0 ee7b90,0 ee7b94,0 @@ -1001,19 +1022,19 @@ ee7b98,0 ee7b9c,0 ee7ba0,0 ee7ba4,0 -ee7e4c,c100a8f -ef32b8,c100a84 +ee7e4c,c100a85 +ef32b8,c100a7a ef32bc,0 ef32c0,8fbf003c -ef36e4,c100a5a +ef36e4,c100a50 ef36e8,0 -ef373c,c100a6c -ef4f98,c100795 +ef373c,c100a62 +ef4f98,c100794 ef4f9c,0 26c10e0,38ff 3480000,80400020 3480004,80400844 -3480008,80409fd4 +3480008,8040a314 3480020,3 3480034,dfdfdfdf 3480038,dfdfdfdf @@ -1546,12054 +1567,12279 @@ ef4f9c,0 3480888,100 3480cd0,640000 3480cd4,100 -3480ce4,27bdffe8 -3480ce8,afbf0010 -3480cec,c101f73 -3480cf4,3c028012 -3480cf8,2442d2a0 -3480cfc,240e0140 -3480d00,3c018010 -3480d04,ac2ee500 -3480d08,240f00f0 -3480d0c,8fbf0010 -3480d10,3e00008 -3480d14,27bd0018 -3480d18,3c088040 -3480d1c,ac4815d4 -3480d20,3e00008 -3480d24,340215c0 -3480d28,308400ff -3480d2c,3c088012 -3480d30,2508a5d0 -3480d34,3401008c -3480d38,10810016 -3480d3c,91020075 -3480d40,3401008d -3480d44,10810013 -3480d48,91020075 -3480d4c,10800011 -3480d50,91020074 -3480d54,3401008a -3480d58,1081000e -3480d5c,91020074 -3480d60,3401008b -3480d64,1081000b -3480d68,91020074 -3480d6c,34010058 -3480d70,10810008 -3480d74,34020000 -3480d78,34010078 -3480d7c,10810005 -3480d80,34020000 -3480d84,34010079 -3480d88,10810002 -3480d8c,34020000 -3480d90,340200ff -3480d94,3e00008 -3480d9c,8fa60030 -3480da0,810036d -3480da4,84c50004 -3480da8,8fb9002c -3480dac,810036d -3480db0,87250004 -3480db4,3c0a8041 -3480db8,254ab1e8 -3480dbc,8d4a0000 -3480dc0,11400004 -3480dc8,3c058041 -3480dcc,24a5b1dc -3480dd0,8ca50000 -3480dd4,3e00008 -3480ddc,3c088041 -3480de0,2508b1e8 -3480de4,8d080000 -3480de8,11000004 -3480df0,3c038041 -3480df4,2463b1d8 -3480df8,8c630000 -3480dfc,30fc3 -3480e00,614026 -3480e04,1014023 -3480e08,a0880852 -3480e0c,3e00008 -3480e14,3c088040 -3480e18,25080cd6 -3480e1c,91080000 -3480e20,1500000c -3480e24,240bffff -3480e28,3c088041 -3480e2c,2508b1e8 -3480e30,8d080000 -3480e34,11000007 -3480e38,1405821 -3480e3c,3c088041 -3480e40,2508b1d4 -3480e44,8d080000 -3480e48,15000002 -3480e4c,240bffff -3480e50,340b0001 -3480e54,5600009 -3480e5c,27bdffe8 -3480e60,afab0010 -3480e64,afbf0014 -3480e68,c01c508 -3480e70,8fab0010 -3480e74,8fbf0014 -3480e78,27bd0018 -3480e7c,3e00008 -3480e84,90450003 -3480e88,3c088041 -3480e8c,2508b1e8 -3480e90,8d080000 -3480e94,11000004 -3480e9c,3c058041 -3480ea0,24a5b1e0 -3480ea4,8ca50000 -3480ea8,3e00008 -3480eb0,27bdffe8 -3480eb4,afb00010 -3480eb8,afbf0014 -3480ebc,3c088041 -3480ec0,2508b1ec -3480ec4,8d080000 -3480ec8,31080001 -3480ecc,1500000b -3480ed0,34100041 -3480ed4,3c048041 -3480ed8,2484b1e8 -3480edc,8c840000 -3480ee0,10800006 -3480ee4,90500000 -3480ee8,3c088041 -3480eec,2508b1e4 -3480ef0,8d100000 -3480ef4,c101eca -3480efc,c101a84 -3480f04,2002821 -3480f08,8fb00010 -3480f0c,8fbf0014 -3480f10,3e00008 -3480f14,27bd0018 -3480f18,27bdffe0 -3480f1c,afa70010 -3480f20,afa20014 -3480f24,afa30018 -3480f28,afbf001c -3480f2c,c101af5 -3480f30,e02821 -3480f34,8fa70010 -3480f38,8fa20014 -3480f3c,8fa30018 -3480f40,8fbf001c -3480f44,3e00008 -3480f48,27bd0020 -3480f4c,27bdffe8 -3480f50,afbf0010 -3480f54,8c881d2c -3480f58,34090001 -3480f5c,94e00 -3480f60,1091024 -3480f64,10400021 -3480f6c,94ca02dc -3480f70,3c0b8012 -3480f74,256ba5d0 -3480f78,948c00a4 -3480f7c,3401003d -3480f80,1181000a -3480f88,8a6021 -3480f8c,918d1d28 -3480f90,15a00014 -3480f98,340d0001 -3480f9c,a18d1d28 -3480fa0,254a0013 -3480fa4,1000000a -3480fac,340c0001 -3480fb0,14c6004 -3480fb4,916d0ef2 -3480fb8,1ac7024 -3480fbc,15c00009 -3480fc4,1ac7025 -3480fc8,a16e0ef2 -3480fcc,254a0010 -3480fd0,1294827 -3480fd4,1094024 -3480fd8,ac881d2c -3480fdc,c101a37 -3480fe0,1402021 -3480fe4,c1024f2 -3480fec,8fbf0010 -3480ff0,34020000 -3480ff4,3e00008 -3480ff8,27bd0018 -3480ffc,27bdffe8 -3481000,afbf0010 -3481004,c101a37 -3481008,20e4ffc6 -348100c,340200ff -3481010,8fbf0010 -3481014,3e00008 -3481018,27bd0018 -348101c,27bdffe0 -3481020,afa10010 -3481024,afa30014 -3481028,afbf0018 -348102c,c101a37 -3481030,34040023 -3481034,8fa10010 -3481038,8fa30014 -348103c,8fbf0018 -3481040,3e00008 -3481044,27bd0020 -3481048,27bdffe0 -348104c,afa60010 -3481050,afa70014 -3481054,afbf0018 -3481058,3c018012 -348105c,2421a5d0 -3481060,80280ede -3481064,35080001 -3481068,a0280ede -348106c,c101a37 -3481070,34040027 -3481074,8fa60010 -3481078,8fa70014 -348107c,8fbf0018 -3481080,3e00008 -3481084,27bd0020 -3481088,27bdffe8 -348108c,afa30010 -3481090,afbf0014 -3481094,3c018012 -3481098,2421a5d0 -348109c,80280ede -34810a0,35080004 -34810a4,a0280ede -34810a8,3c188040 -34810ac,83180cd8 -34810b0,13000003 -34810b8,c101a37 -34810bc,34040029 -34810c0,240f0001 -34810c4,8fa30010 -34810c8,8fbf0014 -34810cc,3e00008 -34810d0,27bd0018 -34810d4,27bdffd8 -34810d8,afa40010 -34810dc,afa20014 -34810e0,afaf0018 -34810e4,afbf0020 -34810e8,c101a37 -34810ec,3404002a -34810f0,34050003 -34810f4,8fa40010 -34810f8,8fa20014 -34810fc,8faf0018 -3481100,8fbf0020 -3481104,3e00008 -3481108,27bd0028 -348110c,607821 -3481110,81ec0edf -3481114,318e0080 -3481118,11c00003 -348111c,34030005 -3481120,3e00008 -3481124,34020002 -3481128,3e00008 -348112c,601021 -3481130,85c200a4 -3481134,3c088012 -3481138,2508a5d0 -348113c,81090edf -3481140,35290080 -3481144,a1090edf -3481148,3e00008 -3481150,27bdfff0 -3481154,afbf0004 -3481158,c035886 -3481160,3c0c8012 -3481164,258ca5d0 -3481168,858d0f2e -348116c,8d980004 -3481170,13000002 -3481174,340e0001 -3481178,340e0002 -348117c,1ae6825 -3481180,a58d0f2e -3481184,8fbf0004 -3481188,27bd0010 -348118c,3e00008 -3481194,24090041 -3481198,27bdffe0 -348119c,afa80004 -34811a0,afa90008 -34811a4,afaa000c -34811a8,afac0010 -34811ac,3c0affff -34811b0,a5403 -34811b4,3c08801d -34811b8,850c894c -34811bc,118a0002 -34811c4,a500894c -34811c8,3c08801e -34811cc,810a887c -34811d0,11400009 -34811d8,3c090036 -34811dc,94c03 -34811e0,a109887c -34811e4,3c090002 -34811e8,94c03 -34811ec,a109895f -34811f0,3c08801f -34811f4,a1008d38 -34811f8,8fac0010 -34811fc,8faa000c -3481200,8fa90008 -3481204,8fa80004 -3481208,3e00008 -348120c,27bd0020 -3481214,3c0a8010 -3481218,254ae49c -348121c,8d4a0000 -3481220,1140001e -3481228,3c08801d -348122c,250884a0 -3481230,3c0b0001 -3481234,356b04c4 -3481238,10b4020 -348123c,85090000 -3481240,3c0b0002 -3481244,356b26cc -3481248,14b5020 -348124c,94840 -3481250,12a5021 -3481254,85490000 -3481258,a5091956 -348125c,3c0c801e -3481260,258c84a0 -3481264,34090003 -3481268,a1891e5e -348126c,34090014 -3481270,a1091951 -3481274,34090001 -3481278,3c018040 -348127c,a0291210 -3481280,3c088012 -3481284,2508a5d0 -3481288,850913d2 -348128c,11200003 -3481294,34090001 -3481298,a50913d4 -348129c,3e00008 -34812a4,3421241c -34812a8,3c0d8040 -34812ac,25ad1210 -34812b0,81a90000 -34812b4,11200008 -34812b8,862a00a4 -34812bc,340b005e -34812c0,114b0005 -34812c4,3c0c801e -34812c8,258c84a0 -34812cc,34090003 -34812d0,a1891e5e -34812d4,a1a00000 -34812d8,3e00008 -34812e0,3c02801d -34812e4,244284a0 -34812e8,3c010001 -34812ec,411020 -34812f0,3401047e -34812f4,a4411e1a -34812f8,34010014 -34812fc,3e00008 -3481300,a0411e15 -3481304,27bdffe8 -3481308,afbf0014 -348130c,afa40018 -3481310,8e190004 -3481314,17200015 -3481318,8e190000 -348131c,3c018010 -3481320,24219c90 -3481324,19c880 -3481328,3210820 -348132c,90210000 -3481330,34190052 -3481334,1721000d -3481338,8e190000 -348133c,960200a6 -3481340,304c0007 -3481344,398c0007 -3481348,15800008 -348134c,240400aa -3481350,c00a22d -3481358,14400004 -348135c,8e190000 -3481360,341900db -3481364,10000002 -3481368,ae190000 -348136c,340101e1 -3481370,8fbf0014 -3481374,8fa40018 -3481378,3e00008 -348137c,27bd0018 -3481380,3c088040 -3481384,81080cdf -3481388,11000005 -348138c,3c018012 -3481390,2421a5d0 -3481394,80280ed6 -3481398,35080001 -348139c,a0280ed6 -34813a0,34080000 -34813a4,3e00008 -34813a8,adf90000 -34813ac,3c0b801d -34813b0,256b84a0 -34813b4,856b00a4 -34813b8,340c005a -34813bc,156c0003 -34813c0,340b01a5 -34813c4,a42b1e1a -34813c8,1000000e -34813cc,3c0c8012 -34813d0,258ca5d0 -34813d4,8d8c0004 -34813d8,15800008 -34813dc,3c0b8040 -34813e0,816b0cdf -34813e4,11600007 -34813e8,842b1e1a -34813ec,340c01a5 -34813f0,116c0002 -34813f8,10000002 -34813fc,340b0129 -3481400,a42b1e1a -3481404,3e00008 -3481410,2202825 -3481414,3c0a801e -3481418,254aaa30 -348141c,c544002c -3481420,3c0bc43c -3481424,256b8000 -3481428,448b3000 -348142c,4606203c -3481434,45000026 -348143c,c5440024 -3481440,3c0bc28a -3481444,448b3000 -3481448,4606203c -3481450,4501001f -3481458,3c0b41c8 -348145c,448b3000 -3481460,4606203c -3481468,45000019 -3481470,3c098040 -3481474,2529140c -3481478,814b0424 -348147c,1160000e -3481480,812e0000 -3481484,340c007e -3481488,116c000b -3481490,15c00009 -3481494,340c0001 -3481498,a12c0000 -348149c,3c0dc1a0 -34814a0,ad4d0024 -34814a4,3c0d4120 -34814a8,ad4d0028 -34814ac,3c0dc446 -34814b0,25ad8000 -34814b4,ad4d002c -34814b8,11c00005 -34814c0,15600003 -34814c4,340d8000 -34814c8,a54d00b6 -34814cc,a1200000 -34814d0,3e00008 -34814dc,3c0a801e -34814e0,254aaa30 -34814e4,8d4b066c -34814e8,3c0cd000 -34814ec,258cffff -34814f0,16c5824 -34814f4,3e00008 -34814f8,ad4b066c -34814fc,27bdffe0 -3481500,afbf0014 -3481504,afa40018 -3481508,1c17825 -348150c,ac4f0680 -3481510,34040001 -3481514,c01b638 -348151c,3c088040 -3481520,81080cd8 -3481524,15000007 -348152c,3c04801d -3481530,248484a0 -3481534,3c058040 -3481538,80a50cd9 -348153c,c037500 -3481544,8fa40018 -3481548,8c880138 -348154c,8d090010 -3481550,252a03d4 -3481554,ac8a029c -3481558,8fbf0014 -348155c,3e00008 -3481560,27bd0020 -3481564,27bdffe0 -3481568,afbf0014 -348156c,afa40018 -3481570,3c088040 -3481574,81080cd8 -3481578,1500001a -3481580,3c09801e -3481584,2529887c -3481588,81280000 -348158c,340b0036 -3481590,150b001e -3481598,3c088040 -348159c,810814d8 -34815a0,1500001a -34815a8,34080001 -34815ac,3c018040 -34815b0,a02814d8 -34815b4,3c04801d -34815b8,248484a0 -34815bc,3c058040 -34815c0,90a50cda -34815c4,34060000 -34815c8,c037385 -34815d0,34044802 -34815d4,c0191bc -34815dc,10000025 -34815e4,3c04801d -34815e8,248484a0 -34815ec,34050065 -34815f0,c01bf73 -34815f8,34040032 -34815fc,c01b638 -3481604,1000000c -348160c,8fa40018 -3481610,3c05801d -3481614,24a584a0 -3481618,c008ab4 -3481620,10400014 -3481628,3c088040 -348162c,810814d8 -3481630,11000010 -3481638,8fa40018 -348163c,8c880138 -3481640,8d090010 -3481644,252a035c -3481648,ac8a029c -348164c,3c028012 -3481650,2442a5d0 -3481654,94490ee0 -3481658,352a0020 -348165c,a44a0ee0 -3481660,8c880004 -3481664,3c09ffff -3481668,2529ffff -348166c,1094024 -3481670,ac880004 -3481674,8fbf0014 -3481678,3e00008 -348167c,27bd0020 -3481680,860f00b6 -3481684,9739b4ae -3481688,3c09801e -348168c,2529aa30 -3481690,812a0424 -3481694,11400004 -348169c,3409007e -34816a0,15490003 -34816a8,3e00008 -34816ac,340a0000 -34816b0,3e00008 -34816b4,340a0001 -34816b8,8c8e0134 -34816bc,15c00002 -34816c0,3c0e4480 -34816c4,ac8e0024 -34816c8,3e00008 -34816cc,8fae0044 -34816d0,260501a4 -34816d4,27bdffe0 -34816d8,afbf0014 -34816dc,afa50018 -34816e0,8625001c -34816e4,52a03 -34816e8,c008134 -34816ec,30a5003f -34816f0,8fa50018 -34816f4,8fbf0014 -34816f8,3e00008 -34816fc,27bd0020 -3481700,ae19066c -3481704,8e0a0428 -3481708,3c09801e -348170c,2529aa30 -3481710,854b00b6 -3481714,216b8000 -3481718,3e00008 -348171c,a52b00b6 -3481720,3c08801e -3481724,2508aa30 -3481728,810a0434 -348172c,340b0008 -3481730,154b0002 -3481734,34090007 -3481738,a1090434 -348173c,3e00008 -3481740,c606000c -3481744,3c08801e -3481748,2508aa30 -348174c,8d0901ac -3481750,3c0a0400 -3481754,254a2f98 -3481758,152a000b -348175c,8d0b01bc -3481760,3c0c42cf -3481764,156c0003 -3481768,3c0d4364 -348176c,10000006 -3481770,ad0d01bc -3481774,3c0c4379 -3481778,156c0003 -348177c,3c09803b -3481780,2529967c -3481784,ad090664 -3481788,3e00008 -348178c,260501a4 -3481790,a498017c -3481794,3c08801d -3481798,250884a0 -348179c,850900a4 -34817a0,340a0002 -34817a4,152a000e -34817a8,8c890138 -34817ac,8d290010 -34817b0,252a3398 -34817b4,ac8a0184 -34817b8,340b0001 -34817bc,a48b017c -34817c0,27bdffe8 -34817c4,afbf0014 -34817c8,3c053dcd -34817cc,24a5cccd -34817d0,c0083e2 -34817d8,8fbf0014 -34817dc,27bd0018 -34817e0,3e00008 -34817e8,948e001c -34817ec,21cdffce -34817f0,5a00010 -34817f4,34020000 -34817f8,31a90007 -34817fc,340a0001 -3481800,12a5004 -3481804,d48c2 -3481808,3c0c8012 -348180c,258ca5d0 -3481810,1896020 -3481814,918b05b4 -3481818,16a5824 -348181c,34020000 -3481820,11600004 -3481828,340d0026 -348182c,a48d001c -3481830,34020001 -3481834,3e00008 -348183c,94ae001c -3481840,21cdffce -3481844,5a0000b -3481848,34020000 -348184c,31a90007 -3481850,340a0001 -3481854,12a5004 -3481858,d48c2 -348185c,3c0c8012 -3481860,258ca5d0 -3481864,1896020 -3481868,918b05b4 -348186c,16a5825 -3481870,a18b05b4 -3481874,3e00008 -348187c,27bdfff0 -3481880,afbf0008 -3481884,28810032 -3481888,10200003 -348188c,801021 -3481890,320f809 -3481898,8fbf0008 -348189c,27bd0010 -34818a0,3e00008 -34818a8,3c08801d -34818ac,250884a0 -34818b0,3c098012 -34818b4,2529a5d0 -34818b8,950a00a4 -34818bc,3401003e -34818c0,15410002 -34818c4,912b1397 -34818c8,216aff2a -34818cc,960b001c -34818d0,216b0001 -34818d4,340c0001 -34818d8,16c6004 -34818dc,3401001c -34818e0,1410018 -34818e4,6812 -34818e8,12d7020 -34818ec,8dcf00e4 -34818f0,18f1024 -34818f4,3e00008 -34818fc,3c08801d -3481900,250884a0 -3481904,3c098012 -3481908,2529a5d0 -348190c,950a00a4 -3481910,3401003e -3481914,15410002 -3481918,912b1397 -348191c,216aff2a -3481920,848b001c -3481924,216b0001 -3481928,340c0001 -348192c,16c6004 -3481930,3401001c -3481934,1410018 -3481938,6812 -348193c,12d7020 -3481940,8dcf00e4 -3481944,18f7825 -3481948,adcf00e4 -348194c,3e00008 -3481954,27bdffe8 -3481958,afbf0010 -348195c,c101f82 -3481964,8fbf0010 -3481968,27bd0018 -348196c,8fae0018 -3481970,3e00008 -3481974,3c018010 -3481978,340100ff -348197c,15210002 -3481980,92220000 -3481984,340200ff -3481988,3e00008 -348198c,34010009 -3481990,27bdffe8 -3481994,afa20010 -3481998,afbf0014 -348199c,c100688 -34819a4,14400002 -34819a8,91830000 -34819ac,340300ff -34819b0,8fa20010 -34819b4,8fbf0014 -34819b8,27bd0018 -34819bc,3e00008 -34819c0,34010009 -34819c4,27bdffe8 -34819c8,afa20010 -34819cc,afbf0014 -34819d0,960201e8 -34819d4,34010003 -34819d8,14410007 -34819e0,c100688 -34819e8,14400007 -34819f0,10000005 -34819f4,3403007a -34819f8,3401017a -34819fc,14610002 -3481a04,3403007a -3481a08,36280 -3481a0c,18d2821 -3481a10,8fa20010 -3481a14,8fbf0014 -3481a18,3e00008 -3481a1c,27bd0018 -3481a20,27bdfff0 -3481a24,afbf0000 -3481a28,afa30004 -3481a2c,afa40008 -3481a30,c101faf -3481a38,8fbf0000 -3481a3c,8fa30004 -3481a40,8fa40008 -3481a44,3e00008 -3481a48,27bd0010 -3481a4c,6d7024 -3481a50,15c00002 -3481a54,91ec0000 -3481a58,27ff003c -3481a5c,3e00008 -3481a70,3c088012 -3481a74,2508a5d0 -3481a78,8509009c -3481a7c,352a0002 -3481a80,3e00008 -3481a84,a50a009c -3481a88,3c058012 -3481a8c,24a5a5d0 -3481a90,3c088040 -3481a94,25081a64 -3481a98,8ca90068 -3481a9c,ad090000 -3481aa0,8ca9006c -3481aa4,ad090004 -3481aa8,94a90070 -3481aac,a5090008 -3481ab0,94a9009c -3481ab4,a509000a -3481ab8,340807e4 -3481abc,1054021 -3481ac0,34090e64 -3481ac4,1254821 -3481ac8,340a0008 -3481acc,8d0b0000 -3481ad0,8d2c0000 -3481ad4,ad2b0000 -3481ad8,ad0c0000 -3481adc,2508001c -3481ae0,25290004 -3481ae4,254affff -3481ae8,1d40fff8 -3481af0,801be03 -3481af8,27bdffe0 -3481afc,afb00010 -3481b00,afb10014 -3481b04,afbf0018 -3481b08,3c108012 -3481b0c,2610a5d0 -3481b10,3c118040 -3481b14,26311a64 -3481b18,8e080004 -3481b1c,11000005 -3481b24,c1006e8 -3481b2c,10000003 -3481b34,c1006fb -3481b3c,c1006db -3481b40,34040000 -3481b44,c1006db -3481b48,34040001 -3481b4c,c1006db -3481b50,34040002 -3481b54,8fb00010 -3481b58,8fb10014 -3481b5c,8fbf0018 -3481b60,27bd0020 -3481b64,3e00008 -3481b6c,2044021 -3481b70,9109006c -3481b74,340100ff -3481b78,11210007 -3481b80,2094821 -3481b84,91290074 -3481b88,3401002c -3481b8c,11210002 -3481b94,a1090069 -3481b98,3e00008 -3481ba0,27bdffe8 -3481ba4,afbf0010 -3481ba8,8e280000 -3481bac,ae080040 -3481bb0,8e280004 -3481bb4,ae080044 -3481bb8,96280008 -3481bbc,a6080048 -3481bc0,a2000f33 -3481bc4,9208004a -3481bc8,340100ff -3481bcc,15010003 -3481bd4,c10070e -3481bdc,8fbf0010 -3481be0,27bd0018 -3481be4,3e00008 -3481bec,8e080040 -3481bf0,ae080068 -3481bf4,8e080044 -3481bf8,ae08006c -3481bfc,96080048 -3481c00,9209009d -3481c04,31290020 -3481c08,15200002 -3481c10,3108ffdf -3481c14,a6080070 -3481c18,92080068 -3481c1c,340100ff -3481c20,15010003 -3481c28,34080001 -3481c2c,a2080f33 -3481c30,3e00008 -3481c38,27bdffe8 -3481c3c,afbf0010 -3481c40,9608009c -3481c44,31080040 -3481c48,11000005 -3481c50,96080070 -3481c54,3108ff0f -3481c58,35080030 -3481c5c,a6080070 -3481c60,92280001 -3481c64,a2080069 -3481c68,96280002 -3481c6c,a608006a -3481c70,8e280004 -3481c74,ae08006c -3481c78,c100728 -3481c7c,34040000 -3481c80,c100728 -3481c84,34040001 -3481c88,c100728 -3481c8c,34040002 -3481c90,8fbf0010 -3481c94,27bd0018 -3481c98,3e00008 -3481ca0,2044021 -3481ca4,3c098040 -3481ca8,25291d48 -3481cac,910a006c -3481cb0,340100ff -3481cb4,11410005 -3481cbc,12a4821 -3481cc0,91290000 -3481cc4,1520001c -3481ccc,3c098040 -3481cd0,25291d3f -3481cd4,25290001 -3481cd8,912a0000 -3481cdc,11400013 -3481ce4,20a5821 -3481ce8,916b0074 -3481cec,340100ff -3481cf0,1161fff8 -3481cf8,920c006c -3481cfc,118afff5 -3481d04,920c006d -3481d08,118afff2 -3481d10,920c006e -3481d14,118affef -3481d1c,a10b0069 -3481d20,a10a006c -3481d24,10000004 -3481d2c,340900ff -3481d30,a1090069 -3481d34,a109006c -3481d38,3e00008 -3481d40,90f0203 -3481d44,10d0b00 -3481d48,10101 -3481d4c,1010001 -3481d50,1010101 -3481d54,10001 -3481d58,1010101 -3481d5c,1010100 -3481d60,330821 -3481d64,200f0047 -3481d68,15ea000e -3481d6c,3c028012 -3481d70,8c42a5d4 -3481d74,8e6f00a4 -3481d78,f7a03 -3481d7c,14400005 -3481d80,34024830 -3481d84,15e20007 -3481d8c,24190003 -3481d90,10000004 -3481d94,34026311 -3481d98,15e20002 -3481da0,24190003 -3481da4,3e00008 -3481dac,330821 -3481db0,3c028012 -3481db4,8c42a5d4 -3481db8,8e6f00a4 -3481dbc,f7a03 -3481dc0,14400005 -3481dc4,34024830 -3481dc8,15e20007 -3481dd0,24190003 -3481dd4,10000004 -3481dd8,34026311 -3481ddc,15e20002 -3481de4,24190003 -3481de8,3e00008 -3481df0,34010018 -3481df4,14810015 -3481dfc,14400013 -3481e04,3c0a8012 -3481e08,254aa5d0 -3481e0c,814800a6 -3481e10,31080020 -3481e14,1100000d -3481e18,34020000 -3481e1c,8148007b -3481e20,34090007 -3481e24,11090005 -3481e28,34090008 -3481e2c,11090003 -3481e34,8100793 -3481e38,34020000 -3481e3c,81480ed6 -3481e40,35080001 -3481e44,a1480ed6 -3481e48,34020001 -3481e4c,3e00008 -3481e54,3c018040 -3481e58,8c210ccc -3481e5c,10200006 -3481e64,94480670 -3481e68,31010800 -3481e6c,34080800 -3481e70,3e00008 -3481e78,950804c6 -3481e7c,3401000b -3481e80,3e00008 -3481e88,27bdffe8 -3481e8c,afa50000 -3481e90,afa60004 -3481e94,afa70008 -3481e98,afbf0010 -3481e9c,80a80000 -3481ea0,25090001 -3481ea4,15200005 -3481eac,52025 -3481eb0,24a50008 -3481eb4,c015c0c -3481eb8,24c6fff8 -3481ebc,c1024fc -3481ec4,8fbf0010 -3481ec8,8fa70008 -3481ecc,8fa60004 -3481ed0,8fa50000 -3481ed4,8015c0c -3481ed8,27bd0018 -3481edc,ac4d066c -3481ee0,a0400141 -3481ee4,a0400144 -3481ee8,340e00fe -3481eec,3e00008 -3481ef0,a04e0142 -3481ef4,a2250021 -3481ef8,3c108040 -3481efc,26100898 -3481f00,26100004 -3481f04,8e0a0000 -3481f08,1140000b -3481f10,a7c02 -3481f14,1f17820 -3481f18,3158ff00 -3481f1c,18c202 -3481f20,17000003 -3481f24,315900ff -3481f28,81ea0000 -3481f2c,32ac825 -3481f30,81007c0 -3481f34,a1f90000 -3481f38,3e00008 -3481f40,27bdfff0 -3481f44,afbf0008 -3481f48,c1007de -3481f4c,2264ffff -3481f50,344a0000 -3481f54,8fbf0008 -3481f58,27bd0010 -3481f5c,27bdfff0 -3481f60,afbf0008 -3481f64,c1007de -3481f68,36440000 -3481f6c,34500000 -3481f70,8fbf0008 -3481f74,27bd0010 -3481f78,3c088040 -3481f7c,25080025 -3481f80,91080000 -3481f84,15000007 -3481f8c,3c088012 -3481f90,2508a5d0 -3481f94,1044020 -3481f98,91020024 -3481f9c,10000007 -3481fa4,840c0 -3481fa8,3c028040 -3481fac,24420034 -3481fb0,1024020 -3481fb4,1044020 -3481fb8,91020000 -3481fbc,3e00008 -3481fc4,8fb60030 -3481fc8,8fb70034 -3481fcc,8fbe0038 -3481fd0,3c088040 -3481fd4,25080025 -3481fd8,a1000000 -3481fdc,3e00008 -3481fe4,3c0a8012 -3481fe8,8d4aa5d4 -3481fec,15400006 -3481ff0,31780001 -3481ff4,17000007 -3481ff8,3c184230 -3481ffc,3c184250 -3482000,3e00008 -3482008,17000002 -348200c,3c184210 -3482010,3c184238 -3482014,3e00008 -348201c,906e13e2 -3482020,90620068 -3482024,34010059 -3482028,10410002 -348202c,34010fff -3482030,340100ff -3482034,3e00008 -348203c,3c048012 -3482040,2484a5d0 -3482044,908e13e2 -3482048,90820068 -348204c,34010059 -3482050,10410002 -3482054,34010fff -3482058,340100ff -348205c,3e00008 -3482064,3c08801f -3482068,25085de0 -348206c,8d01009c -3482070,14200003 -3482074,46025102 -3482078,3c083f80 -348207c,44882000 -3482080,3e00008 -3482088,ac800118 -348208c,27ff0030 -3482090,3e00008 -3482094,ac8e0180 -3482098,3c018040 -348209c,8c210cbc -34820a0,10200008 -34820a8,81efa64c -34820ac,34180009 -34820b0,11f80002 -34820b4,34180001 -34820b8,34180000 -34820bc,3e00008 -34820c4,8defa670 -34820c8,31f80018 -34820cc,3e00008 -34820d4,3c018040 -34820d8,8c210cbc -34820dc,10200008 -34820e4,816ba64c -34820e8,340c0009 -34820ec,116c0002 -34820f0,340c0001 -34820f4,340c0000 -34820f8,3e00008 -3482100,8d6ba670 -3482104,316c0018 -3482108,3e00008 -3482110,3c018040 -3482114,8c210cbc -3482118,10200008 -3482120,3c098012 -3482124,812aa64c -3482128,340b0009 -348212c,114b0009 -3482130,34020000 -3482134,3e00008 -3482138,34020002 -348213c,3c098012 -3482140,812aa673 -3482144,314a0038 -3482148,15400002 -348214c,34020000 -3482150,34020002 -3482154,3e00008 -348215c,3c0a8040 -3482160,8d4a0cc0 -3482164,1140000a -3482168,34010001 -348216c,1141000b -3482170,34010002 -3482174,11410026 -3482178,34010003 -348217c,11410051 -3482180,34010004 -3482184,11410069 -3482188,34010005 -348218c,11410061 -3482190,34010000 -3482194,3e00008 -3482198,340a0000 -348219c,3401003f -34821a0,415024 -34821a4,340f0000 -34821a8,31580001 -34821ac,13000002 -34821b4,25ef0001 -34821b8,31580002 -34821bc,13000002 -34821c4,25ef0001 -34821c8,31580004 -34821cc,13000002 -34821d4,25ef0001 -34821d8,31580008 -34821dc,13000002 -34821e4,25ef0001 -34821e8,31580010 -34821ec,13000002 -34821f4,25ef0001 -34821f8,31580020 -34821fc,13000002 -3482204,25ef0001 -3482208,10000043 -3482210,3c01001c -3482214,2421003f -3482218,415024 -348221c,340f0000 -3482220,31580001 -3482224,13000002 -348222c,25ef0001 -3482230,31580002 -3482234,13000002 -348223c,25ef0001 -3482240,31580004 -3482244,13000002 -348224c,25ef0001 -3482250,31580008 -3482254,13000002 -348225c,25ef0001 -3482260,31580010 -3482264,13000002 -348226c,25ef0001 -3482270,31580020 -3482274,13000002 -348227c,25ef0001 -3482280,3c180004 -3482284,158c024 -3482288,13000002 -3482290,25ef0001 -3482294,3c180008 -3482298,158c024 -348229c,13000002 -34822a4,25ef0001 -34822a8,3c180010 -34822ac,158c024 -34822b0,13000002 -34822b8,25ef0001 -34822bc,10000016 -34822c4,3c01001c -34822c8,415024 -34822cc,340f0000 -34822d0,3c180004 -34822d4,158c024 -34822d8,13000002 -34822e0,25ef0001 -34822e4,3c180008 -34822e8,158c024 -34822ec,13000002 -34822f4,25ef0001 -34822f8,3c180010 -34822fc,158c024 -3482300,13000002 -3482308,25ef0001 -348230c,10000002 -3482314,84ef00d0 -3482318,34010000 -348231c,3c188040 -3482320,87180cd0 -3482324,3e00008 -3482328,1f8502a -348232c,34010018 -3482330,415024 -3482334,15410006 -348233c,90ef0084 -3482340,340a0012 -3482344,114f0002 -348234c,3401ffff -3482350,3e00008 -3482354,415024 -3482358,3c098040 -348235c,8d290cc4 -3482360,340a0001 -3482364,112a000e -3482368,340a0002 -348236c,112a0029 -3482370,340a0003 -3482374,112a0054 -3482378,340a0004 -348237c,112a0066 -3482384,340b0018 -3482388,4b5024 -348238c,156a0002 -3482390,34030000 -3482394,34030001 -3482398,3e00008 -34823a0,3401003f -34823a4,415024 -34823a8,340c0000 -34823ac,314b0001 -34823b0,11600002 -34823b8,258c0001 -34823bc,314b0002 -34823c0,11600002 -34823c8,258c0001 -34823cc,314b0004 -34823d0,11600002 -34823d8,258c0001 -34823dc,314b0008 -34823e0,11600002 -34823e8,258c0001 -34823ec,314b0010 -34823f0,11600002 -34823f8,258c0001 -34823fc,314b0020 -3482400,11600002 -3482408,258c0001 -348240c,10000043 -3482414,3c01001c -3482418,2421003f -348241c,415024 -3482420,340c0000 -3482424,314b0001 -3482428,11600002 -3482430,258c0001 -3482434,314b0002 -3482438,11600002 -3482440,258c0001 -3482444,314b0004 -3482448,11600002 -3482450,258c0001 -3482454,314b0008 -3482458,11600002 -3482460,258c0001 -3482464,314b0010 -3482468,11600002 -3482470,258c0001 -3482474,314b0020 -3482478,11600002 -3482480,258c0001 -3482484,3c0b0004 -3482488,14b5824 -348248c,11600002 -3482494,258c0001 -3482498,3c0b0008 -348249c,14b5824 -34824a0,11600002 -34824a8,258c0001 -34824ac,3c0b0010 -34824b0,14b5824 -34824b4,11600002 -34824bc,258c0001 -34824c0,10000016 -34824c8,3c01001c -34824cc,415024 -34824d0,340c0000 -34824d4,3c0b0004 -34824d8,14b5824 -34824dc,11600002 -34824e4,258c0001 -34824e8,3c0b0008 -34824ec,14b5824 -34824f0,11600002 -34824f8,258c0001 -34824fc,3c0b0010 -3482500,14b5824 -3482504,11600002 -348250c,258c0001 -3482510,10000002 -3482518,860c00d0 -348251c,34010000 -3482520,3c0b8040 -3482524,856b0cd2 -3482528,18b602a -348252c,15800002 -3482530,34030000 -3482534,34030001 -3482538,3e00008 -3482540,27bdffe4 -3482544,afb10014 -3482548,afbf0018 -348254c,3c038012 -3482550,2463a5d0 -3482554,860f001c -3482558,31f800ff -348255c,340100ff -3482560,17010004 -3482564,27110400 -3482568,90781397 -348256c,3318001f -3482570,27110430 -3482574,31e18000 -3482578,14200015 -3482580,3c088040 -3482584,8d080cc8 -3482588,1100000b -348258c,34010001 -3482590,11010003 -3482598,1000000d -34825a0,806100a5 -34825a4,30210020 -34825a8,10200008 -34825b0,10000007 -34825b8,c01e6d1 -34825c0,34010008 -34825c4,10410002 -34825cc,34112053 -34825d0,a611010e -34825d4,8fbf0018 -34825d8,8fb10014 -34825dc,3e00008 -34825e0,27bd001c -34825e4,9059008a -34825e8,340900ff -34825ec,11390007 -34825f4,2b290031 -34825f8,15200005 -34825fc,34190000 -3482600,34190001 -3482604,10000002 -348260c,34190000 -3482610,3e00008 -3482618,27bdfff0 -348261c,afa80000 -3482620,e7a20004 -3482624,e7a40008 -3482628,3c088040 -348262c,25080cd4 -3482630,91080000 -3482634,1100000f -3482638,340d0200 -348263c,3c08801e -3482640,2508aa30 -3482644,c5020028 -3482648,3c08c496 -348264c,44882000 -3482654,4604103c -348265c,45010004 -3482664,340d0200 -3482668,10000002 -3482670,340d00c0 -3482674,c7a40008 -3482678,c7a20004 -348267c,8fa80000 -3482680,3e00008 -3482684,27bd0010 -3482688,8e2a1d44 -348268c,314a0100 -3482690,1540000a -3482698,8e2a1d48 -348269c,314a0100 -34826a0,15400007 -34826a8,8e211d48 -34826ac,342a0100 -34826b0,ae2a1d48 -34826b4,10000003 -34826b8,5024 -34826bc,240c0000 -34826c0,340a0001 -34826c4,3e00008 -34826cc,27bdfff0 -34826d0,afbf0000 -34826d4,c10106e -34826dc,8ece1c44 -34826e0,3c18db06 -34826e4,8fbf0000 -34826e8,3e00008 -34826ec,27bd0010 -34826f4,27bdfff0 +3480ce0,27bdffe8 +3480ce4,afbf0010 +3480ce8,c101fa4 +3480cf0,3c028012 +3480cf4,2442d2a0 +3480cf8,240e0140 +3480cfc,3c018010 +3480d00,ac2ee500 +3480d04,240f00f0 +3480d08,8fbf0010 +3480d0c,3e00008 +3480d10,27bd0018 +3480d14,3c088040 +3480d18,ac4815d4 +3480d1c,3e00008 +3480d20,340215c0 +3480d24,308400ff +3480d28,3c088012 +3480d2c,2508a5d0 +3480d30,3401008c +3480d34,10810016 +3480d38,91020075 +3480d3c,3401008d +3480d40,10810013 +3480d44,91020075 +3480d48,10800011 +3480d4c,91020074 +3480d50,3401008a +3480d54,1081000e +3480d58,91020074 +3480d5c,3401008b +3480d60,1081000b +3480d64,91020074 +3480d68,34010058 +3480d6c,10810008 +3480d70,34020000 +3480d74,34010078 +3480d78,10810005 +3480d7c,34020000 +3480d80,34010079 +3480d84,10810002 +3480d88,34020000 +3480d8c,340200ff +3480d90,3e00008 +3480d98,8fa60030 +3480d9c,810036c +3480da0,84c50004 +3480da4,8fb9002c +3480da8,810036c +3480dac,87250004 +3480db0,3c0a8041 +3480db4,254ab56c +3480db8,8d4a0000 +3480dbc,11400004 +3480dc4,3c058041 +3480dc8,24a5b560 +3480dcc,8ca50000 +3480dd0,3e00008 +3480dd8,3c088041 +3480ddc,2508b56c +3480de0,8d080000 +3480de4,11000004 +3480dec,3c038041 +3480df0,2463b55c +3480df4,8c630000 +3480df8,30fc3 +3480dfc,614026 +3480e00,1014023 +3480e04,a0880852 +3480e08,3e00008 +3480e10,3c088040 +3480e14,25080cd6 +3480e18,91080000 +3480e1c,1500000c +3480e20,240bffff +3480e24,3c088041 +3480e28,2508b56c +3480e2c,8d080000 +3480e30,11000007 +3480e34,1405821 +3480e38,3c088041 +3480e3c,2508b558 +3480e40,8d080000 +3480e44,15000002 +3480e48,240bffff +3480e4c,340b0001 +3480e50,5600009 +3480e58,27bdffe8 +3480e5c,afab0010 +3480e60,afbf0014 +3480e64,c01c508 +3480e6c,8fab0010 +3480e70,8fbf0014 +3480e74,27bd0018 +3480e78,3e00008 +3480e80,90450003 +3480e84,3c088041 +3480e88,2508b56c +3480e8c,8d080000 +3480e90,11000004 +3480e98,3c058041 +3480e9c,24a5b564 +3480ea0,8ca50000 +3480ea4,3e00008 +3480eac,27bdffe8 +3480eb0,afb00010 +3480eb4,afbf0014 +3480eb8,3c088041 +3480ebc,2508b570 +3480ec0,8d080000 +3480ec4,31080001 +3480ec8,1500000b +3480ecc,34100041 +3480ed0,3c048041 +3480ed4,2484b56c +3480ed8,8c840000 +3480edc,10800006 +3480ee0,90500000 +3480ee4,3c088041 +3480ee8,2508b568 +3480eec,8d100000 +3480ef0,c101efb +3480ef8,c101ab5 +3480f00,2002821 +3480f04,8fb00010 +3480f08,8fbf0014 +3480f0c,3e00008 +3480f10,27bd0018 +3480f14,27bdffe0 +3480f18,afa70010 +3480f1c,afa20014 +3480f20,afa30018 +3480f24,afbf001c +3480f28,c101b26 +3480f2c,e02821 +3480f30,8fa70010 +3480f34,8fa20014 +3480f38,8fa30018 +3480f3c,8fbf001c +3480f40,3e00008 +3480f44,27bd0020 +3480f48,27bdffe8 +3480f4c,afbf0010 +3480f50,8c881d2c +3480f54,34090001 +3480f58,94e00 +3480f5c,1091024 +3480f60,10400021 +3480f68,94ca02dc +3480f6c,3c0b8012 +3480f70,256ba5d0 +3480f74,948c00a4 +3480f78,3401003d +3480f7c,1181000a +3480f84,8a6021 +3480f88,918d1d28 +3480f8c,15a00014 +3480f94,340d0001 +3480f98,a18d1d28 +3480f9c,254a0013 +3480fa0,1000000a +3480fa8,340c0001 +3480fac,14c6004 +3480fb0,916d0ef2 +3480fb4,1ac7024 +3480fb8,15c00009 +3480fc0,1ac7025 +3480fc4,a16e0ef2 +3480fc8,254a0010 +3480fcc,1294827 +3480fd0,1094024 +3480fd4,ac881d2c +3480fd8,c101a68 +3480fdc,1402021 +3480fe0,c102532 +3480fe8,8fbf0010 +3480fec,34020000 +3480ff0,3e00008 +3480ff4,27bd0018 +3480ff8,27bdffe8 +3480ffc,afbf0010 +3481000,c101a68 +3481004,20e4ffc6 +3481008,340200ff +348100c,8fbf0010 +3481010,3e00008 +3481014,27bd0018 +3481018,27bdffe0 +348101c,afa10010 +3481020,afa30014 +3481024,afbf0018 +3481028,c101a68 +348102c,34040023 +3481030,8fa10010 +3481034,8fa30014 +3481038,8fbf0018 +348103c,3e00008 +3481040,27bd0020 +3481044,27bdffe0 +3481048,afa60010 +348104c,afa70014 +3481050,afbf0018 +3481054,3c018012 +3481058,2421a5d0 +348105c,80280ede +3481060,35080001 +3481064,a0280ede +3481068,c101a68 +348106c,34040027 +3481070,8fa60010 +3481074,8fa70014 +3481078,8fbf0018 +348107c,3e00008 +3481080,27bd0020 +3481084,27bdffe8 +3481088,afa30010 +348108c,afbf0014 +3481090,3c018012 +3481094,2421a5d0 +3481098,80280ede +348109c,35080004 +34810a0,a0280ede +34810a4,3c188040 +34810a8,83180cd8 +34810ac,13000003 +34810b4,c101a68 +34810b8,34040029 +34810bc,240f0001 +34810c0,8fa30010 +34810c4,8fbf0014 +34810c8,3e00008 +34810cc,27bd0018 +34810d0,27bdffd8 +34810d4,afa40010 +34810d8,afa20014 +34810dc,afaf0018 +34810e0,afbf0020 +34810e4,c101a68 +34810e8,3404002a +34810ec,34050003 +34810f0,8fa40010 +34810f4,8fa20014 +34810f8,8faf0018 +34810fc,8fbf0020 +3481100,3e00008 +3481104,27bd0028 +3481108,607821 +348110c,81ec0edf +3481110,318e0080 +3481114,11c00003 +3481118,34030005 +348111c,3e00008 +3481120,34020002 +3481124,3e00008 +3481128,601021 +348112c,85c200a4 +3481130,3c088012 +3481134,2508a5d0 +3481138,81090edf +348113c,35290080 +3481140,a1090edf +3481144,3e00008 +348114c,27bdfff0 +3481150,afbf0004 +3481154,c035886 +348115c,3c0c8012 +3481160,258ca5d0 +3481164,858d0f2e +3481168,8d980004 +348116c,13000002 +3481170,340e0001 +3481174,340e0002 +3481178,1ae6825 +348117c,a58d0f2e +3481180,8fbf0004 +3481184,27bd0010 +3481188,3e00008 +3481190,24090041 +3481194,27bdffe0 +3481198,afa80004 +348119c,afa90008 +34811a0,afaa000c +34811a4,afac0010 +34811a8,3c0affff +34811ac,a5403 +34811b0,3c08801d +34811b4,850c894c +34811b8,118a0002 +34811c0,a500894c +34811c4,3c08801e +34811c8,810a887c +34811cc,11400009 +34811d4,3c090036 +34811d8,94c03 +34811dc,a109887c +34811e0,3c090002 +34811e4,94c03 +34811e8,a109895f +34811ec,3c08801f +34811f0,a1008d38 +34811f4,8fac0010 +34811f8,8faa000c +34811fc,8fa90008 +3481200,8fa80004 +3481204,3e00008 +3481208,27bd0020 +3481210,3c0a8010 +3481214,254ae49c +3481218,8d4a0000 +348121c,1140001e +3481224,3c08801d +3481228,250884a0 +348122c,3c0b0001 +3481230,356b04c4 +3481234,10b4020 +3481238,85090000 +348123c,3c0b0002 +3481240,356b26cc +3481244,14b5020 +3481248,94840 +348124c,12a5021 +3481250,85490000 +3481254,a5091956 +3481258,3c0c801e +348125c,258c84a0 +3481260,34090003 +3481264,a1891e5e +3481268,34090014 +348126c,a1091951 +3481270,34090001 +3481274,3c018040 +3481278,a029120c +348127c,3c088012 +3481280,2508a5d0 +3481284,850913d2 +3481288,11200003 +3481290,34090001 +3481294,a50913d4 +3481298,3e00008 +34812a0,3421241c +34812a4,3c0d8040 +34812a8,25ad120c +34812ac,81a90000 +34812b0,11200008 +34812b4,862a00a4 +34812b8,340b005e +34812bc,114b0005 +34812c0,3c0c801e +34812c4,258c84a0 +34812c8,34090003 +34812cc,a1891e5e +34812d0,a1a00000 +34812d4,3e00008 +34812dc,3c02801d +34812e0,244284a0 +34812e4,3c010001 +34812e8,411020 +34812ec,3401047e +34812f0,a4411e1a +34812f4,34010014 +34812f8,3e00008 +34812fc,a0411e15 +3481300,27bdffe8 +3481304,afbf0014 +3481308,afa40018 +348130c,8e190004 +3481310,17200015 +3481314,8e190000 +3481318,3c018010 +348131c,24219c90 +3481320,19c880 +3481324,3210820 +3481328,90210000 +348132c,34190052 +3481330,1721000d +3481334,8e190000 +3481338,960200a6 +348133c,304c0007 +3481340,398c0007 +3481344,15800008 +3481348,240400aa +348134c,c00a22d +3481354,14400004 +3481358,8e190000 +348135c,341900db +3481360,10000002 +3481364,ae190000 +3481368,340101e1 +348136c,8fbf0014 +3481370,8fa40018 +3481374,3e00008 +3481378,27bd0018 +348137c,3c088040 +3481380,81080cde +3481384,11000005 +3481388,3c018012 +348138c,2421a5d0 +3481390,80280ed6 +3481394,35080001 +3481398,a0280ed6 +348139c,34080000 +34813a0,3e00008 +34813a4,adf90000 +34813a8,3c0b801d +34813ac,256b84a0 +34813b0,856b00a4 +34813b4,340c005a +34813b8,156c0003 +34813bc,340b01a5 +34813c0,a42b1e1a +34813c4,1000000e +34813c8,3c0c8012 +34813cc,258ca5d0 +34813d0,8d8c0004 +34813d4,15800008 +34813d8,3c0b8040 +34813dc,816b0cde +34813e0,11600007 +34813e4,842b1e1a +34813e8,340c01a5 +34813ec,116c0002 +34813f4,10000002 +34813f8,340b0129 +34813fc,a42b1e1a +3481400,3e00008 +348140c,2202825 +3481410,3c0a801e +3481414,254aaa30 +3481418,c544002c +348141c,3c0bc43c +3481420,256b8000 +3481424,448b3000 +3481428,4606203c +3481430,45000026 +3481438,c5440024 +348143c,3c0bc28a +3481440,448b3000 +3481444,4606203c +348144c,4501001f +3481454,3c0b41c8 +3481458,448b3000 +348145c,4606203c +3481464,45000019 +348146c,3c098040 +3481470,25291408 +3481474,814b0424 +3481478,1160000e +348147c,812e0000 +3481480,340c007e +3481484,116c000b +348148c,15c00009 +3481490,340c0001 +3481494,a12c0000 +3481498,3c0dc1a0 +348149c,ad4d0024 +34814a0,3c0d4120 +34814a4,ad4d0028 +34814a8,3c0dc446 +34814ac,25ad8000 +34814b0,ad4d002c +34814b4,11c00005 +34814bc,15600003 +34814c0,340d8000 +34814c4,a54d00b6 +34814c8,a1200000 +34814cc,3e00008 +34814d8,3c0a801e +34814dc,254aaa30 +34814e0,8d4b066c +34814e4,3c0cd000 +34814e8,258cffff +34814ec,16c5824 +34814f0,3e00008 +34814f4,ad4b066c +34814f8,27bdffe0 +34814fc,afbf0014 +3481500,afa40018 +3481504,1c17825 +3481508,ac4f0680 +348150c,34040001 +3481510,c01b638 +3481518,3c088040 +348151c,81080cd8 +3481520,15000007 +3481528,3c04801d +348152c,248484a0 +3481530,3c058040 +3481534,80a50cd9 +3481538,c037500 +3481540,8fa40018 +3481544,8c880138 +3481548,8d090010 +348154c,252a03d4 +3481550,ac8a029c +3481554,8fbf0014 +3481558,3e00008 +348155c,27bd0020 +3481560,27bdffe0 +3481564,afbf0014 +3481568,afa40018 +348156c,3c088040 +3481570,81080cd8 +3481574,1500001a +348157c,3c09801e +3481580,2529887c +3481584,81280000 +3481588,340b0036 +348158c,150b001e +3481594,3c088040 +3481598,810814d4 +348159c,1500001a +34815a4,34080001 +34815a8,3c018040 +34815ac,a02814d4 +34815b0,3c04801d +34815b4,248484a0 +34815b8,3c058040 +34815bc,90a50cda +34815c0,34060000 +34815c4,c037385 +34815cc,34044802 +34815d0,c0191bc +34815d8,10000025 +34815e0,3c04801d +34815e4,248484a0 +34815e8,34050065 +34815ec,c01bf73 +34815f4,34040032 +34815f8,c01b638 +3481600,1000000c +3481608,8fa40018 +348160c,3c05801d +3481610,24a584a0 +3481614,c008ab4 +348161c,10400014 +3481624,3c088040 +3481628,810814d4 +348162c,11000010 +3481634,8fa40018 +3481638,8c880138 +348163c,8d090010 +3481640,252a035c +3481644,ac8a029c +3481648,3c028012 +348164c,2442a5d0 +3481650,94490ee0 +3481654,352a0020 +3481658,a44a0ee0 +348165c,8c880004 +3481660,3c09ffff +3481664,2529ffff +3481668,1094024 +348166c,ac880004 +3481670,8fbf0014 +3481674,3e00008 +3481678,27bd0020 +348167c,860f00b6 +3481680,9739b4ae +3481684,3c09801e +3481688,2529aa30 +348168c,812a0424 +3481690,11400004 +3481698,3409007e +348169c,15490003 +34816a4,3e00008 +34816a8,340a0000 +34816ac,3e00008 +34816b0,340a0001 +34816b4,8c8e0134 +34816b8,15c00002 +34816bc,3c0e4480 +34816c0,ac8e0024 +34816c4,3e00008 +34816c8,8fae0044 +34816cc,260501a4 +34816d0,27bdffe0 +34816d4,afbf0014 +34816d8,afa50018 +34816dc,8625001c +34816e0,52a03 +34816e4,c008134 +34816e8,30a5003f +34816ec,8fa50018 +34816f0,8fbf0014 +34816f4,3e00008 +34816f8,27bd0020 +34816fc,ae19066c +3481700,8e0a0428 +3481704,3c09801e +3481708,2529aa30 +348170c,854b00b6 +3481710,216b8000 +3481714,3e00008 +3481718,a52b00b6 +348171c,3c08801e +3481720,2508aa30 +3481724,810a0434 +3481728,340b0008 +348172c,154b0002 +3481730,34090007 +3481734,a1090434 +3481738,3e00008 +348173c,c606000c +3481740,3c08801e +3481744,2508aa30 +3481748,8d0901ac +348174c,3c0a0400 +3481750,254a2f98 +3481754,152a000b +3481758,8d0b01bc +348175c,3c0c42cf +3481760,156c0003 +3481764,3c0d4364 +3481768,10000006 +348176c,ad0d01bc +3481770,3c0c4379 +3481774,156c0003 +3481778,3c09803b +348177c,2529967c +3481780,ad090664 +3481784,3e00008 +3481788,260501a4 +348178c,a498017c +3481790,3c08801d +3481794,250884a0 +3481798,850900a4 +348179c,340a0002 +34817a0,152a000e +34817a4,8c890138 +34817a8,8d290010 +34817ac,252a3398 +34817b0,ac8a0184 +34817b4,340b0001 +34817b8,a48b017c +34817bc,27bdffe8 +34817c0,afbf0014 +34817c4,3c053dcd +34817c8,24a5cccd +34817cc,c0083e2 +34817d4,8fbf0014 +34817d8,27bd0018 +34817dc,3e00008 +34817e4,948e001c +34817e8,21cdffce +34817ec,5a00010 +34817f0,34020000 +34817f4,31a90007 +34817f8,340a0001 +34817fc,12a5004 +3481800,d48c2 +3481804,3c0c8012 +3481808,258ca5d0 +348180c,1896020 +3481810,918b05b4 +3481814,16a5824 +3481818,34020000 +348181c,11600004 +3481824,340d0026 +3481828,a48d001c +348182c,34020001 +3481830,3e00008 +3481838,94ae001c +348183c,21cdffce +3481840,5a0000b +3481844,34020000 +3481848,31a90007 +348184c,340a0001 +3481850,12a5004 +3481854,d48c2 +3481858,3c0c8012 +348185c,258ca5d0 +3481860,1896020 +3481864,918b05b4 +3481868,16a5825 +348186c,a18b05b4 +3481870,3e00008 +3481878,27bdfff0 +348187c,afbf0008 +3481880,28810032 +3481884,10200003 +3481888,801021 +348188c,320f809 +3481894,8fbf0008 +3481898,27bd0010 +348189c,3e00008 +34818a4,3c08801d +34818a8,250884a0 +34818ac,3c098012 +34818b0,2529a5d0 +34818b4,950a00a4 +34818b8,3401003e +34818bc,15410002 +34818c0,912b1397 +34818c4,216aff2a +34818c8,960b001c +34818cc,216b0001 +34818d0,340c0001 +34818d4,16c6004 +34818d8,3401001c +34818dc,1410018 +34818e0,6812 +34818e4,12d7020 +34818e8,8dcf00e4 +34818ec,18f1024 +34818f0,3e00008 +34818f8,3c08801d +34818fc,250884a0 +3481900,3c098012 +3481904,2529a5d0 +3481908,950a00a4 +348190c,3401003e +3481910,15410002 +3481914,912b1397 +3481918,216aff2a +348191c,848b001c +3481920,216b0001 +3481924,340c0001 +3481928,16c6004 +348192c,3401001c +3481930,1410018 +3481934,6812 +3481938,12d7020 +348193c,8dcf00e4 +3481940,18f7825 +3481944,adcf00e4 +3481948,3e00008 +3481950,27bdffe8 +3481954,afbf0010 +3481958,c101fb3 +3481960,8fbf0010 +3481964,27bd0018 +3481968,8fae0018 +348196c,3e00008 +3481970,3c018010 +3481974,340100ff +3481978,15210002 +348197c,92220000 +3481980,340200ff +3481984,3e00008 +3481988,34010009 +348198c,27bdffe8 +3481990,afa20010 +3481994,afbf0014 +3481998,c100687 +34819a0,14400002 +34819a4,91830000 +34819a8,340300ff +34819ac,8fa20010 +34819b0,8fbf0014 +34819b4,27bd0018 +34819b8,3e00008 +34819bc,34010009 +34819c0,27bdffe8 +34819c4,afa20010 +34819c8,afbf0014 +34819cc,960201e8 +34819d0,34010003 +34819d4,14410007 +34819dc,c100687 +34819e4,14400007 +34819ec,10000005 +34819f0,3403007a +34819f4,3401017a +34819f8,14610002 +3481a00,3403007a +3481a04,36280 +3481a08,18d2821 +3481a0c,8fa20010 +3481a10,8fbf0014 +3481a14,3e00008 +3481a18,27bd0018 +3481a1c,27bdfff0 +3481a20,afbf0000 +3481a24,afa30004 +3481a28,afa40008 +3481a2c,c101fef +3481a34,8fbf0000 +3481a38,8fa30004 +3481a3c,8fa40008 +3481a40,3e00008 +3481a44,27bd0010 +3481a48,6d7024 +3481a4c,15c00002 +3481a50,91ec0000 +3481a54,27ff003c +3481a58,3e00008 +3481a6c,3c088012 +3481a70,2508a5d0 +3481a74,8509009c +3481a78,352a0002 +3481a7c,3e00008 +3481a80,a50a009c +3481a84,3c058012 +3481a88,24a5a5d0 +3481a8c,3c088040 +3481a90,25081a60 +3481a94,8ca90068 +3481a98,ad090000 +3481a9c,8ca9006c +3481aa0,ad090004 +3481aa4,94a90070 +3481aa8,a5090008 +3481aac,94a9009c +3481ab0,a509000a +3481ab4,340807e4 +3481ab8,1054021 +3481abc,34090e64 +3481ac0,1254821 +3481ac4,340a0008 +3481ac8,8d0b0000 +3481acc,8d2c0000 +3481ad0,ad2b0000 +3481ad4,ad0c0000 +3481ad8,2508001c +3481adc,25290004 +3481ae0,254affff +3481ae4,1d40fff8 +3481aec,801be03 +3481af4,27bdffe0 +3481af8,afb00010 +3481afc,afb10014 +3481b00,afbf0018 +3481b04,3c108012 +3481b08,2610a5d0 +3481b0c,3c118040 +3481b10,26311a60 +3481b14,8e080004 +3481b18,11000005 +3481b20,c1006e7 +3481b28,10000003 +3481b30,c1006fa +3481b38,c1006da +3481b3c,34040000 +3481b40,c1006da +3481b44,34040001 +3481b48,c1006da +3481b4c,34040002 +3481b50,8fb00010 +3481b54,8fb10014 +3481b58,8fbf0018 +3481b5c,27bd0020 +3481b60,3e00008 +3481b68,2044021 +3481b6c,9109006c +3481b70,340100ff +3481b74,11210007 +3481b7c,2094821 +3481b80,91290074 +3481b84,3401002c +3481b88,11210002 +3481b90,a1090069 +3481b94,3e00008 +3481b9c,27bdffe8 +3481ba0,afbf0010 +3481ba4,8e280000 +3481ba8,ae080040 +3481bac,8e280004 +3481bb0,ae080044 +3481bb4,96280008 +3481bb8,a6080048 +3481bbc,a2000f33 +3481bc0,9208004a +3481bc4,340100ff +3481bc8,15010003 +3481bd0,c10070d +3481bd8,8fbf0010 +3481bdc,27bd0018 +3481be0,3e00008 +3481be8,8e080040 +3481bec,ae080068 +3481bf0,8e080044 +3481bf4,ae08006c +3481bf8,96080048 +3481bfc,9209009d +3481c00,31290020 +3481c04,15200002 +3481c0c,3108ffdf +3481c10,a6080070 +3481c14,92080068 +3481c18,340100ff +3481c1c,15010003 +3481c24,34080001 +3481c28,a2080f33 +3481c2c,3e00008 +3481c34,27bdffe8 +3481c38,afbf0010 +3481c3c,9608009c +3481c40,31080040 +3481c44,11000005 +3481c4c,96080070 +3481c50,3108ff0f +3481c54,35080030 +3481c58,a6080070 +3481c5c,92280001 +3481c60,a2080069 +3481c64,96280002 +3481c68,a608006a +3481c6c,8e280004 +3481c70,ae08006c +3481c74,c100727 +3481c78,34040000 +3481c7c,c100727 +3481c80,34040001 +3481c84,c100727 +3481c88,34040002 +3481c8c,8fbf0010 +3481c90,27bd0018 +3481c94,3e00008 +3481c9c,2044021 +3481ca0,3c098040 +3481ca4,25291d44 +3481ca8,910a006c +3481cac,340100ff +3481cb0,11410005 +3481cb8,12a4821 +3481cbc,91290000 +3481cc0,1520001c +3481cc8,3c098040 +3481ccc,25291d3b +3481cd0,25290001 +3481cd4,912a0000 +3481cd8,11400013 +3481ce0,20a5821 +3481ce4,916b0074 +3481ce8,340100ff +3481cec,1161fff8 +3481cf4,920c006c +3481cf8,118afff5 +3481d00,920c006d +3481d04,118afff2 +3481d0c,920c006e +3481d10,118affef +3481d18,a10b0069 +3481d1c,a10a006c +3481d20,10000004 +3481d28,340900ff +3481d2c,a1090069 +3481d30,a109006c +3481d34,3e00008 +3481d3c,90f0203 +3481d40,10d0b00 +3481d44,10101 +3481d48,1010001 +3481d4c,1010101 +3481d50,10001 +3481d54,1010101 +3481d58,1010100 +3481d5c,330821 +3481d60,200f0047 +3481d64,15ea000e +3481d68,3c028012 +3481d6c,8c42a5d4 +3481d70,8e6f00a4 +3481d74,f7a03 +3481d78,14400005 +3481d7c,34024830 +3481d80,15e20007 +3481d88,24190003 +3481d8c,10000004 +3481d90,34026311 +3481d94,15e20002 +3481d9c,24190003 +3481da0,3e00008 +3481da8,330821 +3481dac,3c028012 +3481db0,8c42a5d4 +3481db4,8e6f00a4 +3481db8,f7a03 +3481dbc,14400005 +3481dc0,34024830 +3481dc4,15e20007 +3481dcc,24190003 +3481dd0,10000004 +3481dd4,34026311 +3481dd8,15e20002 +3481de0,24190003 +3481de4,3e00008 +3481dec,34010018 +3481df0,14810015 +3481df8,14400013 +3481e00,3c0a8012 +3481e04,254aa5d0 +3481e08,814800a6 +3481e0c,31080020 +3481e10,1100000d +3481e14,34020000 +3481e18,8148007b +3481e1c,34090007 +3481e20,11090005 +3481e24,34090008 +3481e28,11090003 +3481e30,8100792 +3481e34,34020000 +3481e38,81480ed6 +3481e3c,35080001 +3481e40,a1480ed6 +3481e44,34020001 +3481e48,3e00008 +3481e50,3c018040 +3481e54,8c210ccc +3481e58,10200006 +3481e60,94480670 +3481e64,31010800 +3481e68,34080800 +3481e6c,3e00008 +3481e74,950804c6 +3481e78,3401000b +3481e7c,3e00008 +3481e84,27bdffe8 +3481e88,afa50000 +3481e8c,afa60004 +3481e90,afa70008 +3481e94,afbf0010 +3481e98,80a80000 +3481e9c,25090001 +3481ea0,15200005 +3481ea8,52025 +3481eac,24a50008 +3481eb0,c015c0c +3481eb4,24c6fff8 +3481eb8,c10253c +3481ec0,8fbf0010 +3481ec4,8fa70008 +3481ec8,8fa60004 +3481ecc,8fa50000 +3481ed0,8015c0c +3481ed4,27bd0018 +3481ed8,ac4d066c +3481edc,a0400141 +3481ee0,a0400144 +3481ee4,340e00fe +3481ee8,3e00008 +3481eec,a04e0142 +3481ef0,a2250021 +3481ef4,3c108040 +3481ef8,26100898 +3481efc,26100004 +3481f00,8e0a0000 +3481f04,1140000b +3481f0c,a7c02 +3481f10,1f17820 +3481f14,3158ff00 +3481f18,18c202 +3481f1c,17000003 +3481f20,315900ff +3481f24,81ea0000 +3481f28,32ac825 +3481f2c,81007bf +3481f30,a1f90000 +3481f34,3e00008 +3481f3c,27bdfff0 +3481f40,afbf0008 +3481f44,c1007dd +3481f48,2264ffff +3481f4c,344a0000 +3481f50,8fbf0008 +3481f54,27bd0010 +3481f58,27bdfff0 +3481f5c,afbf0008 +3481f60,c1007dd +3481f64,36440000 +3481f68,34500000 +3481f6c,8fbf0008 +3481f70,27bd0010 +3481f74,3c088040 +3481f78,25080025 +3481f7c,91080000 +3481f80,15000007 +3481f88,3c088012 +3481f8c,2508a5d0 +3481f90,1044020 +3481f94,91020024 +3481f98,10000007 +3481fa0,840c0 +3481fa4,3c028040 +3481fa8,24420034 +3481fac,1024020 +3481fb0,1044020 +3481fb4,91020000 +3481fb8,3e00008 +3481fc0,8fb60030 +3481fc4,8fb70034 +3481fc8,8fbe0038 +3481fcc,3c088040 +3481fd0,25080025 +3481fd4,a1000000 +3481fd8,3e00008 +3481fe0,3c0a8012 +3481fe4,8d4aa5d4 +3481fe8,15400006 +3481fec,31780001 +3481ff0,17000007 +3481ff4,3c184230 +3481ff8,3c184250 +3481ffc,3e00008 +3482004,17000002 +3482008,3c184210 +348200c,3c184238 +3482010,3e00008 +3482018,906e13e2 +348201c,90620068 +3482020,34010059 +3482024,10410002 +3482028,34010fff +348202c,340100ff +3482030,3e00008 +3482038,3c048012 +348203c,2484a5d0 +3482040,908e13e2 +3482044,90820068 +3482048,34010059 +348204c,10410002 +3482050,34010fff +3482054,340100ff +3482058,3e00008 +3482060,3c08801f +3482064,25085de0 +3482068,8d01009c +348206c,14200003 +3482070,46025102 +3482074,3c083f80 +3482078,44882000 +348207c,3e00008 +3482084,ac800118 +3482088,27ff0030 +348208c,3e00008 +3482090,ac8e0180 +3482094,3c018040 +3482098,8c210cbc +348209c,10200008 +34820a4,81efa64c +34820a8,34180009 +34820ac,11f80002 +34820b0,34180001 +34820b4,34180000 +34820b8,3e00008 +34820c0,8defa670 +34820c4,31f80018 +34820c8,3e00008 +34820d0,3c018040 +34820d4,8c210cbc +34820d8,10200008 +34820e0,816ba64c +34820e4,340c0009 +34820e8,116c0002 +34820ec,340c0001 +34820f0,340c0000 +34820f4,3e00008 +34820fc,8d6ba670 +3482100,316c0018 +3482104,3e00008 +348210c,3c018040 +3482110,8c210cbc +3482114,10200008 +348211c,3c098012 +3482120,812aa64c +3482124,340b0009 +3482128,114b0009 +348212c,34020000 +3482130,3e00008 +3482134,34020002 +3482138,3c098012 +348213c,812aa673 +3482140,314a0038 +3482144,15400002 +3482148,34020000 +348214c,34020002 +3482150,3e00008 +3482158,3c0a8040 +348215c,8d4a0cc0 +3482160,1140000a +3482164,34010001 +3482168,1141000b +348216c,34010002 +3482170,11410026 +3482174,34010003 +3482178,11410051 +348217c,34010004 +3482180,11410069 +3482184,34010005 +3482188,11410061 +348218c,34010000 +3482190,3e00008 +3482194,340a0000 +3482198,3401003f +348219c,415024 +34821a0,340f0000 +34821a4,31580001 +34821a8,13000002 +34821b0,25ef0001 +34821b4,31580002 +34821b8,13000002 +34821c0,25ef0001 +34821c4,31580004 +34821c8,13000002 +34821d0,25ef0001 +34821d4,31580008 +34821d8,13000002 +34821e0,25ef0001 +34821e4,31580010 +34821e8,13000002 +34821f0,25ef0001 +34821f4,31580020 +34821f8,13000002 +3482200,25ef0001 +3482204,10000043 +348220c,3c01001c +3482210,2421003f +3482214,415024 +3482218,340f0000 +348221c,31580001 +3482220,13000002 +3482228,25ef0001 +348222c,31580002 +3482230,13000002 +3482238,25ef0001 +348223c,31580004 +3482240,13000002 +3482248,25ef0001 +348224c,31580008 +3482250,13000002 +3482258,25ef0001 +348225c,31580010 +3482260,13000002 +3482268,25ef0001 +348226c,31580020 +3482270,13000002 +3482278,25ef0001 +348227c,3c180004 +3482280,158c024 +3482284,13000002 +348228c,25ef0001 +3482290,3c180008 +3482294,158c024 +3482298,13000002 +34822a0,25ef0001 +34822a4,3c180010 +34822a8,158c024 +34822ac,13000002 +34822b4,25ef0001 +34822b8,10000016 +34822c0,3c01001c +34822c4,415024 +34822c8,340f0000 +34822cc,3c180004 +34822d0,158c024 +34822d4,13000002 +34822dc,25ef0001 +34822e0,3c180008 +34822e4,158c024 +34822e8,13000002 +34822f0,25ef0001 +34822f4,3c180010 +34822f8,158c024 +34822fc,13000002 +3482304,25ef0001 +3482308,10000002 +3482310,84ef00d0 +3482314,34010000 +3482318,3c188040 +348231c,87180cd0 +3482320,3e00008 +3482324,1f8502a +3482328,34010018 +348232c,415024 +3482330,15410006 +3482338,90ef0084 +348233c,340a0012 +3482340,114f0002 +3482348,3401ffff +348234c,3e00008 +3482350,415024 +3482354,3c098040 +3482358,8d290cc4 +348235c,340a0001 +3482360,112a000e +3482364,340a0002 +3482368,112a0029 +348236c,340a0003 +3482370,112a0054 +3482374,340a0004 +3482378,112a0066 +3482380,340b0018 +3482384,4b5024 +3482388,156a0002 +348238c,34030000 +3482390,34030001 +3482394,3e00008 +348239c,3401003f +34823a0,415024 +34823a4,340c0000 +34823a8,314b0001 +34823ac,11600002 +34823b4,258c0001 +34823b8,314b0002 +34823bc,11600002 +34823c4,258c0001 +34823c8,314b0004 +34823cc,11600002 +34823d4,258c0001 +34823d8,314b0008 +34823dc,11600002 +34823e4,258c0001 +34823e8,314b0010 +34823ec,11600002 +34823f4,258c0001 +34823f8,314b0020 +34823fc,11600002 +3482404,258c0001 +3482408,10000043 +3482410,3c01001c +3482414,2421003f +3482418,415024 +348241c,340c0000 +3482420,314b0001 +3482424,11600002 +348242c,258c0001 +3482430,314b0002 +3482434,11600002 +348243c,258c0001 +3482440,314b0004 +3482444,11600002 +348244c,258c0001 +3482450,314b0008 +3482454,11600002 +348245c,258c0001 +3482460,314b0010 +3482464,11600002 +348246c,258c0001 +3482470,314b0020 +3482474,11600002 +348247c,258c0001 +3482480,3c0b0004 +3482484,14b5824 +3482488,11600002 +3482490,258c0001 +3482494,3c0b0008 +3482498,14b5824 +348249c,11600002 +34824a4,258c0001 +34824a8,3c0b0010 +34824ac,14b5824 +34824b0,11600002 +34824b8,258c0001 +34824bc,10000016 +34824c4,3c01001c +34824c8,415024 +34824cc,340c0000 +34824d0,3c0b0004 +34824d4,14b5824 +34824d8,11600002 +34824e0,258c0001 +34824e4,3c0b0008 +34824e8,14b5824 +34824ec,11600002 +34824f4,258c0001 +34824f8,3c0b0010 +34824fc,14b5824 +3482500,11600002 +3482508,258c0001 +348250c,10000002 +3482514,860c00d0 +3482518,34010000 +348251c,3c0b8040 +3482520,856b0cd2 +3482524,18b602a +3482528,15800002 +348252c,34030000 +3482530,34030001 +3482534,3e00008 +348253c,27bdffe4 +3482540,afb10014 +3482544,afbf0018 +3482548,3c038012 +348254c,2463a5d0 +3482550,860f001c +3482554,31f800ff +3482558,340100ff +348255c,17010004 +3482560,27110400 +3482564,90781397 +3482568,3318001f +348256c,27110430 +3482570,31e18000 +3482574,14200015 +348257c,3c088040 +3482580,8d080cc8 +3482584,1100000b +3482588,34010001 +348258c,11010003 +3482594,1000000d +348259c,806100a5 +34825a0,30210020 +34825a4,10200008 +34825ac,10000007 +34825b4,c01e6d1 +34825bc,34010008 +34825c0,10410002 +34825c8,34112053 +34825cc,a611010e +34825d0,8fbf0018 +34825d4,8fb10014 +34825d8,3e00008 +34825dc,27bd001c +34825e0,9059008a +34825e4,340900ff +34825e8,11390007 +34825f0,2b290031 +34825f4,15200005 +34825f8,34190000 +34825fc,34190001 +3482600,10000002 +3482608,34190000 +348260c,3e00008 +3482614,27bdfff0 +3482618,afa80000 +348261c,e7a20004 +3482620,e7a40008 +3482624,3c088040 +3482628,25080cd4 +348262c,91080000 +3482630,1100000f +3482634,340d0200 +3482638,3c08801e +348263c,2508aa30 +3482640,c5020028 +3482644,3c08c496 +3482648,44882000 +3482650,4604103c +3482658,45010004 +3482660,340d0200 +3482664,10000002 +348266c,340d00c0 +3482670,c7a40008 +3482674,c7a20004 +3482678,8fa80000 +348267c,3e00008 +3482680,27bd0010 +3482684,8e2a1d44 +3482688,314a0100 +348268c,1540000a +3482694,8e2a1d48 +3482698,314a0100 +348269c,15400007 +34826a4,8e211d48 +34826a8,342a0100 +34826ac,ae2a1d48 +34826b0,10000003 +34826b4,5024 +34826b8,240c0000 +34826bc,340a0001 +34826c0,3e00008 +34826c8,27bdfff0 +34826cc,afbf0000 +34826d0,c10103f +34826d8,8ece1c44 +34826dc,3c18db06 +34826e0,8fbf0000 +34826e4,3e00008 +34826e8,27bd0010 +34826f0,a21901e9 +34826f4,27bdffe0 34826f8,afbf0004 34826fc,afa40008 -3482700,afa1000c -3482704,c100f64 -3482708,2002021 -348270c,8fbf0004 -3482710,8fa40008 -3482714,8fa1000c -3482718,3e00008 -348271c,27bd0010 -3482720,27bdffe0 -3482724,afbf0004 -3482728,afa10008 -348272c,afa2000c -3482730,afa30010 -3482734,afac0014 -3482738,c100f8b -348273c,3002021 -3482740,40c821 -3482744,8fbf0004 -3482748,8fa10008 -348274c,8fa2000c -3482750,8fa30010 -3482754,8fac0014 -3482758,3e00008 -348275c,27bd0020 -3482760,3f800000 -3482764,34080004 -3482768,3c09801d -348276c,252984a0 -3482770,8d291c44 -3482774,11200016 -348277c,3c018040 -3482780,c4362760 -3482788,46166302 -348278c,9127014f -3482790,1507000f -3482794,448f2000 -3482798,3c07803a -348279c,24e78bc0 -34827a0,8d280664 -34827a4,1507000a -34827ac,3c088040 -34827b0,25080ce0 -34827b4,91080000 -34827b8,11000005 -34827c0,3c083fc0 -34827c4,4488b000 -34827cc,46166302 -34827d4,44056000 -34827d8,3e00008 -34827e0,3c188040 -34827e4,97180848 -34827e8,a5d80794 -34827ec,3c188040 -34827f0,9718084a -34827f4,a5d80796 -34827f8,3c188040 -34827fc,9718084c -3482800,a5d80798 -3482804,ec021 -3482808,3e00008 -3482810,27bdffe8 -3482814,afbf0004 -3482818,afb00008 -348281c,808021 +3482700,afa5000c +3482704,afa80010 +3482708,e7aa0014 +348270c,e7b00018 +3482710,c100f58 +3482714,2002021 +3482718,8fbf0004 +348271c,8fa40008 +3482720,8fa5000c +3482724,8fa80010 +3482728,c7aa0014 +348272c,c7b00018 +3482730,3e00008 +3482734,27bd0020 +3482738,3f800000 +348273c,34080004 +3482740,3c09801d +3482744,252984a0 +3482748,8d291c44 +348274c,11200016 +3482754,3c018040 +3482758,c4362738 +3482760,46166302 +3482764,9127014f +3482768,1507000f +348276c,448f2000 +3482770,3c07803a +3482774,24e78bc0 +3482778,8d280664 +348277c,1507000a +3482784,3c088040 +3482788,25080cdf +348278c,91080000 +3482790,11000005 +3482798,3c083fc0 +348279c,4488b000 +34827a4,46166302 +34827ac,44056000 +34827b0,3e00008 +34827b8,3c188040 +34827bc,97180848 +34827c0,a5d80794 +34827c4,3c188040 +34827c8,9718084a +34827cc,a5d80796 +34827d0,3c188040 +34827d4,9718084c +34827d8,a5d80798 +34827dc,ec021 +34827e0,3e00008 +34827e8,27bdffe8 +34827ec,afbf0004 +34827f0,afb00008 +34827f4,808021 +34827f8,3c048040 +34827fc,9484086c +3482800,c100a14 +3482808,ae02022c +348280c,3c048040 +3482810,9484086e +3482814,c100a14 +348281c,ae020230 3482820,3c048040 -3482824,9484086c -3482828,c100a1e -3482830,ae02022c -3482834,3c048040 -3482838,9484086e -348283c,c100a1e -3482844,ae020230 -3482848,3c048040 -348284c,94840870 -3482850,c100a1e -3482858,ae020234 -348285c,c100a1e -3482860,340400ff -3482864,ae020238 -3482868,8fbf0004 -348286c,8fb00008 +3482824,94840870 +3482828,c100a14 +3482830,ae020234 +3482834,c100a14 +3482838,340400ff +348283c,ae020238 +3482840,8fbf0004 +3482844,8fb00008 +3482848,3e00008 +348284c,27bd0018 +3482850,28810020 +3482854,14200005 +3482858,288100e0 +348285c,10200003 +3482864,10000002 +3482868,861023 +348286c,851023 3482870,3e00008 -3482874,27bd0018 -3482878,28810020 -348287c,14200005 -3482880,288100e0 -3482884,10200003 -348288c,10000002 -3482890,861023 -3482894,851023 -3482898,3e00008 -348289c,304200ff -34828a4,2b010192 -34828a8,10200004 -34828b0,3c088010 -34828b4,3e00008 -34828b8,25088ff8 -34828bc,3c088040 -34828c0,25080c9c -34828c4,3e00008 -34828c8,2718fe6d -34828cc,8e1821 -34828d0,28c10192 -34828d4,10200004 -34828dc,3c198010 -34828e0,3e00008 -34828e4,27398ff8 -34828e8,3c198040 -34828ec,27390c9c +3482874,304200ff +348287c,2b010192 +3482880,10200004 +3482888,3c088010 +348288c,3e00008 +3482890,25088ff8 +3482894,3c088040 +3482898,25080c9c +348289c,3e00008 +34828a0,2718fe6d +34828a4,8e1821 +34828a8,28c10192 +34828ac,10200004 +34828b4,3c198010 +34828b8,3e00008 +34828bc,27398ff8 +34828c0,3c198040 +34828c4,27390c9c +34828c8,3e00008 +34828cc,24c6fe6d +34828d0,86190000 +34828d4,8e050004 +34828d8,26040008 +34828dc,194023 +34828e0,29010192 +34828e4,10200004 +34828ec,3c138010 34828f0,3e00008 -34828f4,24c6fe6d -34828f8,86190000 -34828fc,8e050004 -3482900,26040008 -3482904,194023 -3482908,29010192 -348290c,10200004 -3482914,3c138010 -3482918,3e00008 -348291c,26738ff8 -3482920,3c138040 -3482924,26730c9c -3482928,3e00008 -348292c,2508fe6d -3482930,8e040010 -3482934,28610192 -3482938,10200004 -3482940,3c138010 -3482944,8100a56 -3482948,26738ff8 -348294c,3c138040 -3482950,26730c9c -3482954,2463fe6d -3482958,378c0 -348295c,26f1021 -3482960,3e00008 -3482964,8c450000 -3482968,8fa40020 -348296c,3c088040 -3482970,81080cd7 -3482974,24060050 -3482978,1100000b -3482980,84860014 -3482984,50c00008 -3482988,24060050 -348298c,80a81d44 -3482990,c85824 -3482994,55600004 -3482998,24060050 -348299c,1064025 -34829a0,a0a81d44 -34829a4,24c60014 -34829a8,3e00008 -34829b0,27bdfff0 -34829b4,afbf0004 -34829b8,afa80008 -34829bc,afa9000c -34829c0,3c088040 -34829c4,81080cd7 -34829c8,11000009 -34829d0,86080014 -34829d4,11000006 -34829dc,82291d44 -34829e0,1094024 -34829e4,24020001 -34829e8,11000003 -34829f0,c01c6a5 -34829f8,8fbf0004 -34829fc,8fa80008 -3482a00,8fa9000c -3482a04,27bd0010 -3482a08,3e00008 -3482a10,8fb00034 -3482a14,848800b4 -3482a18,11000002 -3482a20,a48000b0 -3482a24,3e00008 -3482a2c,1b9fcd5 -3482a30,fb251ad2 -3482a34,f2dc -3482a38,8022 -3482a3c,23bdffec -3482a40,afbf0010 -3482a44,9608001c -3482a48,31088000 -3482a4c,1100000f -3482a54,3c038012 -3482a58,2463a5d0 -3482a5c,946d0edc -3482a60,31ad0400 -3482a64,11a0000b -3482a6c,8c6e0004 -3482a70,15c00008 -3482a78,948d1d2a -3482a7c,35ae0001 -3482a80,a48e1d2a -3482a84,10000003 -3482a8c,c037385 -3482a94,8fbf0010 -3482a98,23bd0014 -3482a9c,3e00008 -3482aa4,8c6e0004 -3482aa8,3e00008 -3482ab0,8488001c -3482ab4,34010002 -3482ab8,15010015 -3482ac0,3c028012 -3482ac4,2442a5d0 -3482ac8,8c4b0004 -3482acc,15600012 -3482ad4,3c098040 -3482ad8,25292b20 -3482adc,ac890154 -3482ae0,27bdffe0 -3482ae4,afbf0010 -3482ae8,afa50014 -3482aec,8fa60014 -3482af0,3c058040 -3482af4,24a52a2c -3482af8,c009571 -3482afc,24c41c24 -3482b00,8fbf0010 -3482b04,27bd0020 -3482b08,10000003 -3482b10,afa40000 -3482b14,afa50004 -3482b18,3e00008 -3482b20,27bdffd8 -3482b24,afb00020 -3482b28,afbf0024 -3482b2c,afa5002c -3482b30,808025 -3482b34,c600015c -3482b38,3c01c4a4 -3482b3c,24212000 -3482b40,44811000 -3482b44,3c028012 -3482b48,2442a5d0 -3482b4c,944b0edc -3482b50,316c0400 -3482b54,944b0ee0 -3482b58,11800031 -3482b60,94ad1d2a -3482b64,31ae0001 -3482b68,11c00006 -3482b70,31adfffe -3482b74,a4ad1d2a -3482b78,34010200 -3482b7c,1615826 -3482b80,a44b0ee0 -3482b84,316c0200 -3482b88,1180000b -3482b90,34010000 +34828f4,26738ff8 +34828f8,3c138040 +34828fc,26730c9c +3482900,3e00008 +3482904,2508fe6d +3482908,8e040010 +348290c,28610192 +3482910,10200004 +3482918,3c138010 +348291c,8100a4c +3482920,26738ff8 +3482924,3c138040 +3482928,26730c9c +348292c,2463fe6d +3482930,378c0 +3482934,26f1021 +3482938,3e00008 +348293c,8c450000 +3482940,8fa40020 +3482944,3c088040 +3482948,81080cd7 +348294c,24060050 +3482950,1100000b +3482958,84860014 +348295c,50c00008 +3482960,24060050 +3482964,80a81d44 +3482968,c85824 +348296c,55600004 +3482970,24060050 +3482974,1064025 +3482978,a0a81d44 +348297c,24c60014 +3482980,3e00008 +3482988,27bdfff0 +348298c,afbf0004 +3482990,afa80008 +3482994,afa9000c +3482998,3c088040 +348299c,81080cd7 +34829a0,11000009 +34829a8,86080014 +34829ac,11000006 +34829b4,82291d44 +34829b8,1094024 +34829bc,24020001 +34829c0,11000003 +34829c8,c01c6a5 +34829d0,8fbf0004 +34829d4,8fa80008 +34829d8,8fa9000c +34829dc,27bd0010 +34829e0,3e00008 +34829e8,8fb00034 +34829ec,848800b4 +34829f0,11000002 +34829f8,a48000b0 +34829fc,3e00008 +3482a04,1b9fcd5 +3482a08,fb251ad2 +3482a0c,f2dc +3482a10,8022 +3482a14,23bdffec +3482a18,afbf0010 +3482a1c,9608001c +3482a20,31088000 +3482a24,1100000f +3482a2c,3c038012 +3482a30,2463a5d0 +3482a34,946d0edc +3482a38,31ad0400 +3482a3c,11a0000b +3482a44,8c6e0004 +3482a48,15c00008 +3482a50,948d1d2a +3482a54,35ae0001 +3482a58,a48e1d2a +3482a5c,10000003 +3482a64,c037385 +3482a6c,8fbf0010 +3482a70,23bd0014 +3482a74,3e00008 +3482a7c,8c6e0004 +3482a80,3e00008 +3482a88,8488001c +3482a8c,34010002 +3482a90,15010015 +3482a98,3c028012 +3482a9c,2442a5d0 +3482aa0,8c4b0004 +3482aa4,15600012 +3482aac,3c098040 +3482ab0,25292af8 +3482ab4,ac890154 +3482ab8,27bdffe0 +3482abc,afbf0010 +3482ac0,afa50014 +3482ac4,8fa60014 +3482ac8,3c058040 +3482acc,24a52a04 +3482ad0,c009571 +3482ad4,24c41c24 +3482ad8,8fbf0010 +3482adc,27bd0020 +3482ae0,10000003 +3482ae8,afa40000 +3482aec,afa50004 +3482af0,3e00008 +3482af8,27bdffd8 +3482afc,afb00020 +3482b00,afbf0024 +3482b04,afa5002c +3482b08,808025 +3482b0c,c600015c +3482b10,3c01c4a4 +3482b14,24212000 +3482b18,44811000 +3482b1c,3c028012 +3482b20,2442a5d0 +3482b24,944b0edc +3482b28,316c0400 +3482b2c,944b0ee0 +3482b30,11800031 +3482b38,94ad1d2a +3482b3c,31ae0001 +3482b40,11c00006 +3482b48,31adfffe +3482b4c,a4ad1d2a +3482b50,34010200 +3482b54,1615826 +3482b58,a44b0ee0 +3482b5c,316c0200 +3482b60,1180000b +3482b68,34010000 +3482b6c,44812000 +3482b70,3c064080 +3482b74,44863000 +3482b7c,46060200 +3482b80,4604403c +3482b88,10000009 +3482b90,3c01c42a 3482b94,44812000 -3482b98,3c064080 +3482b98,3c06c080 3482b9c,44863000 3482ba4,46060200 -3482ba8,4604403c -3482bb0,10000009 -3482bb8,3c01c42a -3482bbc,44812000 -3482bc0,3c06c080 -3482bc4,44863000 -3482bcc,46060200 -3482bd0,4608203c -3482bd8,45000005 -3482be0,46004106 -3482be4,c008c42 -3482be8,3405205e -3482bec,2002025 -3482bf0,e604015c -3482bf4,46022100 -3482bf8,e6040028 -3482bfc,4600240d -3482c00,44098000 -3482c04,8fa2002c -3482c08,8c5807c0 -3482c0c,8f190028 -3482c10,240ffb57 -3482c14,a72f0012 -3482c18,a7290022 -3482c1c,a7290032 -3482c20,8fbf0024 -3482c24,8fb00020 -3482c28,27bd0028 -3482c2c,3e00008 -3482c34,ac20753c -3482c38,3c018040 -3482c3c,90210cdc -3482c40,10200008 -3482c44,3c01801d -3482c48,242184a0 -3482c4c,94211d2c -3482c50,302100c0 -3482c54,14200003 -3482c5c,801ce4c -3482c64,801ce45 -3482c6c,3c088012 -3482c70,2508a5d0 -3482c74,8d0a0004 -3482c78,11400006 -3482c7c,8d090000 -3482c80,3401003b -3482c84,15210008 -3482c8c,3c0bc47a -3482c90,ac8b0028 -3482c94,3401016d -3482c98,15210003 -3482ca0,3c0bc47a -3482ca4,ac8b0028 -3482ca8,3e00008 -3482cac,340e0001 -3482cb4,3c0f8040 -3482cb8,25ef2cb0 -3482cbc,81ef0000 -3482cc0,3c188040 -3482cc4,27182cb1 -3482cc8,83180000 -3482ccc,1f87820 -3482cd0,5e00007 -3482cd4,34010003 -3482cd8,1e1082a -3482cdc,14200002 -3482ce4,340f0008 -3482ce8,10000003 -3482cec,1f08004 -3482cf0,f7822 -3482cf4,1f08007 -3482cf8,90af003d -3482cfc,11e00004 -3482d04,108043 -3482d08,108400 -3482d0c,108403 -3482d10,3e00008 -3482d1c,4f1021 -3482d20,3c098040 -3482d24,81292d18 -3482d28,11200008 -3482d2c,8042a65c -3482d30,3c0a801d -3482d34,254a84a0 -3482d38,8d491d44 -3482d3c,31210002 -3482d40,14200002 -3482d44,3402000a -3482d48,34020000 -3482d4c,3e00008 -3482d54,594021 -3482d58,3c0a8040 -3482d5c,814a2d18 -3482d60,11400002 -3482d64,8109008c -3482d68,34090000 -3482d6c,3e00008 -3482d74,1ee7821 -3482d78,3c0a8040 -3482d7c,814a2d18 -3482d80,11400002 -3482d84,81efa65c -3482d88,340f0000 +3482ba8,4608203c +3482bb0,45000005 +3482bb8,46004106 +3482bbc,c008c42 +3482bc0,3405205e +3482bc4,2002025 +3482bc8,e604015c +3482bcc,46022100 +3482bd0,e6040028 +3482bd4,4600240d +3482bd8,44098000 +3482bdc,8fa2002c +3482be0,8c5807c0 +3482be4,8f190028 +3482be8,240ffb57 +3482bec,a72f0012 +3482bf0,a7290022 +3482bf4,a7290032 +3482bf8,8fbf0024 +3482bfc,8fb00020 +3482c00,27bd0028 +3482c04,3e00008 +3482c0c,ac20753c +3482c10,3c018040 +3482c14,90210cdc +3482c18,10200008 +3482c1c,3c01801d +3482c20,242184a0 +3482c24,94211d2c +3482c28,302100c0 +3482c2c,14200003 +3482c34,801ce4c +3482c3c,801ce45 +3482c44,3c088012 +3482c48,2508a5d0 +3482c4c,8d0a0004 +3482c50,11400006 +3482c54,8d090000 +3482c58,3401003b +3482c5c,15210008 +3482c64,3c0bc47a +3482c68,ac8b0028 +3482c6c,3401016d +3482c70,15210003 +3482c78,3c0bc47a +3482c7c,ac8b0028 +3482c80,3e00008 +3482c84,340e0001 +3482c8c,3c0f8040 +3482c90,25ef2c88 +3482c94,81ef0000 +3482c98,3c188040 +3482c9c,27182c89 +3482ca0,83180000 +3482ca4,1f87820 +3482ca8,5e00007 +3482cac,34010003 +3482cb0,1e1082a +3482cb4,14200002 +3482cbc,340f0008 +3482cc0,10000003 +3482cc4,1f08004 +3482cc8,f7822 +3482ccc,1f08007 +3482cd0,90af003d +3482cd4,11e00004 +3482cdc,108043 +3482ce0,108400 +3482ce4,108403 +3482ce8,3e00008 +3482cf4,4f1021 +3482cf8,3c098040 +3482cfc,81292cf0 +3482d00,11200008 +3482d04,8042a65c +3482d08,3c0a801d +3482d0c,254a84a0 +3482d10,8d491d44 +3482d14,31210002 +3482d18,14200002 +3482d1c,3402000a +3482d20,34020000 +3482d24,3e00008 +3482d2c,594021 +3482d30,3c0a8040 +3482d34,814a2cf0 +3482d38,11400002 +3482d3c,8109008c +3482d40,34090000 +3482d44,3e00008 +3482d4c,1ee7821 +3482d50,3c0a8040 +3482d54,814a2cf0 +3482d58,11400002 +3482d5c,81efa65c +3482d60,340f0000 +3482d64,3e00008 +3482d6c,3c098040 +3482d70,81292cf0 +3482d74,11200005 +3482d78,3c0a801d +3482d7c,254a84a0 +3482d80,8d491d44 +3482d84,35290002 +3482d88,ad491d44 3482d8c,3e00008 -3482d94,3c098040 -3482d98,81292d18 -3482d9c,11200005 -3482da0,3c0a801d -3482da4,254a84a0 -3482da8,8d491d44 -3482dac,35290002 -3482db0,ad491d44 -3482db4,3e00008 -3482db8,afa50024 -3482e80,ff00 -3482e84,3c0a8040 -3482e88,254a2e82 -3482e8c,914b0000 -3482e90,340c00ff -3482e94,a14c0000 -3482e98,34087fff -3482e9c,15c80006 -3482ea0,3c098040 -3482ea4,25292e40 -3482ea8,116c000c -3482eac,b5840 -3482eb0,12b4821 -3482eb4,952e0000 -3482eb8,27bdfff0 -3482ebc,afbf0004 -3482ec0,afa40008 -3482ec4,c100bcb -3482ec8,1c02021 -3482ecc,407021 -3482ed0,8fbf0004 -3482ed4,8fa40008 -3482ed8,27bd0010 -3482edc,3e00008 -3482ee0,a42e1e1a -3482ee4,9608001c -3482ee8,84303 -3482eec,3108000f -3482ef0,29090002 -3482ef4,1520000b -3482efc,960d0018 -3482f00,27bdfff0 -3482f04,afbf0004 -3482f08,afa40008 -3482f0c,c100bcb -3482f10,1a02021 -3482f14,406821 -3482f18,8fbf0004 -3482f1c,8fa40008 -3482f20,27bd0010 -3482f24,3e00008 -3482f28,270821 -3482f2c,34087ff9 -3482f30,884022 -3482f34,501000f -3482f38,34081000 -3482f3c,884022 -3482f40,500000c -3482f44,3c098012 -3482f48,2529a5d0 -3482f4c,3c0a8040 -3482f50,254a2dbc -3482f54,3c0b8040 -3482f58,256b2e82 -3482f5c,a1680000 -3482f60,84080 -3482f64,1485021 -3482f68,95440000 -3482f6c,91480002 -3482f70,a1281397 -3482f74,3e00008 -3482f78,801021 -3482f7c,8c6d0004 -3482f80,3c0e8040 -3482f84,81ce0cde -3482f88,1ae7825 -3482f8c,11e0000a -3482f94,11c00006 -3482f9c,946e0ed4 -3482fa0,31ce0010 -3482fa4,1cd7025 -3482fa8,11c00003 -3482fb0,3e00008 -3482fb4,340f0001 -3482fb8,3e00008 -3482fbc,340f0000 -3482fc0,1000 -3482fc4,4800 -3482fcc,7000 -3482fd0,4800 -3482fd8,8040ef80 -3482fdc,42890 -3482fe0,34191000 -3482fe4,340a4800 -3482fe8,340d0000 -3482fec,340c7000 -3482ff0,340e4800 -3482ff4,3e00008 -3482ff8,34180000 -3483000,3c088012 -3483004,2508a5d0 -3483008,95090eda -348300c,31290008 -3483010,15200008 -3483014,8d090004 -3483018,15200004 -348301c,3c098040 -3483020,81292ffc -3483024,15200003 -348302c,3e00008 -3483030,34090000 -3483034,3e00008 -3483038,34090001 -348303c,3c08801d -3483040,25082578 -3483044,3409006c -3483048,8d0a6300 -348304c,112a0009 -3483050,340a0001 -3483054,340b0036 -3483058,ad0a6300 -348305c,a10b6304 -3483060,240cffff -3483064,810e63e7 -3483068,15cc0002 -348306c,340d0002 -3483070,a10d63e7 -3483074,3e00008 -3483078,24060022 -3483084,afb0003c -3483088,27bdffe0 -348308c,afbf0014 -3483090,3c098040 -3483094,2529307c -3483098,812a0000 -348309c,1540000a -34830a4,8e4b0028 -34830a8,3c0c4370 -34830ac,16c082a -34830b0,14200005 -34830b4,340d0001 -34830b8,a12d0000 -34830bc,3404001b -34830c0,c032a9c -34830c8,8fbf0014 -34830cc,3e00008 -34830d0,27bd0020 -34830d4,8e721c44 -34830d8,240e0003 -34830dc,a22e05b0 -34830e0,926f07af -34830e4,4406b000 -34830e8,4407a000 -34830ec,3e00008 -34830f4,90580000 -34830f8,27bdffd0 -34830fc,afbf0014 -3483100,afa40018 -3483104,afa5001c -3483108,afa60020 -348310c,afa70024 -3483110,3c048040 -3483114,8084307c -3483118,1080001b -3483120,3c048040 -3483124,8c843080 -3483128,2885001e -348312c,14a00016 -3483134,28850050 -3483138,10a0000c -3483140,3c043d4d -3483144,2484cccd -3483148,ae4404d0 -348314c,2402025 -3483150,248404c8 -3483154,3c05437f -3483158,3c063f80 -348315c,3c074120 -3483160,c0190a0 -3483168,10000007 -348316c,2402025 -3483170,248404c8 -3483174,34050000 -3483178,3c063f80 -348317c,3c074120 -3483180,c0190a0 -3483188,8fbf0014 -348318c,8fa40018 -3483190,8fa5001c -3483194,8fa60020 -3483198,8fa70024 -348319c,3e00008 -34831a0,27bd0030 -34831a4,860800b6 -34831a8,25084000 -34831ac,a60800b6 -34831b0,34080001 -34831b4,a20805e8 -34831b8,a2000554 -34831bc,8e090004 -34831c0,240afffe -34831c4,1495824 -34831c8,ae0b0004 -34831cc,3c088040 -34831d0,25083214 -34831d4,3e00008 -34831d8,ae08013c -34831dc,860800b6 -34831e0,2508c000 -34831e4,a60800b6 -34831e8,34080001 -34831ec,a20805e8 -34831f0,a2000554 -34831f4,8e090004 -34831f8,240afffe -34831fc,1495824 -3483200,ae0b0004 -3483204,3c088040 -3483208,25083214 -348320c,3e00008 -3483210,ae08013c -3483214,27bdffd0 -3483218,afbf0014 -348321c,afa40018 -3483220,afa5001c -3483224,34080001 -3483228,a0880554 -348322c,8488001c -3483230,11000006 -3483238,3c048040 -348323c,8c843080 -3483240,24850001 -3483244,3c018040 -3483248,ac253080 -348324c,3c048040 -3483250,8c843080 -3483254,34050003 -3483258,14850009 -3483260,8fa40018 -3483264,8488001c -3483268,34090001 -348326c,11090002 -3483270,240539b0 -3483274,240539b1 -3483278,c008bf4 -3483280,28850028 -3483284,14a0001a -348328c,8fa40018 -3483290,24840028 -3483294,3c0543c8 -3483298,3c063f80 -348329c,3c0740c0 -34832a0,c0190a0 -34832a8,8fa40018 -34832ac,24840558 -34832b0,c023270 -34832b8,8fa40018 -34832bc,c008bf4 -34832c0,2405311f -34832c4,3c048040 -34832c8,8c843080 -34832cc,34080061 -34832d0,14880007 -34832d8,8fa40018 -34832dc,8fa5001c -34832e0,8c8b0138 -34832e4,8d6b0010 -34832e8,256913ec -34832ec,ac89013c -34832f0,8fbf0014 -34832f4,3e00008 -34832f8,27bd0030 -34832fc,3c01c416 -3483300,44816000 -3483304,3e00008 -3483308,3025 -348330c,3c014416 -3483310,44816000 -3483314,3e00008 -3483318,3025 -348331c,afa40018 -3483320,3c08801e -3483324,2508aa30 -3483328,3e00008 -348332c,ad000678 -3483330,27bdffe8 -3483334,afaa0004 -3483338,846f4a2a -348333c,340a0002 -3483340,15ea0002 -3483344,340a0001 -3483348,a46a4a2a -348334c,846f4a2a -3483350,8faa0004 -3483354,3e00008 -3483358,27bd0018 -348335c,27bdffe8 -3483360,afaa0004 -3483364,846e4a2a -3483368,340a0002 -348336c,15ca0002 -3483370,340a0003 -3483374,a46a4a2a -3483378,846e4a2a -348337c,8faa0004 -3483380,3e00008 -3483384,27bd0018 -3483388,27bdffe8 -348338c,afaa0004 -3483390,85034a2a -3483394,340a0002 -3483398,146a0002 -348339c,340a0001 -34833a0,a50a4a2a -34833a4,85034a2a -34833a8,8faa0004 -34833ac,3e00008 -34833b0,27bd0018 -34833b4,27bdffe8 -34833b8,afaa0004 -34833bc,85034a2a -34833c0,340a0002 -34833c4,146a0002 -34833c8,340a0003 -34833cc,a50a4a2a -34833d0,85034a2a -34833d4,8faa0004 -34833d8,3e00008 -34833dc,27bd0018 -34833e0,27bdffe8 -34833e4,afaa0004 -34833e8,85034a2a -34833ec,340a0002 -34833f0,146a0002 -34833f4,340a0001 -34833f8,a50a4a2a -34833fc,85034a2a -3483400,8faa0004 -3483404,3e00008 -3483408,27bd0018 -348340c,27bdffe8 -3483410,afaa0004 -3483414,85034a2a -3483418,340a0002 -348341c,146a0002 -3483420,340a0003 -3483424,a50a4a2a -3483428,85034a2a -348342c,8faa0004 -3483430,3e00008 -3483434,27bd0018 -3483438,27bdffe8 -348343c,afaa0004 -3483440,a42bca2a -3483444,340a0002 -3483448,156a0002 -348344c,340a0003 -3483450,a50a4a2a -3483454,85034a2a -3483458,8faa0004 -348345c,3e00008 -3483460,27bd0018 -3483464,27bdffe8 -3483468,afaa0004 -348346c,85034a2a -3483470,340a0002 -3483474,146a0002 -3483478,340a0001 -348347c,a50a4a2a -3483480,85034a2a -3483484,8faa0004 -3483488,3e00008 -348348c,27bd0018 -3483490,27bdffe8 -3483494,afaa0004 -3483498,85034a2a -348349c,340a0002 -34834a0,146a0002 -34834a4,340a0003 -34834a8,a50a4a2a -34834ac,85034a2a -34834b0,8faa0004 -34834b4,3e00008 -34834b8,27bd0018 -34834bc,3c08801e -34834c0,25084ee8 -34834c4,3409f000 -34834c8,a5090000 -34834cc,3e00008 -34834d0,84cb4a2e -34834d4,24a56f04 -34834d8,8c880144 -34834dc,11050007 -34834e0,3c09801e -34834e4,2529aa30 -34834e8,3c0a446a -34834ec,254ac000 -34834f0,3c0bc324 -34834f4,ad2a0024 -34834f8,ad2b002c -34834fc,3e00008 -3483504,27bdffd8 -3483508,afbf0024 -348350c,afa40028 -3483510,afa5002c -3483514,afa60030 -3483518,c022865 -348351c,8fa40030 -3483520,44822000 -3483524,44800000 -3483528,240e0002 -348352c,468021a0 -3483530,afae0018 -3483534,8fa40028 -3483538,8fa5002c -348353c,8fa60030 -3483540,3c073f80 -3483544,3c080400 -3483548,250832b0 -348354c,14c80002 -3483554,3c074040 -3483558,e7a60014 -348355c,e7a00010 -3483560,c023000 -3483564,e7a0001c -3483568,8fbf0024 -348356c,8fbf0024 -3483570,3e00008 -3483574,27bd0028 +3482d90,afa50024 +3482e58,ff00 +3482e5c,3c0a8040 +3482e60,254a2e5a +3482e64,914b0000 +3482e68,340c00ff +3482e6c,a14c0000 +3482e70,34087fff +3482e74,15c80006 +3482e78,3c098040 +3482e7c,25292e18 +3482e80,116c000c +3482e84,b5840 +3482e88,12b4821 +3482e8c,952e0000 +3482e90,27bdfff0 +3482e94,afbf0004 +3482e98,afa40008 +3482e9c,c100bc1 +3482ea0,1c02021 +3482ea4,407021 +3482ea8,8fbf0004 +3482eac,8fa40008 +3482eb0,27bd0010 +3482eb4,3e00008 +3482eb8,a42e1e1a +3482ebc,9608001c +3482ec0,84303 +3482ec4,3108000f +3482ec8,29090002 +3482ecc,1520000b +3482ed4,960d0018 +3482ed8,27bdfff0 +3482edc,afbf0004 +3482ee0,afa40008 +3482ee4,c100bc1 +3482ee8,1a02021 +3482eec,406821 +3482ef0,8fbf0004 +3482ef4,8fa40008 +3482ef8,27bd0010 +3482efc,3e00008 +3482f00,270821 +3482f04,34087ff9 +3482f08,884022 +3482f0c,501000f +3482f10,34081000 +3482f14,884022 +3482f18,500000c +3482f1c,3c098012 +3482f20,2529a5d0 +3482f24,3c0a8040 +3482f28,254a2d94 +3482f2c,3c0b8040 +3482f30,256b2e5a +3482f34,a1680000 +3482f38,84080 +3482f3c,1485021 +3482f40,95440000 +3482f44,91480002 +3482f48,a1281397 +3482f4c,3e00008 +3482f50,801021 +3482f54,8c6d0004 +3482f58,3c0e8040 +3482f5c,81ce0cdd +3482f60,1ae7825 +3482f64,11e0000a +3482f6c,11c00006 +3482f74,946e0ed4 +3482f78,31ce0010 +3482f7c,1cd7025 +3482f80,11c00003 +3482f88,3e00008 +3482f8c,340f0001 +3482f90,3e00008 +3482f94,340f0000 +3482f98,1000 +3482f9c,4800 +3482fa4,7000 +3482fa8,4800 +3482fb0,8040f310 +3482fb4,42890 +3482fb8,34191000 +3482fbc,340a4800 +3482fc0,340d0000 +3482fc4,340c7000 +3482fc8,340e4800 +3482fcc,3e00008 +3482fd0,34180000 +3482fd8,3c088012 +3482fdc,2508a5d0 +3482fe0,95090eda +3482fe4,31290008 +3482fe8,15200008 +3482fec,8d090004 +3482ff0,15200004 +3482ff4,3c098040 +3482ff8,81292fd4 +3482ffc,15200003 +3483004,3e00008 +3483008,34090000 +348300c,3e00008 +3483010,34090001 +3483014,3c08801d +3483018,25082578 +348301c,3409006c +3483020,8d0a6300 +3483024,112a0009 +3483028,340a0001 +348302c,340b0036 +3483030,ad0a6300 +3483034,a10b6304 +3483038,240cffff +348303c,810e63e7 +3483040,15cc0002 +3483044,340d0002 +3483048,a10d63e7 +348304c,3e00008 +3483050,24060022 +348305c,afb0003c +3483060,27bdffe0 +3483064,afbf0014 +3483068,3c098040 +348306c,25293054 +3483070,812a0000 +3483074,1540000a +348307c,8e4b0028 +3483080,3c0c4370 +3483084,16c082a +3483088,14200005 +348308c,340d0001 +3483090,a12d0000 +3483094,3404001b +3483098,c032a9c +34830a0,8fbf0014 +34830a4,3e00008 +34830a8,27bd0020 +34830ac,8e721c44 +34830b0,240e0003 +34830b4,a22e05b0 +34830b8,926f07af +34830bc,4406b000 +34830c0,4407a000 +34830c4,3e00008 +34830cc,90580000 +34830d0,27bdffd0 +34830d4,afbf0014 +34830d8,afa40018 +34830dc,afa5001c +34830e0,afa60020 +34830e4,afa70024 +34830e8,3c048040 +34830ec,80843054 +34830f0,1080001b +34830f8,3c048040 +34830fc,8c843058 +3483100,2885001e +3483104,14a00016 +348310c,28850050 +3483110,10a0000c +3483118,3c043d4d +348311c,2484cccd +3483120,ae4404d0 +3483124,2402025 +3483128,248404c8 +348312c,3c05437f +3483130,3c063f80 +3483134,3c074120 +3483138,c0190a0 +3483140,10000007 +3483144,2402025 +3483148,248404c8 +348314c,34050000 +3483150,3c063f80 +3483154,3c074120 +3483158,c0190a0 +3483160,8fbf0014 +3483164,8fa40018 +3483168,8fa5001c +348316c,8fa60020 +3483170,8fa70024 +3483174,3e00008 +3483178,27bd0030 +348317c,860800b6 +3483180,25084000 +3483184,a60800b6 +3483188,34080001 +348318c,a20805e8 +3483190,a2000554 +3483194,8e090004 +3483198,240afffe +348319c,1495824 +34831a0,ae0b0004 +34831a4,3c088040 +34831a8,250831ec +34831ac,3e00008 +34831b0,ae08013c +34831b4,860800b6 +34831b8,2508c000 +34831bc,a60800b6 +34831c0,34080001 +34831c4,a20805e8 +34831c8,a2000554 +34831cc,8e090004 +34831d0,240afffe +34831d4,1495824 +34831d8,ae0b0004 +34831dc,3c088040 +34831e0,250831ec +34831e4,3e00008 +34831e8,ae08013c +34831ec,27bdffd0 +34831f0,afbf0014 +34831f4,afa40018 +34831f8,afa5001c +34831fc,34080001 +3483200,a0880554 +3483204,8488001c +3483208,11000006 +3483210,3c048040 +3483214,8c843058 +3483218,24850001 +348321c,3c018040 +3483220,ac253058 +3483224,3c048040 +3483228,8c843058 +348322c,34050003 +3483230,14850009 +3483238,8fa40018 +348323c,8488001c +3483240,34090001 +3483244,11090002 +3483248,240539b0 +348324c,240539b1 +3483250,c008bf4 +3483258,28850028 +348325c,14a0001a +3483264,8fa40018 +3483268,24840028 +348326c,3c0543c8 +3483270,3c063f80 +3483274,3c0740c0 +3483278,c0190a0 +3483280,8fa40018 +3483284,24840558 +3483288,c023270 +3483290,8fa40018 +3483294,c008bf4 +3483298,2405311f +348329c,3c048040 +34832a0,8c843058 +34832a4,34080061 +34832a8,14880007 +34832b0,8fa40018 +34832b4,8fa5001c +34832b8,8c8b0138 +34832bc,8d6b0010 +34832c0,256913ec +34832c4,ac89013c +34832c8,8fbf0014 +34832cc,3e00008 +34832d0,27bd0030 +34832d4,3c01c416 +34832d8,44816000 +34832dc,3e00008 +34832e0,3025 +34832e4,3c014416 +34832e8,44816000 +34832ec,3e00008 +34832f0,3025 +34832f4,afa40018 +34832f8,3c08801e +34832fc,2508aa30 +3483300,3e00008 +3483304,ad000678 +3483308,27bdffe8 +348330c,afaa0004 +3483310,846f4a2a +3483314,340a0002 +3483318,15ea0002 +348331c,340a0001 +3483320,a46a4a2a +3483324,846f4a2a +3483328,8faa0004 +348332c,3e00008 +3483330,27bd0018 +3483334,27bdffe8 +3483338,afaa0004 +348333c,846e4a2a +3483340,340a0002 +3483344,15ca0002 +3483348,340a0003 +348334c,a46a4a2a +3483350,846e4a2a +3483354,8faa0004 +3483358,3e00008 +348335c,27bd0018 +3483360,27bdffe8 +3483364,afaa0004 +3483368,85034a2a +348336c,340a0002 +3483370,146a0002 +3483374,340a0001 +3483378,a50a4a2a +348337c,85034a2a +3483380,8faa0004 +3483384,3e00008 +3483388,27bd0018 +348338c,27bdffe8 +3483390,afaa0004 +3483394,85034a2a +3483398,340a0002 +348339c,146a0002 +34833a0,340a0003 +34833a4,a50a4a2a +34833a8,85034a2a +34833ac,8faa0004 +34833b0,3e00008 +34833b4,27bd0018 +34833b8,27bdffe8 +34833bc,afaa0004 +34833c0,85034a2a +34833c4,340a0002 +34833c8,146a0002 +34833cc,340a0001 +34833d0,a50a4a2a +34833d4,85034a2a +34833d8,8faa0004 +34833dc,3e00008 +34833e0,27bd0018 +34833e4,27bdffe8 +34833e8,afaa0004 +34833ec,85034a2a +34833f0,340a0002 +34833f4,146a0002 +34833f8,340a0003 +34833fc,a50a4a2a +3483400,85034a2a +3483404,8faa0004 +3483408,3e00008 +348340c,27bd0018 +3483410,27bdffe8 +3483414,afaa0004 +3483418,a42bca2a +348341c,340a0002 +3483420,156a0002 +3483424,340a0003 +3483428,a50a4a2a +348342c,85034a2a +3483430,8faa0004 +3483434,3e00008 +3483438,27bd0018 +348343c,27bdffe8 +3483440,afaa0004 +3483444,85034a2a +3483448,340a0002 +348344c,146a0002 +3483450,340a0001 +3483454,a50a4a2a +3483458,85034a2a +348345c,8faa0004 +3483460,3e00008 +3483464,27bd0018 +3483468,27bdffe8 +348346c,afaa0004 +3483470,85034a2a +3483474,340a0002 +3483478,146a0002 +348347c,340a0003 +3483480,a50a4a2a +3483484,85034a2a +3483488,8faa0004 +348348c,3e00008 +3483490,27bd0018 +3483494,3c08801e +3483498,25084ee8 +348349c,3409f000 +34834a0,a5090000 +34834a4,3e00008 +34834a8,84cb4a2e +34834ac,24a56f04 +34834b0,8c880144 +34834b4,11050007 +34834b8,3c09801e +34834bc,2529aa30 +34834c0,3c0a446a +34834c4,254ac000 +34834c8,3c0bc324 +34834cc,ad2a0024 +34834d0,ad2b002c +34834d4,3e00008 +34834dc,27bdffd8 +34834e0,afbf0024 +34834e4,afa40028 +34834e8,afa5002c +34834ec,afa60030 +34834f0,c022865 +34834f4,8fa40030 +34834f8,44822000 +34834fc,44800000 +3483500,240e0002 +3483504,468021a0 +3483508,afae0018 +348350c,8fa40028 +3483510,8fa5002c +3483514,8fa60030 +3483518,3c073f80 +348351c,3c080400 +3483520,250832b0 +3483524,14c80002 +348352c,3c074040 +3483530,e7a60014 +3483534,e7a00010 +3483538,c023000 +348353c,e7a0001c +3483540,8fbf0024 +3483544,8fbf0024 +3483548,3e00008 +348354c,27bd0028 +3483550,3c0a8040 +3483554,814a0cd8 +3483558,11400003 +348355c,8ccb0138 +3483560,8d6b0010 +3483564,25690adc +3483568,3e00008 +348356c,acc90180 +3483570,27bdffe8 +3483574,afbf0014 3483578,3c0a8040 348357c,814a0cd8 -3483580,11400003 -3483584,8ccb0138 -3483588,8d6b0010 -348358c,25690adc -3483590,3e00008 -3483594,acc90180 -3483598,27bdffe8 -348359c,afbf0014 -34835a0,3c0a8040 -34835a4,814a0cd8 -34835a8,15400003 -34835b0,c037500 -34835b8,8fbf0014 -34835bc,3e00008 -34835c0,27bd0018 -34835c4,3c010080 -34835c8,3c180001 -34835cc,3e00008 -34835d0,8c4e0670 -34835d4,3c0a8040 -34835d8,814a0cd8 -34835dc,11400002 -34835e4,34180003 -34835e8,3c078012 -34835ec,24e7a5d0 -34835f0,3e00008 -34835f4,24010003 -34835f8,3c0a8040 -34835fc,814a0cd8 -3483600,11400008 -3483608,c100412 -3483610,3c08801e -3483614,25088966 -3483618,34090004 -348361c,a5090000 -3483624,8fbf0014 -3483628,3e00008 -348362c,27bd0018 -3483630,27bdffe0 -3483634,afbf0014 -3483638,afa10018 -348363c,afa4001c -3483640,3c0a8040 -3483644,814a0cd8 -3483648,1540000b -3483650,3c04801d -3483654,248484a0 -3483658,3c058040 -348365c,90a50cdb -3483660,34060000 -3483664,c037385 -348366c,34044802 -3483670,c0191bc -3483678,8fa4001c -348367c,8fa10018 -3483680,8fbf0014 -3483684,3e00008 -3483688,27bd0020 -3483690,27bdffe0 -3483694,afbf0014 -3483698,afa40018 -348369c,3c0d8040 -34836a0,81ad368c -34836a4,15a0000c -34836ac,3c08801e -34836b0,2508aa30 -34836b4,8d090670 -34836b8,340a4000 -34836bc,12a5824 -34836c0,1160000d -34836c8,34080001 -34836cc,3c018040 -34836d0,a028368c -34836d4,10000023 -34836d8,3c08801e -34836dc,2508aa30 -34836e0,8d090670 -34836e4,340a4000 -34836e8,12a5824 -34836ec,1160000c -34836f4,1000001b -34836f8,24a420d8 -34836fc,c037519 -3483704,24010002 -3483708,14410016 -3483710,3c08801e -3483714,25088966 -3483718,34090004 -348371c,a5090000 -3483720,3c0b8012 -3483724,256ba5d0 -3483728,816c0ede -348372c,358c0001 -3483730,a16c0ede -3483734,3c09801e -3483738,2529a2ba -348373c,340802ae -3483740,a5280000 -3483744,3408002a -3483748,3c09801e -348374c,2529a2fe -3483750,a1280000 -3483754,34080014 -3483758,3c09801e -348375c,2529a2b5 -3483760,a1280000 -3483764,8fbf0014 -3483768,3e00008 -348376c,27bd0020 -3483770,27bdffd0 -3483774,afbf0014 -3483778,afa80018 -348377c,afa9001c -3483780,afaa0020 -3483784,afab0024 -3483788,afac0028 -348378c,afad002c -3483790,3c088012 -3483794,2508a5d0 -3483798,85090f20 -348379c,31290040 -34837a0,1120000e -34837a4,3c08801e -34837a8,2508aa30 -34837ac,8d09039c -34837b0,1120000a -34837b4,340a00a1 -34837b8,852b0000 -34837bc,154b0007 -34837c0,240cf7ff -34837c4,8d0d066c -34837c8,18d6824 -34837cc,ad0d066c -34837d0,ad00039c -34837d4,ad00011c -34837d8,ad200118 -34837dc,afad002c -34837e0,afac0028 -34837e4,afab0024 -34837e8,afaa0020 -34837ec,afa9001c -34837f0,afa80018 -34837f4,afbf0014 -34837f8,860e001c -34837fc,3e00008 -3483800,27bd0030 -3483804,27bdffd0 -3483808,afbf0014 -348380c,afa80018 -3483810,afa9001c -3483814,afaa0020 -3483818,84a800a4 -348381c,34090002 -3483820,1509000c -3483824,340a0006 -3483828,80880003 -348382c,150a0009 -3483834,3c088012 -3483838,2508a5d0 -348383c,85090f20 -3483840,31290040 -3483844,11200003 -348384c,c0083ad -3483854,8faa0020 -3483858,8fa9001c -348385c,8fa80018 -3483860,8fbf0014 -3483864,8602001c -3483868,3e00008 -348386c,27bd0030 -3483870,27bdffd0 -3483874,afbf001c -3483878,afa40020 -348387c,afa50024 -3483880,e7a00028 -3483884,4602003c -348388c,45010005 -3483894,c100ecc -348389c,10000003 -34838a4,c100ece -34838ac,34060014 -34838b0,3407000a -34838b4,44801000 -34838b8,c7a00028 -34838bc,8fa50024 -34838c0,8fa40020 -34838c4,8fbf001c -34838c8,4602003c -34838cc,27bd0030 -34838d0,3e00008 -34838d8,27bdffd0 -34838dc,afbf001c -34838e0,afa40020 -34838e4,afa50024 -34838e8,e7a40028 -34838ec,e7a6002c -34838f0,4606203c -34838f8,45000003 -3483900,c100ed9 -3483908,34060014 -348390c,3407000a -3483910,44801000 -3483914,c7a6002c -3483918,c7a40028 -348391c,8fa50024 -3483920,8fa40020 -3483924,8fbf001c -3483928,4606203c -348392c,27bd0030 -3483930,3e00008 -3483938,c100f3c -3483940,8fbf001c -3483944,27bd0020 -3483948,3e00008 -3483954,27bdffe8 -3483958,afbf0014 -348395c,c008ab4 -3483964,8fbf0014 -3483968,27bd0018 -348396c,8fa40018 -3483970,8c8a0138 -3483974,8d4a0010 -3483978,25431618 -348397c,3c088040 -3483980,81083950 -3483984,1100000a -3483988,3c098012 -348398c,2529a5d0 -3483990,95281406 -3483994,290105dc -3483998,14200005 -348399c,9488029c -34839a0,31080002 -34839a4,15000002 -34839ac,254314d0 +3483580,15400003 +3483588,c037500 +3483590,8fbf0014 +3483594,3e00008 +3483598,27bd0018 +348359c,3c010080 +34835a0,3c180001 +34835a4,3e00008 +34835a8,8c4e0670 +34835ac,3c0a8040 +34835b0,814a0cd8 +34835b4,11400002 +34835bc,34180003 +34835c0,3c078012 +34835c4,24e7a5d0 +34835c8,3e00008 +34835cc,24010003 +34835d0,3c0a8040 +34835d4,814a0cd8 +34835d8,11400008 +34835e0,c100411 +34835e8,3c08801e +34835ec,25088966 +34835f0,34090004 +34835f4,a5090000 +34835fc,8fbf0014 +3483600,3e00008 +3483604,27bd0018 +3483608,27bdffe0 +348360c,afbf0014 +3483610,afa10018 +3483614,afa4001c +3483618,3c0a8040 +348361c,814a0cd8 +3483620,1540000b +3483628,3c04801d +348362c,248484a0 +3483630,3c058040 +3483634,90a50cdb +3483638,34060000 +348363c,c037385 +3483644,34044802 +3483648,c0191bc +3483650,8fa4001c +3483654,8fa10018 +3483658,8fbf0014 +348365c,3e00008 +3483660,27bd0020 +3483668,27bdffe0 +348366c,afbf0014 +3483670,afa40018 +3483674,3c0d8040 +3483678,81ad3664 +348367c,15a0000c +3483684,3c08801e +3483688,2508aa30 +348368c,8d090670 +3483690,340a4000 +3483694,12a5824 +3483698,1160000d +34836a0,34080001 +34836a4,3c018040 +34836a8,a0283664 +34836ac,10000023 +34836b0,3c08801e +34836b4,2508aa30 +34836b8,8d090670 +34836bc,340a4000 +34836c0,12a5824 +34836c4,1160000c +34836cc,1000001b +34836d0,24a420d8 +34836d4,c037519 +34836dc,24010002 +34836e0,14410016 +34836e8,3c08801e +34836ec,25088966 +34836f0,34090004 +34836f4,a5090000 +34836f8,3c0b8012 +34836fc,256ba5d0 +3483700,816c0ede +3483704,358c0001 +3483708,a16c0ede +348370c,3c09801e +3483710,2529a2ba +3483714,340802ae +3483718,a5280000 +348371c,3408002a +3483720,3c09801e +3483724,2529a2fe +3483728,a1280000 +348372c,34080014 +3483730,3c09801e +3483734,2529a2b5 +3483738,a1280000 +348373c,8fbf0014 +3483740,3e00008 +3483744,27bd0020 +3483748,27bdffd0 +348374c,afbf0014 +3483750,afa80018 +3483754,afa9001c +3483758,afaa0020 +348375c,afab0024 +3483760,afac0028 +3483764,afad002c +3483768,3c088012 +348376c,2508a5d0 +3483770,85090f20 +3483774,31290040 +3483778,1120000e +348377c,3c08801e +3483780,2508aa30 +3483784,8d09039c +3483788,1120000a +348378c,340a00a1 +3483790,852b0000 +3483794,154b0007 +3483798,240cf7ff +348379c,8d0d066c +34837a0,18d6824 +34837a4,ad0d066c +34837a8,ad00039c +34837ac,ad00011c +34837b0,ad200118 +34837b4,afad002c +34837b8,afac0028 +34837bc,afab0024 +34837c0,afaa0020 +34837c4,afa9001c +34837c8,afa80018 +34837cc,afbf0014 +34837d0,860e001c +34837d4,3e00008 +34837d8,27bd0030 +34837dc,27bdffd0 +34837e0,afbf0014 +34837e4,afa80018 +34837e8,afa9001c +34837ec,afaa0020 +34837f0,84a800a4 +34837f4,34090002 +34837f8,1509000c +34837fc,340a0006 +3483800,80880003 +3483804,150a0009 +348380c,3c088012 +3483810,2508a5d0 +3483814,85090f20 +3483818,31290040 +348381c,11200003 +3483824,c0083ad +348382c,8faa0020 +3483830,8fa9001c +3483834,8fa80018 +3483838,8fbf0014 +348383c,8602001c +3483840,3e00008 +3483844,27bd0030 +3483848,27bdffd0 +348384c,afbf001c +3483850,afa40020 +3483854,afa50024 +3483858,e7a00028 +348385c,4602003c +3483864,45010005 +348386c,c100ec0 +3483874,10000003 +348387c,c100ec2 +3483884,34060014 +3483888,3407000a +348388c,44801000 +3483890,c7a00028 +3483894,8fa50024 +3483898,8fa40020 +348389c,8fbf001c +34838a0,4602003c +34838a4,27bd0030 +34838a8,3e00008 +34838b0,27bdffd0 +34838b4,afbf001c +34838b8,afa40020 +34838bc,afa50024 +34838c0,e7a40028 +34838c4,e7a6002c +34838c8,4606203c +34838d0,45000003 +34838d8,c100ecd +34838e0,34060014 +34838e4,3407000a +34838e8,44801000 +34838ec,c7a6002c +34838f0,c7a40028 +34838f4,8fa50024 +34838f8,8fa40020 +34838fc,8fbf001c +3483900,4606203c +3483904,27bd0030 +3483908,3e00008 +3483910,c100f30 +3483918,8fbf001c +348391c,27bd0020 +3483920,3e00008 +348392c,27bdffe8 +3483930,afbf0014 +3483934,c008ab4 +348393c,8fbf0014 +3483940,27bd0018 +3483944,8fa40018 +3483948,8c8a0138 +348394c,8d4a0010 +3483950,25431618 +3483954,3c088040 +3483958,81083928 +348395c,1100000a +3483960,3c098012 +3483964,2529a5d0 +3483968,95281406 +348396c,290105dc +3483970,14200005 +3483974,9488029c +3483978,31080002 +348397c,15000002 +3483984,254314d0 +3483988,3e00008 +3483990,3c188012 +3483994,2718a5d0 +3483998,8f180004 +348399c,17000003 +34839a4,3c0a8041 +34839a8,254ab4b8 +34839ac,24780008 34839b0,3e00008 -34839b8,3c188012 -34839bc,2718a5d0 -34839c0,8f180004 -34839c4,17000003 -34839cc,3c0a8041 -34839d0,254ab138 -34839d4,24780008 +34839b4,adf802c0 +34839b8,3c0f8012 +34839bc,25efa5d0 +34839c0,8def0004 +34839c4,15e00003 +34839cc,3c0e8041 +34839d0,25ceb4b8 +34839d4,ac4e0004 34839d8,3e00008 -34839dc,adf802c0 -34839e0,3c0f8012 -34839e4,25efa5d0 -34839e8,8def0004 -34839ec,15e00003 -34839f4,3c0e8041 -34839f8,25ceb138 -34839fc,ac4e0004 -3483a00,3e00008 -3483a04,820f013f -3483a0c,3c088040 -3483a10,81083a08 -3483a14,11000007 -3483a18,3c09801d -3483a1c,252984a0 -3483a20,8d281d44 -3483a24,31080002 -3483a28,11000002 -3483a30,34069100 +34839dc,820f013f +34839e4,3c088040 +34839e8,810839e0 +34839ec,11000007 +34839f0,3c09801d +34839f4,252984a0 +34839f8,8d281d44 +34839fc,31080002 +3483a00,11000002 +3483a08,34069100 +3483a0c,3e00008 +3483a10,afa60020 +3483a14,3c088040 +3483a18,810839e0 +3483a1c,11000005 +3483a20,3c09801d +3483a24,252984a0 +3483a28,8d281d44 +3483a2c,35080002 +3483a30,ad281d44 3483a34,3e00008 -3483a38,afa60020 -3483a3c,3c088040 -3483a40,81083a08 -3483a44,11000005 -3483a48,3c09801d -3483a4c,252984a0 -3483a50,8d281d44 -3483a54,35080002 -3483a58,ad281d44 -3483a5c,3e00008 -3483a60,34e74000 -3483a68,3c038012 -3483a6c,2463a5d0 -3483a70,8c6e0004 -3483a74,15c0000c -3483a78,24020005 -3483a7c,24020011 -3483a80,3c088040 -3483a84,81083a64 -3483a88,11000007 -3483a8c,3c09801d -3483a90,252984a0 -3483a94,8d281d44 -3483a98,31080002 -3483a9c,11000002 -3483aa0,34020001 -3483aa4,34020003 +3483a38,34e74000 +3483a40,3c038012 +3483a44,2463a5d0 +3483a48,8c6e0004 +3483a4c,15c0000c +3483a50,24020005 +3483a54,24020011 +3483a58,3c088040 +3483a5c,81083a3c +3483a60,11000007 +3483a64,3c09801d +3483a68,252984a0 +3483a6c,8d281d44 +3483a70,31080002 +3483a74,11000002 +3483a78,34020001 +3483a7c,34020003 +3483a80,3e00008 +3483a84,3c048010 +3483a88,3c088040 +3483a8c,81083a3c +3483a90,11000005 +3483a94,3c09801d +3483a98,252984a0 +3483a9c,8d281d44 +3483aa0,35080002 +3483aa4,ad281d44 3483aa8,3e00008 -3483aac,3c048010 -3483ab0,3c088040 -3483ab4,81083a64 -3483ab8,11000005 -3483abc,3c09801d -3483ac0,252984a0 -3483ac4,8d281d44 -3483ac8,35080002 -3483acc,ad281d44 +3483aac,34e78000 +3483ab0,27bdffe8 +3483ab4,afa20010 +3483ab8,afbf0014 +3483abc,c10215e +3483ac0,46000306 +3483ac4,406821 +3483ac8,8fa20010 +3483acc,8fbf0014 3483ad0,3e00008 -3483ad4,34e78000 -3483ad8,27bdffe8 -3483adc,afa20010 -3483ae0,afbf0014 -3483ae4,c10211e -3483ae8,46000306 -3483aec,406821 -3483af0,8fa20010 -3483af4,8fbf0014 +3483ad4,27bd0018 +3483ad8,ac800130 +3483adc,ac800134 +3483ae0,3c018012 +3483ae4,2421a5d0 +3483ae8,80280edc +3483aec,35080008 +3483af0,a0280edc +3483af4,3c013f80 3483af8,3e00008 -3483afc,27bd0018 -3483b00,ac800130 -3483b04,ac800134 -3483b08,3c018012 -3483b0c,2421a5d0 -3483b10,80280edc -3483b14,35080008 -3483b18,a0280edc -3483b1c,3c013f80 -3483b20,3e00008 -3483b24,44813000 -3483b30,3e00008 -3483b38,3c028041 -3483b3c,8c439f10 -3483b40,3c028041 -3483b44,24429c82 -3483b48,14620004 -3483b4c,3c038041 -3483b50,3c028041 -3483b54,24429c84 -3483b58,ac629f10 -3483b5c,3e00008 -3483b64,3c028041 -3483b68,8c439f10 -3483b6c,3c028041 -3483b70,24429c68 -3483b74,10620003 -3483b78,3c028041 -3483b7c,10000003 -3483b80,24429c88 -3483b84,3c028041 -3483b88,24429c6a -3483b8c,3c038041 -3483b90,3e00008 -3483b94,ac629f10 -3483b98,27bdffc8 -3483b9c,afbf0034 -3483ba0,afb40030 -3483ba4,afb3002c -3483ba8,afb20028 -3483bac,afb10024 -3483bb0,afb00020 -3483bb4,809025 -3483bb8,3c02801c -3483bbc,344284a0 -3483bc0,3c030001 -3483bc4,431021 -3483bc8,90420745 -3483bcc,240300aa -3483bd0,14430002 -3483bd4,a08825 -3483bd8,240200ff -3483bdc,3c03801c -3483be0,346384a0 -3483be4,8c700000 -3483be8,8e0302b0 -3483bec,24640008 -3483bf0,ae0402b0 -3483bf4,3c04de00 -3483bf8,ac640000 -3483bfc,3c048041 -3483c00,2484a0e8 -3483c04,ac640004 -3483c08,8e0302b0 -3483c0c,24640008 -3483c10,ae0402b0 -3483c14,3c04e700 -3483c18,ac640000 -3483c1c,ac600004 -3483c20,8e0302b0 -3483c24,24640008 -3483c28,ae0402b0 -3483c2c,3c04fc11 -3483c30,34849623 -3483c34,ac640000 -3483c38,3c04ff2f -3483c3c,3484ffff -3483c40,ac640004 -3483c44,8e0402b0 -3483c48,24830008 -3483c4c,ae0302b0 -3483c50,3c03fa00 -3483c54,ac830000 -3483c58,401825 -3483c5c,c2102b -3483c60,10400002 -3483c64,261302a8 -3483c68,c01825 -3483c6c,2402ff00 -3483c70,621825 -3483c74,ac830004 -3483c78,24070001 -3483c7c,24060009 -3483c80,3c148041 -3483c84,2685a0a8 -3483c88,c101ba6 -3483c8c,2602025 -3483c90,24020010 -3483c94,afa20018 -3483c98,afa20014 -3483c9c,263100bd -3483ca0,afb10010 -3483ca4,2647001b -3483ca8,3025 -3483cac,2685a0a8 -3483cb0,c101c0e -3483cb4,2602025 -3483cb8,8e0202b0 -3483cbc,24430008 -3483cc0,ae0302b0 -3483cc4,3c03e700 -3483cc8,ac430000 -3483ccc,ac400004 -3483cd0,8fbf0034 -3483cd4,8fb40030 -3483cd8,8fb3002c -3483cdc,8fb20028 -3483ce0,8fb10024 -3483ce4,8fb00020 -3483ce8,3e00008 -3483cec,27bd0038 -3483cf0,3c028041 -3483cf4,8c439f10 -3483cf8,3c028041 -3483cfc,24429c68 -3483d00,10620021 -3483d08,27bdffe8 -3483d0c,afbf0014 -3483d10,90660000 -3483d14,90620001 -3483d18,22600 -3483d1c,42603 -3483d20,42183 -3483d24,3042003f -3483d28,21040 -3483d2c,3c038041 -3483d30,24639c68 -3483d34,621021 -3483d38,3c038041 -3483d3c,ac629f10 -3483d40,3c02801c -3483d44,344284a0 -3483d48,944300a4 -3483d4c,28620011 -3483d50,10400008 -3483d54,2825 -3483d58,3c028011 -3483d5c,3442a5d0 -3483d60,431021 -3483d64,804500bc -3483d68,52fc3 -3483d6c,30a50011 -3483d70,24a5ffef -3483d74,c100ee6 -3483d7c,8fbf0014 -3483d80,3e00008 -3483d84,27bd0018 -3483d88,3e00008 -3483d90,27bdffd8 -3483d94,afbf0024 -3483d98,afb10020 -3483d9c,afb0001c -3483da0,3c028040 -3483da4,8c4226f0 -3483da8,14400003 -3483dac,808025 -3483db0,10000019 -3483db4,908201e9 -3483db8,9487001c -3483dbc,73943 -3483dc0,30e7007f -3483dc4,3c02801c -3483dc8,344284a0 -3483dcc,904600a5 -3483dd0,802825 -3483dd4,c1019a8 -3483dd8,27a40010 -3483ddc,97b10014 -3483de0,16200003 -3483de8,1000000b -3483dec,920201e9 -3483df0,c101ea3 -3483df4,93a40017 -3483df8,54400004 -3483dfc,90420007 -3483e00,c101ea3 -3483e04,2202025 -3483e08,90420007 -3483e0c,30420001 -3483e10,54400001 -3483e14,24020005 -3483e18,8fbf0024 -3483e1c,8fb10020 -3483e20,8fb0001c -3483e24,3e00008 -3483e28,27bd0028 -3483e2c,27bdffd8 -3483e30,afbf0024 -3483e34,afb10020 -3483e38,afb0001c -3483e3c,3c028040 -3483e40,8c4226f0 -3483e44,14400003 -3483e48,808025 -3483e4c,10000017 -3483e50,908201e9 -3483e54,9487001c -3483e58,73943 -3483e5c,30e7007f -3483e60,3c02801c -3483e64,344284a0 -3483e68,904600a5 -3483e6c,802825 -3483e70,c1019a8 -3483e74,27a40010 -3483e78,97b10014 -3483e7c,16200003 -3483e84,10000009 -3483e88,920201e9 -3483e8c,c101ea3 -3483e90,93a40017 -3483e94,54400004 -3483e98,90420007 -3483e9c,c101ea3 -3483ea0,2202025 -3483ea4,90420007 -3483ea8,30420002 -3483eac,8fbf0024 -3483eb0,8fb10020 -3483eb4,8fb0001c -3483eb8,3e00008 -3483ebc,27bd0028 -3483ec0,27bdffd8 -3483ec4,afbf0024 -3483ec8,afb10020 -3483ecc,afb0001c -3483ed0,3c02801c -3483ed4,344284a0 -3483ed8,94500020 -3483edc,3c02801d -3483ee0,3442aa30 -3483ee4,8c42066c -3483ee8,3c033000 -3483eec,24630483 -3483ef0,431024 -3483ef4,544000ac -3483ef8,8fbf0024 -3483efc,3c02801c -3483f00,344284a0 -3483f04,8c430008 -3483f08,3c02800f -3483f0c,8c4213ec -3483f10,546200a5 -3483f14,8fbf0024 -3483f18,3c028011 -3483f1c,3442a5d0 -3483f20,8c43135c -3483f24,24020001 -3483f28,1062009e -3483f2c,3c02800e -3483f30,3442f1b0 -3483f34,8c420000 -3483f38,30420020 -3483f3c,5440009a -3483f40,8fbf0024 -3483f44,3c028011 -3483f48,3442a5d0 -3483f4c,8c42009c -3483f50,3c036000 -3483f54,431024 -3483f58,10400007 -3483f5c,3c028011 -3483f60,3442a5d0 -3483f64,8c420004 -3483f68,50400010 -3483f6c,32020200 -3483f70,10000085 -3483f74,3c028011 -3483f78,3442a5d0 -3483f7c,8042007b -3483f80,24030007 -3483f84,10430003 -3483f88,24030008 -3483f8c,14430086 -3483f90,8fbf0024 -3483f94,3c028011 -3483f98,3442a5d0 -3483f9c,8c420004 -3483fa0,54400053 -3483fa4,32100400 -3483fa8,32020200 -3483fac,10400026 -3483fb0,3211ffff +3483afc,44813000 +3483b00,3e00008 +3483b08,3c028041 +3483b0c,8c43a250 +3483b10,3c028041 +3483b14,24429fc2 +3483b18,14620004 +3483b1c,3c038041 +3483b20,3c028041 +3483b24,24429fc4 +3483b28,ac62a250 +3483b2c,3e00008 +3483b34,3c028041 +3483b38,8c43a250 +3483b3c,3c028041 +3483b40,24429fa8 +3483b44,10620003 +3483b48,3c028041 +3483b4c,10000003 +3483b50,24429fc8 +3483b54,3c028041 +3483b58,24429faa +3483b5c,3c038041 +3483b60,3e00008 +3483b64,ac62a250 +3483b68,27bdffc8 +3483b6c,afbf0034 +3483b70,afb40030 +3483b74,afb3002c +3483b78,afb20028 +3483b7c,afb10024 +3483b80,afb00020 +3483b84,809025 +3483b88,3c02801c +3483b8c,344284a0 +3483b90,3c030001 +3483b94,431021 +3483b98,90420745 +3483b9c,240300aa +3483ba0,14430002 +3483ba4,a08825 +3483ba8,240200ff +3483bac,3c03801c +3483bb0,346384a0 +3483bb4,8c700000 +3483bb8,8e0302b0 +3483bbc,24640008 +3483bc0,ae0402b0 +3483bc4,3c04de00 +3483bc8,ac640000 +3483bcc,3c048041 +3483bd0,2484a468 +3483bd4,ac640004 +3483bd8,8e0302b0 +3483bdc,24640008 +3483be0,ae0402b0 +3483be4,3c04e700 +3483be8,ac640000 +3483bec,ac600004 +3483bf0,8e0302b0 +3483bf4,24640008 +3483bf8,ae0402b0 +3483bfc,3c04fc11 +3483c00,34849623 +3483c04,ac640000 +3483c08,3c04ff2f +3483c0c,3484ffff +3483c10,ac640004 +3483c14,8e0402b0 +3483c18,24830008 +3483c1c,ae0302b0 +3483c20,3c03fa00 +3483c24,ac830000 +3483c28,401825 +3483c2c,c2102b +3483c30,10400002 +3483c34,261302a8 +3483c38,c01825 +3483c3c,2402ff00 +3483c40,621825 +3483c44,ac830004 +3483c48,24070001 +3483c4c,24060009 +3483c50,3c148041 +3483c54,2685a428 +3483c58,c101bd7 +3483c5c,2602025 +3483c60,24020010 +3483c64,afa20018 +3483c68,afa20014 +3483c6c,263100bd +3483c70,afb10010 +3483c74,2647001b +3483c78,3025 +3483c7c,2685a428 +3483c80,c101c3f +3483c84,2602025 +3483c88,8e0202b0 +3483c8c,24430008 +3483c90,ae0302b0 +3483c94,3c03e700 +3483c98,ac430000 +3483c9c,ac400004 +3483ca0,8fbf0034 +3483ca4,8fb40030 +3483ca8,8fb3002c +3483cac,8fb20028 +3483cb0,8fb10024 +3483cb4,8fb00020 +3483cb8,3e00008 +3483cbc,27bd0038 +3483cc0,3c028041 +3483cc4,8c43a250 +3483cc8,3c028041 +3483ccc,24429fa8 +3483cd0,10620021 +3483cd8,27bdffe8 +3483cdc,afbf0014 +3483ce0,90660000 +3483ce4,90620001 +3483ce8,22600 +3483cec,42603 +3483cf0,42183 +3483cf4,3042003f +3483cf8,21040 +3483cfc,3c038041 +3483d00,24639fa8 +3483d04,621021 +3483d08,3c038041 +3483d0c,ac62a250 +3483d10,3c02801c +3483d14,344284a0 +3483d18,944300a4 +3483d1c,28620011 +3483d20,10400008 +3483d24,2825 +3483d28,3c028011 +3483d2c,3442a5d0 +3483d30,431021 +3483d34,804500bc +3483d38,52fc3 +3483d3c,30a50011 +3483d40,24a5ffef +3483d44,c100eda +3483d4c,8fbf0014 +3483d50,3e00008 +3483d54,27bd0018 +3483d58,3e00008 +3483d60,27bdffd8 +3483d64,afbf0024 +3483d68,afb20020 +3483d6c,afb1001c +3483d70,afb00018 +3483d74,808025 +3483d78,909101e9 +3483d7c,3c028040 +3483d80,8c4326ec +3483d84,10600018 +3483d88,2201025 +3483d8c,9487001c +3483d90,73943 +3483d94,30e7007f +3483d98,3c02801c +3483d9c,344284a0 +3483da0,904600a5 +3483da4,802825 +3483da8,c1019d9 +3483dac,27a40010 +3483db0,97b20014 +3483db4,1240000c +3483db8,2201025 +3483dbc,c101ed4 +3483dc0,93a40017 +3483dc4,54400004 +3483dc8,90420007 +3483dcc,c101ed4 +3483dd0,2402025 +3483dd4,90420007 +3483dd8,30510001 +3483ddc,56200001 +3483de0,24110005 +3483de4,30420002 +3483de8,a21101ec +3483dec,a20201ed +3483df0,8fbf0024 +3483df4,8fb20020 +3483df8,8fb1001c +3483dfc,8fb00018 +3483e00,3e00008 +3483e04,27bd0028 +3483e08,27bdffd8 +3483e0c,afbf0024 +3483e10,afb10020 +3483e14,afb0001c +3483e18,3c02801c +3483e1c,344284a0 +3483e20,94500020 +3483e24,3c02801d +3483e28,3442aa30 +3483e2c,8c42066c +3483e30,3c033000 +3483e34,24630483 +3483e38,431024 +3483e3c,544000ab +3483e40,8fbf0024 +3483e44,3c02801c +3483e48,344284a0 +3483e4c,8c430008 +3483e50,3c02800f +3483e54,8c4213ec +3483e58,546200a4 +3483e5c,8fbf0024 +3483e60,3c028011 +3483e64,3442a5d0 +3483e68,8c42135c +3483e6c,5440009f +3483e70,8fbf0024 +3483e74,3c02800e +3483e78,3442f1b0 +3483e7c,8c420000 +3483e80,30420020 +3483e84,54400099 +3483e88,8fbf0024 +3483e8c,3c028011 +3483e90,3442a5d0 +3483e94,8c42009c +3483e98,3c036000 +3483e9c,431024 +3483ea0,10400007 +3483ea4,3c028011 +3483ea8,3442a5d0 +3483eac,8c420004 +3483eb0,50400010 +3483eb4,32020200 +3483eb8,10000085 +3483ebc,3c028011 +3483ec0,3442a5d0 +3483ec4,8042007b +3483ec8,24030007 +3483ecc,10430003 +3483ed0,24030008 +3483ed4,14430085 +3483ed8,8fbf0024 +3483edc,3c028011 +3483ee0,3442a5d0 +3483ee4,8c420004 +3483ee8,54400053 +3483eec,32100400 +3483ef0,32020200 +3483ef4,10400026 +3483ef8,3211ffff +3483efc,3c028011 +3483f00,3442a5d0 +3483f04,9442009c +3483f08,30422000 +3483f0c,50400021 +3483f10,32310100 +3483f14,3c028011 +3483f18,3442a5d0 +3483f1c,94420070 +3483f20,3042f000 +3483f24,38422000 +3483f28,2102b +3483f2c,24420001 +3483f30,3c048011 +3483f34,3484a5d0 +3483f38,21300 +3483f3c,94830070 +3483f40,30630fff +3483f44,621025 +3483f48,a4820070 +3483f4c,3c04801d +3483f50,3485aa30 +3483f54,3c028007 +3483f58,34429764 +3483f5c,40f809 +3483f60,248484a0 +3483f64,3c058010 +3483f68,24a243a8 +3483f6c,afa20014 +3483f70,24a743a0 +3483f74,afa70010 +3483f78,24060004 +3483f7c,24a54394 +3483f80,3c02800c +3483f84,3442806c +3483f88,40f809 +3483f8c,24040835 +3483f90,32310100 +3483f94,52200028 +3483f98,32100400 +3483f9c,3c028011 +3483fa0,3442a5d0 +3483fa4,9442009c +3483fa8,30424000 +3483fac,50400022 +3483fb0,32100400 3483fb4,3c028011 3483fb8,3442a5d0 -3483fbc,9442009c -3483fc0,30422000 -3483fc4,50400021 -3483fc8,32310100 -3483fcc,3c028011 -3483fd0,3442a5d0 -3483fd4,94420070 -3483fd8,3042f000 -3483fdc,38422000 -3483fe0,2102b -3483fe4,24420001 -3483fe8,3c048011 -3483fec,3484a5d0 -3483ff0,21300 -3483ff4,94830070 -3483ff8,30630fff -3483ffc,621025 -3484000,a4820070 -3484004,3c04801d -3484008,3485aa30 -348400c,3c028007 -3484010,34429764 -3484014,40f809 -3484018,248484a0 -348401c,3c058010 -3484020,24a243a8 -3484024,afa20014 -3484028,24a743a0 -348402c,afa70010 -3484030,24060004 -3484034,24a54394 -3484038,3c02800c -348403c,3442806c -3484040,40f809 -3484044,24040835 -3484048,32310100 -348404c,52200028 -3484050,32100400 -3484054,3c028011 -3484058,3442a5d0 -348405c,9442009c -3484060,30424000 -3484064,50400022 -3484068,32100400 -348406c,3c028011 -3484070,3442a5d0 -3484074,94420070 -3484078,3042f000 -348407c,24033000 -3484080,50430002 -3484084,24040001 -3484088,24040003 -348408c,3c038011 -3484090,3463a5d0 -3484094,42300 -3484098,94620070 -348409c,30420fff -34840a0,441025 -34840a4,a4620070 -34840a8,3c04801d -34840ac,3485aa30 -34840b0,3c028007 -34840b4,34429764 -34840b8,40f809 -34840bc,248484a0 -34840c0,3c058010 -34840c4,24a243a8 -34840c8,afa20014 -34840cc,24a743a0 -34840d0,afa70010 -34840d4,24060004 -34840d8,24a54394 -34840dc,3c02800c -34840e0,3442806c -34840e4,40f809 -34840e8,24040835 -34840ec,32100400 -34840f0,1200002d -34840f4,8fbf0024 -34840f8,3c02801c -34840fc,344284a0 -3484100,3c030001 -3484104,431021 -3484108,94420934 -348410c,14400027 -3484110,8fb10020 +3483fbc,94420070 +3483fc0,3042f000 +3483fc4,24033000 +3483fc8,50430002 +3483fcc,24040001 +3483fd0,24040003 +3483fd4,3c038011 +3483fd8,3463a5d0 +3483fdc,42300 +3483fe0,94620070 +3483fe4,30420fff +3483fe8,441025 +3483fec,a4620070 +3483ff0,3c04801d +3483ff4,3485aa30 +3483ff8,3c028007 +3483ffc,34429764 +3484000,40f809 +3484004,248484a0 +3484008,3c058010 +348400c,24a243a8 +3484010,afa20014 +3484014,24a743a0 +3484018,afa70010 +348401c,24060004 +3484020,24a54394 +3484024,3c02800c +3484028,3442806c +348402c,40f809 +3484030,24040835 +3484034,32100400 +3484038,1200002c +348403c,8fbf0024 +3484040,3c02801c +3484044,344284a0 +3484048,3c030001 +348404c,431021 +3484050,94420934 +3484054,14400026 +3484058,8fb10020 +348405c,3c028011 +3484060,3442a5d0 +3484064,9046007b +3484068,24c2fff9 +348406c,304200ff +3484070,2c420002 +3484074,1040001f +3484078,8fb0001c +348407c,3c02801c +3484080,344284a0 +3484084,431021 +3484088,90420758 +348408c,14400019 +3484090,3c02801d +3484094,3442aa30 +3484098,8c42066c +348409c,3c0308a0 +34840a0,24630800 +34840a4,431024 +34840a8,14400012 +34840ac,24070002 +34840b0,3c04801d +34840b4,3485aa30 +34840b8,3c028038 +34840bc,3442c9a0 +34840c0,40f809 +34840c4,248484a0 +34840c8,10000008 +34840cc,8fbf0024 +34840d0,3442a5d0 +34840d4,8042007b +34840d8,24030007 +34840dc,1043ffd5 +34840e0,24030008 +34840e4,1043ffd3 +34840e8,8fbf0024 +34840ec,8fb10020 +34840f0,8fb0001c +34840f4,3e00008 +34840f8,27bd0028 +34840fc,3c028011 +3484100,3442a5d0 +3484104,8c42009c +3484108,3c036000 +348410c,431024 +3484110,10400006 3484114,3c028011 3484118,3442a5d0 -348411c,9046007b -3484120,24c2fff9 -3484124,304200ff -3484128,2c420002 -348412c,10400020 -3484130,8fb0001c -3484134,3c02801c -3484138,344284a0 -348413c,431021 -3484140,90420758 -3484144,1440001a -3484148,3c02801d -348414c,3442aa30 -3484150,8c42066c -3484154,3c0308a0 -3484158,24630800 -348415c,431024 -3484160,14400013 -3484164,24070002 -3484168,3c04801d -348416c,3485aa30 -3484170,3c028038 -3484174,3442c9a0 -3484178,40f809 -348417c,248484a0 -3484180,10000009 -3484184,8fbf0024 -3484188,3442a5d0 -348418c,8042007b -3484190,24030007 -3484194,1043ffd5 -3484198,24030008 -348419c,1043ffd4 -34841a0,32100400 -34841a4,8fbf0024 -34841a8,8fb10020 -34841ac,8fb0001c -34841b0,3e00008 -34841b4,27bd0028 -34841b8,3c028011 -34841bc,3442a5d0 -34841c0,8c42009c -34841c4,3c036000 -34841c8,431024 -34841cc,10400006 -34841d0,3c028011 -34841d4,3442a5d0 -34841d8,8c420004 -34841dc,1040000a -34841e0,3c028040 -34841e4,3c028011 -34841e8,3442a5d0 -34841ec,9042007b -34841f0,2442fff9 -34841f4,304200ff -34841f8,2c420002 -34841fc,10400123 -3484204,3c028040 -3484208,9042088a -348420c,1040011f -3484214,27bdffc8 -3484218,afbf0034 -348421c,afb30030 -3484220,afb2002c -3484224,afb10028 -3484228,afb00024 -348422c,3c02801c -3484230,344284a0 -3484234,8c500000 -3484238,8e0302b0 -348423c,24640008 -3484240,ae0402b0 -3484244,3c04de00 -3484248,ac640000 -348424c,3c048041 -3484250,2484a0e8 -3484254,ac640004 -3484258,8e0302b0 -348425c,24640008 -3484260,ae0402b0 -3484264,3c04e700 -3484268,ac640000 -348426c,ac600004 -3484270,8e0302b0 -3484274,24640008 -3484278,ae0402b0 -348427c,3c04fc11 -3484280,34849623 -3484284,ac640000 -3484288,3c04ff2f -348428c,3484ffff -3484290,ac640004 -3484294,3c030001 -3484298,431021 -348429c,94520744 -34842a0,240200aa -34842a4,124200e0 -34842a8,24070001 -34842ac,261102a8 +348411c,8c420004 +3484120,1040000a +3484124,3c028040 +3484128,3c028011 +348412c,3442a5d0 +3484130,9042007b +3484134,2442fff9 +3484138,304200ff +348413c,2c420002 +3484140,10400123 +3484148,3c028040 +348414c,9042088a +3484150,1040011f +3484158,27bdffc8 +348415c,afbf0034 +3484160,afb30030 +3484164,afb2002c +3484168,afb10028 +348416c,afb00024 +3484170,3c02801c +3484174,344284a0 +3484178,8c500000 +348417c,8e0302b0 +3484180,24640008 +3484184,ae0402b0 +3484188,3c04de00 +348418c,ac640000 +3484190,3c048041 +3484194,2484a468 +3484198,ac640004 +348419c,8e0302b0 +34841a0,24640008 +34841a4,ae0402b0 +34841a8,3c04e700 +34841ac,ac640000 +34841b0,ac600004 +34841b4,8e0302b0 +34841b8,24640008 +34841bc,ae0402b0 +34841c0,3c04fc11 +34841c4,34849623 +34841c8,ac640000 +34841cc,3c04ff2f +34841d0,3484ffff +34841d4,ac640004 +34841d8,3c030001 +34841dc,431021 +34841e0,94520744 +34841e4,240200aa +34841e8,124200e0 +34841ec,24070001 +34841f0,261102a8 +34841f4,8e0202b0 +34841f8,24430008 +34841fc,ae0302b0 +3484200,3c03fa00 +3484204,ac430000 +3484208,2403ff00 +348420c,2431825 +3484210,ac430004 +3484214,3025 +3484218,3c138041 +348421c,2665a408 +3484220,c101bd7 +3484224,2202025 +3484228,24020010 +348422c,afa20018 +3484230,afa20014 +3484234,24020040 +3484238,afa20010 +348423c,2407010f +3484240,3025 +3484244,2665a408 +3484248,c101c3f +348424c,2202025 +3484250,240200ff +3484254,16420023 +3484258,3c028011 +348425c,3c02801d +3484260,3442aa30 +3484264,8c42066c +3484268,3c033000 +348426c,24630483 +3484270,431024 +3484274,10400009 +3484278,3c02801c +348427c,8e0202b0 +3484280,24430008 +3484284,ae0302b0 +3484288,3c03fa00 +348428c,ac430000 +3484290,2403ff46 +3484294,10000012 +3484298,ac430004 +348429c,344284a0 +34842a0,8c430008 +34842a4,3c02800f +34842a8,8c4213ec +34842ac,5462fff4 34842b0,8e0202b0 -34842b4,24430008 -34842b8,ae0302b0 -34842bc,3c03fa00 -34842c0,ac430000 -34842c4,2403ff00 -34842c8,2431825 -34842cc,ac430004 -34842d0,3025 -34842d4,3c138041 -34842d8,2665a088 -34842dc,c101ba6 -34842e0,2202025 -34842e4,24020010 -34842e8,afa20018 -34842ec,afa20014 -34842f0,24020040 -34842f4,afa20010 -34842f8,2407010f -34842fc,3025 -3484300,2665a088 -3484304,c101c0e -3484308,2202025 -348430c,240200ff -3484310,16420023 -3484314,3c028011 -3484318,3c02801d -348431c,3442aa30 -3484320,8c42066c -3484324,3c033000 -3484328,24630483 -348432c,431024 -3484330,10400009 -3484334,3c02801c -3484338,8e0202b0 -348433c,24430008 -3484340,ae0302b0 -3484344,3c03fa00 -3484348,ac430000 -348434c,2403ff46 -3484350,10000012 -3484354,ac430004 -3484358,344284a0 -348435c,8c430008 -3484360,3c02800f -3484364,8c4213ec -3484368,5462fff4 -348436c,8e0202b0 -3484370,3c028011 -3484374,3442a5d0 -3484378,8c43135c -348437c,24020001 -3484380,1062ffed -3484384,3c02800e -3484388,3442f1b0 -348438c,8c420000 -3484390,30420020 -3484394,5440ffe9 -3484398,8e0202b0 -348439c,3c028011 -34843a0,3442a5d0 -34843a4,9442009c -34843a8,30422000 -34843ac,1040002a -34843b0,3c028011 -34843b4,3442a5d0 -34843b8,8c420004 -34843bc,14400054 -34843c0,3c028011 -34843c4,24070001 -34843c8,24060045 -34843cc,3c058041 -34843d0,24a5a0b8 -34843d4,c101ba6 -34843d8,2202025 -34843dc,3c028011 -34843e0,3442a5d0 -34843e4,94420070 -34843e8,3042f000 -34843ec,24032000 -34843f0,5443000e -34843f4,2402000c -34843f8,24020010 -34843fc,afa20018 -3484400,afa20014 -3484404,24020040 -3484408,afa20010 -348440c,24070102 -3484410,3025 -3484414,3c058041 -3484418,24a5a0b8 -348441c,c101c0e -3484420,2202025 -3484424,1000000c -3484428,3c028011 -348442c,afa20018 -3484430,afa20014 -3484434,24020042 -3484438,afa20010 -348443c,24070104 -3484440,3025 -3484444,3c058041 -3484448,24a5a0b8 -348444c,c101c0e -3484450,2202025 -3484454,3c028011 -3484458,3442a5d0 -348445c,9442009c -3484460,30424000 -3484464,1040002a -3484468,3c028011 -348446c,3442a5d0 -3484470,8c420004 -3484474,14400026 -3484478,3c028011 -348447c,24070001 -3484480,24060046 -3484484,3c058041 -3484488,24a5a0b8 -348448c,c101ba6 -3484490,2202025 -3484494,3c028011 -3484498,3442a5d0 -348449c,94420070 -34844a0,3042f000 -34844a4,24033000 -34844a8,5443000e -34844ac,2402000c -34844b0,24020010 -34844b4,afa20018 -34844b8,afa20014 -34844bc,24020040 -34844c0,afa20010 -34844c4,2407011b -34844c8,3025 -34844cc,3c058041 -34844d0,24a5a0b8 -34844d4,c101c0e -34844d8,2202025 -34844dc,1000000c -34844e0,3c028011 -34844e4,afa20018 -34844e8,afa20014 -34844ec,24020042 -34844f0,afa20010 -34844f4,2407011d -34844f8,3025 -34844fc,3c058041 -3484500,24a5a0b8 -3484504,c101c0e -3484508,2202025 -348450c,3c028011 -3484510,3442a5d0 -3484514,9042007b -3484518,2442fff9 -348451c,304200ff -3484520,2c420002 -3484524,50400034 -3484528,8e0202b0 -348452c,240200ff -3484530,1642001f -3484534,24070001 -3484538,3c02801c -348453c,344284a0 -3484540,3c030001 -3484544,431021 -3484548,94420934 -348454c,10400009 -3484550,3c02801c -3484554,8e0202b0 -3484558,24430008 -348455c,ae0302b0 -3484560,3c03fa00 -3484564,ac430000 -3484568,2403ff46 -348456c,1000000f -3484570,ac430004 -3484574,344284a0 -3484578,3c030001 -348457c,431021 -3484580,90420758 -3484584,5440fff4 -3484588,8e0202b0 -348458c,3c02801d -3484590,3442aa30 -3484594,8c42066c -3484598,3c0308a0 -348459c,24630800 -34845a0,431024 -34845a4,5440ffec -34845a8,8e0202b0 -34845ac,24070001 -34845b0,3c028011 -34845b4,3442a5d0 -34845b8,8046007b -34845bc,3c128041 -34845c0,2645a0b8 -34845c4,c101ba6 -34845c8,2202025 -34845cc,2402000c -34845d0,afa20018 -34845d4,afa20014 -34845d8,2402004d -34845dc,afa20010 -34845e0,24070111 -34845e4,3025 -34845e8,2645a0b8 -34845ec,c101c0e -34845f0,2202025 -34845f4,8e0202b0 -34845f8,24430008 -34845fc,ae0302b0 -3484600,3c03e700 -3484604,ac430000 -3484608,ac400004 -348460c,8fbf0034 -3484610,8fb30030 -3484614,8fb2002c -3484618,8fb10028 -348461c,8fb00024 -3484620,3e00008 -3484624,27bd0038 -3484628,261102a8 -348462c,8e0202b0 -3484630,24430008 -3484634,ae0302b0 -3484638,3c03fa00 -348463c,ac430000 -3484640,2403ffff -3484644,ac430004 -3484648,3025 -348464c,3c128041 -3484650,2645a088 -3484654,c101ba6 -3484658,2202025 -348465c,24020010 -3484660,afa20018 -3484664,afa20014 -3484668,24020040 -348466c,afa20010 -3484670,2407010f -3484674,3025 -3484678,2645a088 -348467c,c101c0e -3484680,2202025 -3484684,1000ff24 -3484688,241200ff -348468c,3e00008 -3484694,3c028041 -3484698,8c42b11c -348469c,10400274 -34846a0,3c02801c -34846a4,27bdff90 -34846a8,afbf006c -34846ac,afbe0068 -34846b0,afb70064 -34846b4,afb60060 -34846b8,afb5005c -34846bc,afb40058 -34846c0,afb30054 -34846c4,afb20050 -34846c8,afb1004c -34846cc,afb00048 -34846d0,344284a0 -34846d4,3c030001 -34846d8,431021 -34846dc,94430934 -34846e0,24020006 -34846e4,14620256 -34846e8,808025 -34846ec,3c02801c -34846f0,344284a0 -34846f4,3c030001 -34846f8,431021 -34846fc,94420948 -3484700,1440024f -3484704,3c02801c -3484708,344284a0 -348470c,431021 -3484710,94420944 -3484714,1440024a -3484718,3c02801c -348471c,344284a0 -3484720,84420014 -3484724,4430247 -3484728,8fbf006c -348472c,8c820004 -3484730,24430008 -3484734,ac830008 -3484738,3c03de00 -348473c,ac430000 -3484740,3c038041 -3484744,2463a0e8 -3484748,ac430004 -348474c,3c028011 -3484750,3442a5d0 -3484754,94430f2e -3484758,3c028041 -348475c,8c42b118 -3484760,10400012 -3484764,3025 -3484768,3c028041 -348476c,8c42b1b4 -3484770,10400010 -3484774,24060001 -3484778,30620001 -348477c,54400006 -3484780,30630002 -3484784,3c028041 -3484788,8c42b1b4 -348478c,1040000c -3484790,3025 -3484794,30630002 -3484798,24020001 -348479c,1460000a -34847a0,afa2003c -34847a4,10000008 -34847a8,afa0003c -34847ac,10000006 -34847b0,afa0003c -34847b4,24020001 -34847b8,10000003 -34847bc,afa2003c -34847c0,24020001 -34847c4,afa2003c -34847c8,3c028041 -34847cc,8c55b1c0 -34847d0,12a00007 -34847d4,2a01825 -34847d8,3c028041 -34847dc,9442a09c -34847e0,21840 -34847e4,621821 -34847e8,31840 -34847ec,24630001 -34847f0,3c028041 -34847f4,9442a09c -34847f8,210c0 -34847fc,24420057 -3484800,431021 -3484804,24030140 -3484808,621823 -348480c,38fc2 -3484810,2238821 -3484814,118843 -3484818,26230001 -348481c,afa30038 -3484820,8e030008 -3484824,24640008 -3484828,ae040008 -348482c,3c04fcff -3484830,3484ffff -3484834,ac640000 -3484838,3c04fffd -348483c,3484f6fb -3484840,ac640004 -3484844,8e030008 -3484848,24640008 -348484c,ae040008 -3484850,3c04fa00 -3484854,ac640000 -3484858,240400d0 -348485c,ac640004 -3484860,511021 -3484864,21380 -3484868,3c0300ff -348486c,3463f000 -3484870,431024 -3484874,3c04e400 -3484878,2484039c -348487c,441025 -3484880,afa20020 -3484884,111380 -3484888,431024 -348488c,34420024 -3484890,afa20024 -3484894,3c02e100 -3484898,afa20028 -348489c,afa0002c -34848a0,3c02f100 -34848a4,afa20030 -34848a8,3c020400 -34848ac,24420400 -34848b0,afa20034 -34848b4,27a20020 -34848b8,27a70038 -34848bc,8e030008 -34848c0,24640008 -34848c4,ae040008 -34848c8,8c450004 -34848cc,8c440000 -34848d0,ac650004 -34848d4,24420008 -34848d8,14e2fff8 -34848dc,ac640000 -34848e0,8e020008 -34848e4,24430008 -34848e8,ae030008 -34848ec,3c03e700 -34848f0,ac430000 -34848f4,ac400004 -34848f8,8e020008 -34848fc,24430008 -3484900,ae030008 -3484904,3c03fc11 -3484908,34639623 -348490c,ac430000 -3484910,3c03ff2f -3484914,3463ffff -3484918,10c0004c -348491c,ac430004 -3484920,3c058041 -3484924,24a5a0c8 -3484928,94a70008 -348492c,3025 -3484930,c101ba6 -3484934,2002025 -3484938,3c028041 -348493c,8c42b120 -3484940,18400042 -3484944,3c028041 -3484948,3c128041 -348494c,26529f38 -3484950,2414000a -3484954,9825 -3484958,3c1e8041 -348495c,3c168041 -3484960,26d69f14 -3484964,24429f24 -3484968,afa20040 -348496c,3c028041 -3484970,2442a0c8 -3484974,afa20044 -3484978,3c178041 -348497c,8fc2b1b8 -3484980,5040000b -3484984,92420000 -3484988,92430000 -348498c,3c028011 -3484990,3442a5d0 -3484994,431021 -3484998,904200a8 -348499c,21042 -34849a0,30420001 -34849a4,50400024 -34849a8,26730001 -34849ac,92420000 -34849b0,561021 -34849b4,80460000 -34849b8,28c20003 -34849bc,5440001e -34849c0,26730001 -34849c4,24c6fffd -34849c8,61840 -34849cc,661821 -34849d0,8fa20040 -34849d4,621821 -34849d8,90620000 -34849dc,21600 -34849e0,90640002 -34849e4,42200 -34849e8,441025 -34849ec,90630001 -34849f0,31c00 -34849f4,431025 -34849f8,344200ff -34849fc,8e030008 -3484a00,24640008 -3484a04,ae040008 -3484a08,3c04fa00 -3484a0c,ac640000 -3484a10,ac620004 -3484a14,24020010 -3484a18,afa20018 -3484a1c,afa20014 -3484a20,afb40010 -3484a24,8fa70038 -3484a28,8fa50044 -3484a2c,c101c0e -3484a30,2002025 -3484a34,26730001 -3484a38,2652000c -3484a3c,8ee2b120 -3484a40,262102a -3484a44,1440ffcd -3484a48,26940011 -3484a4c,8e020008 -3484a50,24430008 -3484a54,ae030008 -3484a58,3c03fa00 -3484a5c,ac430000 -3484a60,2403ffff -3484a64,ac430004 -3484a68,8fa2003c -3484a6c,10400037 -3484a70,3c028041 -3484a74,3c058041 -3484a78,24a5a0d8 -3484a7c,94a70008 -3484a80,3025 -3484a84,c101ba6 -3484a88,2002025 +34842b4,3c028011 +34842b8,3442a5d0 +34842bc,8c42135c +34842c0,5440ffef +34842c4,8e0202b0 +34842c8,3c02800e +34842cc,3442f1b0 +34842d0,8c420000 +34842d4,30420020 +34842d8,5440ffe9 +34842dc,8e0202b0 +34842e0,3c028011 +34842e4,3442a5d0 +34842e8,9442009c +34842ec,30422000 +34842f0,1040002a +34842f4,3c028011 +34842f8,3442a5d0 +34842fc,8c420004 +3484300,14400054 +3484304,3c028011 +3484308,24070001 +348430c,24060045 +3484310,3c058041 +3484314,24a5a438 +3484318,c101bd7 +348431c,2202025 +3484320,3c028011 +3484324,3442a5d0 +3484328,94420070 +348432c,3042f000 +3484330,24032000 +3484334,5443000e +3484338,2402000c +348433c,24020010 +3484340,afa20018 +3484344,afa20014 +3484348,24020040 +348434c,afa20010 +3484350,24070102 +3484354,3025 +3484358,3c058041 +348435c,24a5a438 +3484360,c101c3f +3484364,2202025 +3484368,1000000c +348436c,3c028011 +3484370,afa20018 +3484374,afa20014 +3484378,24020042 +348437c,afa20010 +3484380,24070104 +3484384,3025 +3484388,3c058041 +348438c,24a5a438 +3484390,c101c3f +3484394,2202025 +3484398,3c028011 +348439c,3442a5d0 +34843a0,9442009c +34843a4,30424000 +34843a8,1040002a +34843ac,3c028011 +34843b0,3442a5d0 +34843b4,8c420004 +34843b8,14400026 +34843bc,3c028011 +34843c0,24070001 +34843c4,24060046 +34843c8,3c058041 +34843cc,24a5a438 +34843d0,c101bd7 +34843d4,2202025 +34843d8,3c028011 +34843dc,3442a5d0 +34843e0,94420070 +34843e4,3042f000 +34843e8,24033000 +34843ec,5443000e +34843f0,2402000c +34843f4,24020010 +34843f8,afa20018 +34843fc,afa20014 +3484400,24020040 +3484404,afa20010 +3484408,2407011b +348440c,3025 +3484410,3c058041 +3484414,24a5a438 +3484418,c101c3f +348441c,2202025 +3484420,1000000c +3484424,3c028011 +3484428,afa20018 +348442c,afa20014 +3484430,24020042 +3484434,afa20010 +3484438,2407011d +348443c,3025 +3484440,3c058041 +3484444,24a5a438 +3484448,c101c3f +348444c,2202025 +3484450,3c028011 +3484454,3442a5d0 +3484458,9042007b +348445c,2442fff9 +3484460,304200ff +3484464,2c420002 +3484468,50400034 +348446c,8e0202b0 +3484470,240200ff +3484474,1642001f +3484478,24070001 +348447c,3c02801c +3484480,344284a0 +3484484,3c030001 +3484488,431021 +348448c,94420934 +3484490,10400009 +3484494,3c02801c +3484498,8e0202b0 +348449c,24430008 +34844a0,ae0302b0 +34844a4,3c03fa00 +34844a8,ac430000 +34844ac,2403ff46 +34844b0,1000000f +34844b4,ac430004 +34844b8,344284a0 +34844bc,3c030001 +34844c0,431021 +34844c4,90420758 +34844c8,5440fff4 +34844cc,8e0202b0 +34844d0,3c02801d +34844d4,3442aa30 +34844d8,8c42066c +34844dc,3c0308a0 +34844e0,24630800 +34844e4,431024 +34844e8,5440ffec +34844ec,8e0202b0 +34844f0,24070001 +34844f4,3c028011 +34844f8,3442a5d0 +34844fc,8046007b +3484500,3c128041 +3484504,2645a438 +3484508,c101bd7 +348450c,2202025 +3484510,2402000c +3484514,afa20018 +3484518,afa20014 +348451c,2402004d +3484520,afa20010 +3484524,24070111 +3484528,3025 +348452c,2645a438 +3484530,c101c3f +3484534,2202025 +3484538,8e0202b0 +348453c,24430008 +3484540,ae0302b0 +3484544,3c03e700 +3484548,ac430000 +348454c,ac400004 +3484550,8fbf0034 +3484554,8fb30030 +3484558,8fb2002c +348455c,8fb10028 +3484560,8fb00024 +3484564,3e00008 +3484568,27bd0038 +348456c,261102a8 +3484570,8e0202b0 +3484574,24430008 +3484578,ae0302b0 +348457c,3c03fa00 +3484580,ac430000 +3484584,2403ffff +3484588,ac430004 +348458c,3025 +3484590,3c128041 +3484594,2645a408 +3484598,c101bd7 +348459c,2202025 +34845a0,24020010 +34845a4,afa20018 +34845a8,afa20014 +34845ac,24020040 +34845b0,afa20010 +34845b4,2407010f +34845b8,3025 +34845bc,2645a408 +34845c0,c101c3f +34845c4,2202025 +34845c8,1000ff24 +34845cc,241200ff +34845d0,3e00008 +34845d8,3c028041 +34845dc,8c42b49c +34845e0,10400274 +34845e4,3c02801c +34845e8,27bdff90 +34845ec,afbf006c +34845f0,afbe0068 +34845f4,afb70064 +34845f8,afb60060 +34845fc,afb5005c +3484600,afb40058 +3484604,afb30054 +3484608,afb20050 +348460c,afb1004c +3484610,afb00048 +3484614,344284a0 +3484618,3c030001 +348461c,431021 +3484620,94430934 +3484624,24020006 +3484628,14620256 +348462c,808025 +3484630,3c02801c +3484634,344284a0 +3484638,3c030001 +348463c,431021 +3484640,94420948 +3484644,1440024f +3484648,3c02801c +348464c,344284a0 +3484650,431021 +3484654,94420944 +3484658,1440024a +348465c,3c02801c +3484660,344284a0 +3484664,84420014 +3484668,4430247 +348466c,8fbf006c +3484670,8c820004 +3484674,24430008 +3484678,ac830008 +348467c,3c03de00 +3484680,ac430000 +3484684,3c038041 +3484688,2463a468 +348468c,ac430004 +3484690,3c028011 +3484694,3442a5d0 +3484698,94430f2e +348469c,3c028041 +34846a0,8c42b498 +34846a4,10400012 +34846a8,3025 +34846ac,3c028041 +34846b0,8c42b534 +34846b4,10400010 +34846b8,24060001 +34846bc,30620001 +34846c0,54400006 +34846c4,30630002 +34846c8,3c028041 +34846cc,8c42b534 +34846d0,1040000c +34846d4,3025 +34846d8,30630002 +34846dc,24020001 +34846e0,1460000a +34846e4,afa2003c +34846e8,10000008 +34846ec,afa0003c +34846f0,10000006 +34846f4,afa0003c +34846f8,24020001 +34846fc,10000003 +3484700,afa2003c +3484704,24020001 +3484708,afa2003c +348470c,3c028041 +3484710,8c55b540 +3484714,12a00007 +3484718,2a01825 +348471c,3c028041 +3484720,9442a41c +3484724,21840 +3484728,621821 +348472c,31840 +3484730,24630001 +3484734,3c028041 +3484738,9442a41c +348473c,210c0 +3484740,24420057 +3484744,431021 +3484748,24030140 +348474c,621823 +3484750,38fc2 +3484754,2238821 +3484758,118843 +348475c,26230001 +3484760,afa30038 +3484764,8e030008 +3484768,24640008 +348476c,ae040008 +3484770,3c04fcff +3484774,3484ffff +3484778,ac640000 +348477c,3c04fffd +3484780,3484f6fb +3484784,ac640004 +3484788,8e030008 +348478c,24640008 +3484790,ae040008 +3484794,3c04fa00 +3484798,ac640000 +348479c,240400d0 +34847a0,ac640004 +34847a4,511021 +34847a8,21380 +34847ac,3c0300ff +34847b0,3463f000 +34847b4,431024 +34847b8,3c04e400 +34847bc,2484039c +34847c0,441025 +34847c4,afa20020 +34847c8,111380 +34847cc,431024 +34847d0,34420024 +34847d4,afa20024 +34847d8,3c02e100 +34847dc,afa20028 +34847e0,afa0002c +34847e4,3c02f100 +34847e8,afa20030 +34847ec,3c020400 +34847f0,24420400 +34847f4,afa20034 +34847f8,27a20020 +34847fc,27a70038 +3484800,8e030008 +3484804,24640008 +3484808,ae040008 +348480c,8c450004 +3484810,8c440000 +3484814,ac650004 +3484818,24420008 +348481c,14e2fff8 +3484820,ac640000 +3484824,8e020008 +3484828,24430008 +348482c,ae030008 +3484830,3c03e700 +3484834,ac430000 +3484838,ac400004 +348483c,8e020008 +3484840,24430008 +3484844,ae030008 +3484848,3c03fc11 +348484c,34639623 +3484850,ac430000 +3484854,3c03ff2f +3484858,3463ffff +348485c,10c0004c +3484860,ac430004 +3484864,3c058041 +3484868,24a5a448 +348486c,94a70008 +3484870,3025 +3484874,c101bd7 +3484878,2002025 +348487c,3c028041 +3484880,8c42b4a0 +3484884,18400042 +3484888,3c028041 +348488c,3c128041 +3484890,2652a278 +3484894,2414000a +3484898,9825 +348489c,3c1e8041 +34848a0,3c168041 +34848a4,26d6a254 +34848a8,2442a264 +34848ac,afa20040 +34848b0,3c028041 +34848b4,2442a448 +34848b8,afa20044 +34848bc,3c178041 +34848c0,8fc2b538 +34848c4,5040000b +34848c8,92420000 +34848cc,92430000 +34848d0,3c028011 +34848d4,3442a5d0 +34848d8,431021 +34848dc,904200a8 +34848e0,21042 +34848e4,30420001 +34848e8,50400024 +34848ec,26730001 +34848f0,92420000 +34848f4,561021 +34848f8,80460000 +34848fc,28c20003 +3484900,5440001e +3484904,26730001 +3484908,24c6fffd +348490c,61840 +3484910,661821 +3484914,8fa20040 +3484918,621821 +348491c,90620000 +3484920,21600 +3484924,90640002 +3484928,42200 +348492c,441025 +3484930,90630001 +3484934,31c00 +3484938,431025 +348493c,344200ff +3484940,8e030008 +3484944,24640008 +3484948,ae040008 +348494c,3c04fa00 +3484950,ac640000 +3484954,ac620004 +3484958,24020010 +348495c,afa20018 +3484960,afa20014 +3484964,afb40010 +3484968,8fa70038 +348496c,8fa50044 +3484970,c101c3f +3484974,2002025 +3484978,26730001 +348497c,2652000c +3484980,8ee2b4a0 +3484984,262102a +3484988,1440ffcd +348498c,26940011 +3484990,8e020008 +3484994,24430008 +3484998,ae030008 +348499c,3c03fa00 +34849a0,ac430000 +34849a4,2403ffff +34849a8,ac430004 +34849ac,8fa2003c +34849b0,10400037 +34849b4,3c028041 +34849b8,3c058041 +34849bc,24a5a458 +34849c0,94a70008 +34849c4,3025 +34849c8,c101bd7 +34849cc,2002025 +34849d0,3c028041 +34849d4,8c42b4a0 +34849d8,18400168 +34849dc,3c1e8041 +34849e0,3c128041 +34849e4,2652a278 +34849e8,2414000a +34849ec,9825 +34849f0,3c168041 +34849f4,26d6a254 +34849f8,3c028041 +34849fc,2442a458 +3484a00,afa20040 +3484a04,3c028011 +3484a08,3442a5d0 +3484a0c,afa2003c +3484a10,3c178041 +3484a14,8fc2b538 +3484a18,10400009 +3484a1c,92420000 +3484a20,8fa3003c +3484a24,621021 +3484a28,904200a8 +3484a2c,21042 +3484a30,30420001 +3484a34,50400010 +3484a38,26730001 +3484a3c,92420000 +3484a40,561021 +3484a44,80460000 +3484a48,2cc20003 +3484a4c,5040000a +3484a50,26730001 +3484a54,24020010 +3484a58,afa20018 +3484a5c,afa20014 +3484a60,afb40010 +3484a64,8fa70038 +3484a68,8fa50040 +3484a6c,c101c3f +3484a70,2002025 +3484a74,26730001 +3484a78,2652000c +3484a7c,8ee2b4a0 +3484a80,262102a +3484a84,1440ffe3 +3484a88,26940011 3484a8c,3c028041 -3484a90,8c42b120 -3484a94,18400168 -3484a98,3c1e8041 +3484a90,8c42b4a0 +3484a94,18400010 +3484a98,26310012 3484a9c,3c128041 -3484aa0,26529f38 -3484aa4,2414000a +3484aa0,2652a27a +3484aa4,2414000b 3484aa8,9825 3484aac,3c168041 -3484ab0,26d69f14 -3484ab4,3c028041 -3484ab8,2442a0d8 -3484abc,afa20040 -3484ac0,3c028011 -3484ac4,3442a5d0 -3484ac8,afa2003c -3484acc,3c178041 -3484ad0,8fc2b1b8 -3484ad4,10400009 -3484ad8,92420000 -3484adc,8fa3003c -3484ae0,621021 -3484ae4,904200a8 -3484ae8,21042 -3484aec,30420001 -3484af0,50400010 -3484af4,26730001 -3484af8,92420000 -3484afc,561021 -3484b00,80460000 -3484b04,2cc20003 -3484b08,5040000a -3484b0c,26730001 -3484b10,24020010 -3484b14,afa20018 -3484b18,afa20014 -3484b1c,afb40010 -3484b20,8fa70038 -3484b24,8fa50040 -3484b28,c101c0e -3484b2c,2002025 -3484b30,26730001 -3484b34,2652000c -3484b38,8ee2b120 -3484b3c,262102a -3484b40,1440ffe3 -3484b44,26940011 -3484b48,3c028041 -3484b4c,8c42b120 -3484b50,18400010 -3484b54,26310012 -3484b58,3c128041 -3484b5c,26529f3a -3484b60,2414000b -3484b64,9825 -3484b68,3c168041 -3484b6c,2803025 -3484b70,2202825 -3484b74,c102519 -3484b78,2402025 -3484b7c,26730001 -3484b80,2652000c -3484b84,8ec2b120 -3484b88,262102a -3484b8c,1440fff7 -3484b90,26940011 -3484b94,3c028041 -3484b98,9456a09c -3484b9c,16b0c0 -3484ba0,26d60001 -3484ba4,2d1b021 -3484ba8,24070001 -3484bac,24060011 -3484bb0,3c058041 -3484bb4,24a5a0a8 -3484bb8,c101ba6 -3484bbc,2002025 -3484bc0,3c028041 -3484bc4,8c42b120 -3484bc8,18400024 -3484bcc,241e3000 -3484bd0,3c118041 -3484bd4,26319f38 -3484bd8,2413000b -3484bdc,9025 -3484be0,3c178011 -3484be4,36f7a5d0 -3484be8,3c148041 -3484bec,82220001 -3484bf0,4430015 -3484bf4,26520001 -3484bf8,92220000 -3484bfc,2e21021 -3484c00,904200bc -3484c04,21e00 -3484c08,31e03 -3484c0c,2863000a -3484c10,50600001 -3484c14,24020009 -3484c18,21e00 -3484c1c,31e03 -3484c20,4620001 -3484c24,1025 -3484c28,a7be0020 -3484c2c,24420030 -3484c30,a3a20020 -3484c34,2603025 -3484c38,2c02825 -3484c3c,c102519 -3484c40,27a40020 -3484c44,26520001 -3484c48,2631000c -3484c4c,8e82b120 -3484c50,242102a -3484c54,1440ffe5 -3484c58,26730011 -3484c5c,26de0011 -3484c60,24070001 -3484c64,2406000e -3484c68,3c058041 -3484c6c,24a5a0a8 -3484c70,c101ba6 -3484c74,2002025 -3484c78,3c028041 -3484c7c,8c42b120 -3484c80,18400027 -3484c84,3c028041 -3484c88,3c118041 -3484c8c,26319f38 -3484c90,2413000a -3484c94,9025 -3484c98,3c178011 -3484c9c,36f7a5d0 -3484ca0,2442a0a8 -3484ca4,afa20038 -3484ca8,3c148041 -3484cac,92230000 -3484cb0,2404000d -3484cb4,14640002 -3484cb8,2201025 -3484cbc,2403000a -3484cc0,90420001 -3484cc4,30420040 -3484cc8,50400010 -3484ccc,26520001 -3484cd0,2e31821 -3484cd4,906200a8 -3484cd8,30420001 -3484cdc,5040000b -3484ce0,26520001 -3484ce4,24020010 -3484ce8,afa20018 -3484cec,afa20014 -3484cf0,afb30010 -3484cf4,3c03825 -3484cf8,3025 -3484cfc,8fa50038 -3484d00,c101c0e -3484d04,2002025 -3484d08,26520001 -3484d0c,2631000c -3484d10,8e82b120 -3484d14,242102a -3484d18,1440ffe4 -3484d1c,26730011 -3484d20,24070001 -3484d24,2406000a -3484d28,3c058041 -3484d2c,24a5a0a8 -3484d30,c101ba6 -3484d34,2002025 -3484d38,3c028041 -3484d3c,8c42b120 -3484d40,18400022 -3484d44,3c028041 -3484d48,3c118041 -3484d4c,26319f39 -3484d50,2413000a -3484d54,9025 -3484d58,3c178011 -3484d5c,36f7a5d0 -3484d60,2442a0a8 -3484d64,afa20038 -3484d68,3c148041 -3484d6c,92220000 -3484d70,30420020 -3484d74,50400010 -3484d78,26520001 -3484d7c,8ee200a4 -3484d80,3c030040 -3484d84,431024 -3484d88,5040000b -3484d8c,26520001 -3484d90,24020010 -3484d94,afa20018 -3484d98,afa20014 -3484d9c,afb30010 -3484da0,3c03825 -3484da4,3025 -3484da8,8fa50038 -3484dac,c101c0e -3484db0,2002025 -3484db4,26520001 -3484db8,2631000c -3484dbc,8e82b120 -3484dc0,242102a -3484dc4,1440ffe9 -3484dc8,26730011 -3484dcc,26de0022 +3484ab0,2803025 +3484ab4,2202825 +3484ab8,c102559 +3484abc,2402025 +3484ac0,26730001 +3484ac4,2652000c +3484ac8,8ec2b4a0 +3484acc,262102a +3484ad0,1440fff7 +3484ad4,26940011 +3484ad8,3c028041 +3484adc,9456a41c +3484ae0,16b0c0 +3484ae4,26d60001 +3484ae8,2d1b021 +3484aec,24070001 +3484af0,24060011 +3484af4,3c058041 +3484af8,24a5a428 +3484afc,c101bd7 +3484b00,2002025 +3484b04,3c028041 +3484b08,8c42b4a0 +3484b0c,18400024 +3484b10,241e3000 +3484b14,3c118041 +3484b18,2631a278 +3484b1c,2413000b +3484b20,9025 +3484b24,3c178011 +3484b28,36f7a5d0 +3484b2c,3c148041 +3484b30,82220001 +3484b34,4430015 +3484b38,26520001 +3484b3c,92220000 +3484b40,2e21021 +3484b44,904200bc +3484b48,21e00 +3484b4c,31e03 +3484b50,2863000a +3484b54,50600001 +3484b58,24020009 +3484b5c,21e00 +3484b60,31e03 +3484b64,4620001 +3484b68,1025 +3484b6c,a7be0020 +3484b70,24420030 +3484b74,a3a20020 +3484b78,2603025 +3484b7c,2c02825 +3484b80,c102559 +3484b84,27a40020 +3484b88,26520001 +3484b8c,2631000c +3484b90,8e82b4a0 +3484b94,242102a +3484b98,1440ffe5 +3484b9c,26730011 +3484ba0,26de0011 +3484ba4,24070001 +3484ba8,2406000e +3484bac,3c058041 +3484bb0,24a5a428 +3484bb4,c101bd7 +3484bb8,2002025 +3484bbc,3c028041 +3484bc0,8c42b4a0 +3484bc4,18400027 +3484bc8,3c028041 +3484bcc,3c118041 +3484bd0,2631a278 +3484bd4,2413000a +3484bd8,9025 +3484bdc,3c178011 +3484be0,36f7a5d0 +3484be4,2442a428 +3484be8,afa20038 +3484bec,3c148041 +3484bf0,92230000 +3484bf4,2404000d +3484bf8,14640002 +3484bfc,2201025 +3484c00,2403000a +3484c04,90420001 +3484c08,30420040 +3484c0c,50400010 +3484c10,26520001 +3484c14,2e31821 +3484c18,906200a8 +3484c1c,30420001 +3484c20,5040000b +3484c24,26520001 +3484c28,24020010 +3484c2c,afa20018 +3484c30,afa20014 +3484c34,afb30010 +3484c38,3c03825 +3484c3c,3025 +3484c40,8fa50038 +3484c44,c101c3f +3484c48,2002025 +3484c4c,26520001 +3484c50,2631000c +3484c54,8e82b4a0 +3484c58,242102a +3484c5c,1440ffe4 +3484c60,26730011 +3484c64,24070001 +3484c68,2406000a +3484c6c,3c058041 +3484c70,24a5a428 +3484c74,c101bd7 +3484c78,2002025 +3484c7c,3c028041 +3484c80,8c42b4a0 +3484c84,18400022 +3484c88,3c028041 +3484c8c,3c118041 +3484c90,2631a279 +3484c94,2413000a +3484c98,9025 +3484c9c,3c178011 +3484ca0,36f7a5d0 +3484ca4,2442a428 +3484ca8,afa20038 +3484cac,3c148041 +3484cb0,92220000 +3484cb4,30420020 +3484cb8,50400010 +3484cbc,26520001 +3484cc0,8ee200a4 +3484cc4,3c030040 +3484cc8,431024 +3484ccc,5040000b +3484cd0,26520001 +3484cd4,24020010 +3484cd8,afa20018 +3484cdc,afa20014 +3484ce0,afb30010 +3484ce4,3c03825 +3484ce8,3025 +3484cec,8fa50038 +3484cf0,c101c3f +3484cf4,2002025 +3484cf8,26520001 +3484cfc,2631000c +3484d00,8e82b4a0 +3484d04,242102a +3484d08,1440ffe9 +3484d0c,26730011 +3484d10,26de0022 +3484d14,24070001 +3484d18,24060010 +3484d1c,3c058041 +3484d20,24a5a428 +3484d24,c101bd7 +3484d28,2002025 +3484d2c,3c028041 +3484d30,8c42b4a0 +3484d34,18400024 +3484d38,3c118041 +3484d3c,2631a278 +3484d40,2413000a +3484d44,9025 +3484d48,3c178011 +3484d4c,36f7a5d0 +3484d50,3c028041 +3484d54,2442a428 +3484d58,afa20038 +3484d5c,3c148041 +3484d60,92220001 +3484d64,30420010 +3484d68,50400012 +3484d6c,26520001 +3484d70,92220000 +3484d74,2e21021 +3484d78,904200a8 +3484d7c,21082 +3484d80,30420001 +3484d84,5040000b +3484d88,26520001 +3484d8c,24020010 +3484d90,afa20018 +3484d94,afa20014 +3484d98,afb30010 +3484d9c,3c03825 +3484da0,3025 +3484da4,8fa50038 +3484da8,c101c3f +3484dac,2002025 +3484db0,26520001 +3484db4,2631000c +3484db8,8e82b4a0 +3484dbc,242102a +3484dc0,1440ffe7 +3484dc4,26730011 +3484dc8,26c20033 +3484dcc,afa20038 3484dd0,24070001 -3484dd4,24060010 +3484dd4,2406000f 3484dd8,3c058041 -3484ddc,24a5a0a8 -3484de0,c101ba6 +3484ddc,24a5a428 +3484de0,c101bd7 3484de4,2002025 3484de8,3c028041 -3484dec,8c42b120 -3484df0,18400024 -3484df4,3c118041 -3484df8,26319f38 -3484dfc,2413000a -3484e00,9025 -3484e04,3c178011 -3484e08,36f7a5d0 -3484e0c,3c028041 -3484e10,2442a0a8 -3484e14,afa20038 -3484e18,3c148041 -3484e1c,92220001 -3484e20,30420010 -3484e24,50400012 -3484e28,26520001 -3484e2c,92220000 -3484e30,2e21021 -3484e34,904200a8 -3484e38,21082 -3484e3c,30420001 -3484e40,5040000b -3484e44,26520001 -3484e48,24020010 -3484e4c,afa20018 -3484e50,afa20014 -3484e54,afb30010 -3484e58,3c03825 -3484e5c,3025 -3484e60,8fa50038 -3484e64,c101c0e -3484e68,2002025 -3484e6c,26520001 -3484e70,2631000c -3484e74,8e82b120 -3484e78,242102a -3484e7c,1440ffe7 -3484e80,26730011 -3484e84,26c20033 -3484e88,afa20038 -3484e8c,24070001 -3484e90,2406000f -3484e94,3c058041 -3484e98,24a5a0a8 -3484e9c,c101ba6 -3484ea0,2002025 -3484ea4,3c028041 -3484ea8,8c42b120 -3484eac,18400053 -3484eb0,3c148041 -3484eb4,26949f38 -3484eb8,2808825 -3484ebc,2413000a -3484ec0,9025 -3484ec4,3c1e8011 -3484ec8,37dea5d0 -3484ecc,3c028041 -3484ed0,2442a0a8 -3484ed4,afa2003c -3484ed8,3c178041 -3484edc,92220001 -3484ee0,30420010 -3484ee4,50400012 -3484ee8,26520001 -3484eec,92220000 -3484ef0,3c21021 -3484ef4,904200a8 -3484ef8,21042 -3484efc,30420001 -3484f00,5040000b -3484f04,26520001 -3484f08,24020010 -3484f0c,afa20018 -3484f10,afa20014 -3484f14,afb30010 -3484f18,8fa70038 -3484f1c,3025 -3484f20,8fa5003c -3484f24,c101c0e -3484f28,2002025 -3484f2c,26520001 -3484f30,8ee2b120 -3484f34,2631000c -3484f38,242182a -3484f3c,1460ffe7 -3484f40,26730011 -3484f44,12a0002d -3484f4c,1840002b -3484f50,26d60044 -3484f54,2412000b -3484f58,8825 -3484f5c,3c1e8041 -3484f60,3c158041 -3484f64,26b5b220 -3484f68,3c138041 -3484f6c,26739e98 -3484f70,3c028041 -3484f74,24429e9c -3484f78,afa20038 -3484f7c,3c178041 -3484f80,8fc2b1bc -3484f84,5040000f -3484f88,92820000 -3484f8c,92820001 -3484f90,30420010 -3484f94,5040000b -3484f98,92820000 -3484f9c,92830000 -3484fa0,3c028011 -3484fa4,3442a5d0 -3484fa8,431021 -3484fac,904200a8 -3484fb0,21082 -3484fb4,30420001 -3484fb8,5040000b -3484fbc,26310001 -3484fc0,92820000 -3484fc4,551021 -3484fc8,90420000 -3484fcc,14400002 -3484fd0,2602025 -3484fd4,8fa40038 -3484fd8,2403025 -3484fdc,c102519 -3484fe0,2c02825 -3484fe4,26310001 -3484fe8,2694000c -3484fec,8ee2b120 -3484ff0,222102a -3484ff4,1440ffe2 -3484ff8,26520011 -3484ffc,c102543 -3485000,2002025 -3485004,8e020008 -3485008,24430008 -348500c,ae030008 -3485010,3c03e900 -3485014,ac430000 -3485018,ac400004 -348501c,8e020008 -3485020,24430008 -3485024,ae030008 -3485028,3c03df00 -348502c,ac430000 -3485030,10000003 -3485034,ac400004 -3485038,1000fed6 -348503c,26310012 -3485040,8fbf006c -3485044,8fbe0068 -3485048,8fb70064 -348504c,8fb60060 -3485050,8fb5005c -3485054,8fb40058 -3485058,8fb30054 -348505c,8fb20050 -3485060,8fb1004c -3485064,8fb00048 -3485068,3e00008 -348506c,27bd0070 -3485070,3e00008 -3485078,44860000 -348507c,44801000 -3485084,46020032 -348508c,45030011 -3485090,46007006 -3485094,460e603c -348509c,45000007 -34850a0,460c0000 -34850a4,4600703c -34850ac,45000009 -34850b4,3e00008 -34850b8,46007006 -34850bc,460e003c -34850c4,45000003 -34850cc,3e00008 -34850d0,46007006 -34850d4,3e00008 -34850dc,3c02801c -34850e0,344284a0 -34850e4,c44000d4 -34850e8,3c028041 -34850ec,3e00008 -34850f0,e440b128 -34850f4,27bdffe8 -34850f8,afbf0014 -34850fc,3c028041 -3485100,90429fe0 -3485104,5040001b -3485108,3c028041 -348510c,3c038011 -3485110,3463a5d0 -3485114,8c630070 -3485118,31f02 -348511c,1062000d -3485120,21300 -3485124,3c048011 -3485128,3484a5d0 -348512c,94830070 -3485130,30630fff -3485134,621025 -3485138,a4820070 -348513c,3c04801d -3485140,3485aa30 -3485144,3c028007 -3485148,34429764 -348514c,40f809 -3485150,248484a0 +3484dec,8c42b4a0 +3484df0,18400053 +3484df4,3c148041 +3484df8,2694a278 +3484dfc,2808825 +3484e00,2413000a +3484e04,9025 +3484e08,3c1e8011 +3484e0c,37dea5d0 +3484e10,3c028041 +3484e14,2442a428 +3484e18,afa2003c +3484e1c,3c178041 +3484e20,92220001 +3484e24,30420010 +3484e28,50400012 +3484e2c,26520001 +3484e30,92220000 +3484e34,3c21021 +3484e38,904200a8 +3484e3c,21042 +3484e40,30420001 +3484e44,5040000b +3484e48,26520001 +3484e4c,24020010 +3484e50,afa20018 +3484e54,afa20014 +3484e58,afb30010 +3484e5c,8fa70038 +3484e60,3025 +3484e64,8fa5003c +3484e68,c101c3f +3484e6c,2002025 +3484e70,26520001 +3484e74,8ee2b4a0 +3484e78,2631000c +3484e7c,242182a +3484e80,1460ffe7 +3484e84,26730011 +3484e88,12a0002d +3484e90,1840002b +3484e94,26d60044 +3484e98,2412000b +3484e9c,8825 +3484ea0,3c1e8041 +3484ea4,3c158041 +3484ea8,26b5b5a8 +3484eac,3c138041 +3484eb0,2673a1d8 +3484eb4,3c028041 +3484eb8,2442a1dc +3484ebc,afa20038 +3484ec0,3c178041 +3484ec4,8fc2b53c +3484ec8,5040000f +3484ecc,92820000 +3484ed0,92820001 +3484ed4,30420010 +3484ed8,5040000b +3484edc,92820000 +3484ee0,92830000 +3484ee4,3c028011 +3484ee8,3442a5d0 +3484eec,431021 +3484ef0,904200a8 +3484ef4,21082 +3484ef8,30420001 +3484efc,5040000b +3484f00,26310001 +3484f04,92820000 +3484f08,551021 +3484f0c,90420000 +3484f10,14400002 +3484f14,2602025 +3484f18,8fa40038 +3484f1c,2403025 +3484f20,c102559 +3484f24,2c02825 +3484f28,26310001 +3484f2c,2694000c +3484f30,8ee2b4a0 +3484f34,222102a +3484f38,1440ffe2 +3484f3c,26520011 +3484f40,c102583 +3484f44,2002025 +3484f48,8e020008 +3484f4c,24430008 +3484f50,ae030008 +3484f54,3c03e900 +3484f58,ac430000 +3484f5c,ac400004 +3484f60,8e020008 +3484f64,24430008 +3484f68,ae030008 +3484f6c,3c03df00 +3484f70,ac430000 +3484f74,10000003 +3484f78,ac400004 +3484f7c,1000fed6 +3484f80,26310012 +3484f84,8fbf006c +3484f88,8fbe0068 +3484f8c,8fb70064 +3484f90,8fb60060 +3484f94,8fb5005c +3484f98,8fb40058 +3484f9c,8fb30054 +3484fa0,8fb20050 +3484fa4,8fb1004c +3484fa8,8fb00048 +3484fac,3e00008 +3484fb0,27bd0070 +3484fb4,3e00008 +3484fbc,44860000 +3484fc0,44801000 +3484fc8,46020032 +3484fd0,45030011 +3484fd4,46007006 +3484fd8,460e603c +3484fe0,45000007 +3484fe4,460c0000 +3484fe8,4600703c +3484ff0,45000009 +3484ff8,3e00008 +3484ffc,46007006 +3485000,460e003c +3485008,45000003 +3485010,3e00008 +3485014,46007006 +3485018,3e00008 +3485020,3c02801c +3485024,344284a0 +3485028,c44000d4 +348502c,3c028041 +3485030,3e00008 +3485034,e440b4a8 +3485038,27bdffe8 +348503c,afbf0014 +3485040,3c028041 +3485044,9042a320 +3485048,5040001b +348504c,3c028041 +3485050,3c038011 +3485054,3463a5d0 +3485058,8c630070 +348505c,31f02 +3485060,1062000d +3485064,21300 +3485068,3c048011 +348506c,3484a5d0 +3485070,94830070 +3485074,30630fff +3485078,621025 +348507c,a4820070 +3485080,3c04801d +3485084,3485aa30 +3485088,3c028007 +348508c,34429764 +3485090,40f809 +3485094,248484a0 +3485098,3c028041 +348509c,9043a320 +34850a0,24020001 +34850a4,14620004 +34850a8,3c028041 +34850ac,3c028041 +34850b0,a040a320 +34850b4,3c028041 +34850b8,c44ea318 +34850bc,44800000 +34850c4,46007032 +34850cc,45010010 +34850d0,3c02801c +34850d4,344284a0 +34850d8,c44000d4 +34850dc,46007032 +34850e4,45010019 +34850e8,3c02801c +34850ec,3c028041 +34850f0,8c46a1e4 +34850f4,3c028041 +34850f8,c1013ef +34850fc,c44cb4a4 +3485100,3c02801c +3485104,344284a0 +3485108,1000000f +348510c,e44000d4 +3485110,344284a0 +3485114,c44c00d4 +3485118,3c028041 +348511c,c44eb4a8 +3485120,460e6032 +3485128,45010008 +348512c,3c02801c +3485130,3c028041 +3485134,c1013ef +3485138,8c46a1e8 +348513c,3c02801c +3485140,344284a0 +3485144,e44000d4 +3485148,3c02801c +348514c,344284a0 +3485150,c44000d4 3485154,3c028041 -3485158,90439fe0 -348515c,24020001 -3485160,14620004 -3485164,3c028041 -3485168,3c028041 -348516c,a0409fe0 -3485170,3c028041 -3485174,c44e9fd8 -3485178,44800000 -3485180,46007032 -3485188,45010010 -348518c,3c02801c -3485190,344284a0 -3485194,c44000d4 -3485198,46007032 -34851a0,45010019 -34851a4,3c02801c -34851a8,3c028041 -34851ac,8c469ea4 -34851b0,3c028041 -34851b4,c10141e -34851b8,c44cb124 -34851bc,3c02801c -34851c0,344284a0 -34851c4,1000000f -34851c8,e44000d4 -34851cc,344284a0 -34851d0,c44c00d4 -34851d4,3c028041 -34851d8,c44eb128 -34851dc,460e6032 -34851e4,45010008 -34851e8,3c02801c +3485158,e440b4a4 +348515c,3c028041 +3485160,9042a321 +3485164,24030001 +3485168,1443000f +348516c,24030002 +3485170,3c02801c +3485174,344284a0 +3485178,94420322 +348517c,3c038041 +3485180,24639fd0 +3485184,431021 +3485188,90420000 +348518c,10400018 +3485190,3c028041 +3485194,3c02801c +3485198,344284a0 +348519c,24030035 +34851a0,10000012 +34851a4,a4430322 +34851a8,14430011 +34851ac,3c028041 +34851b0,3c02801c +34851b4,344284a0 +34851b8,94420322 +34851bc,3c038041 +34851c0,24639fd0 +34851c4,431021 +34851c8,90420000 +34851cc,10400006 +34851d0,3c028041 +34851d4,3c02801c +34851d8,344284a0 +34851dc,2403001f +34851e0,a4430322 +34851e4,3c028041 +34851e8,a040a321 34851ec,3c028041 -34851f0,c10141e -34851f4,8c469ea8 -34851f8,3c02801c -34851fc,344284a0 -3485200,e44000d4 -3485204,3c02801c -3485208,344284a0 -348520c,c44000d4 -3485210,3c028041 -3485214,e440b124 -3485218,3c028041 -348521c,90429fe1 -3485220,24030001 -3485224,1443000f -3485228,24030002 -348522c,3c02801c -3485230,344284a0 -3485234,94420322 -3485238,3c038041 -348523c,24639c90 -3485240,431021 -3485244,90420000 -3485248,10400018 -348524c,3c028041 -3485250,3c02801c -3485254,344284a0 -3485258,24030035 -348525c,10000012 -3485260,a4430322 -3485264,14430011 -3485268,3c028041 +34851f0,2442a314 +34851f4,c4400008 +34851f8,3c038040 +34851fc,e4602738 +3485200,9044000e +3485204,3c038040 +3485208,a0642c89 +348520c,9042000f +3485210,50400006 +3485214,3c028041 +3485218,2442ffff +348521c,3c038041 +3485220,c101df7 +3485224,a062a323 +3485228,3c028041 +348522c,9042a324 +3485230,1040000b +3485234,3c028041 +3485238,3c02801c +348523c,344284a0 +3485240,94430014 +3485244,2404dfff +3485248,641824 +348524c,a4430014 +3485250,94430020 +3485254,641824 +3485258,a4430020 +348525c,3c028041 +3485260,9042a325 +3485264,10400016 +3485268,8fbf0014 348526c,3c02801c 3485270,344284a0 -3485274,94420322 -3485278,3c038041 -348527c,24639c90 -3485280,431021 -3485284,90420000 -3485288,10400006 -348528c,3c028041 -3485290,3c02801c -3485294,344284a0 -3485298,2403001f -348529c,a4430322 -34852a0,3c028041 -34852a4,a0409fe1 -34852a8,3c028041 -34852ac,24429fd4 -34852b0,c4400008 -34852b4,3c038040 -34852b8,e4602760 -34852bc,9044000e -34852c0,3c038040 -34852c4,a0642cb1 -34852c8,9042000f -34852cc,50400006 -34852d0,3c028041 -34852d4,2442ffff -34852d8,3c038041 -34852dc,c101dc6 -34852e0,a0629fe3 -34852e4,3c028041 -34852e8,90429fe4 -34852ec,1040000b -34852f0,3c028041 -34852f4,3c02801c -34852f8,344284a0 -34852fc,94430014 -3485300,2404dfff -3485304,641824 -3485308,a4430014 -348530c,94430020 -3485310,641824 -3485314,a4430020 -3485318,3c028041 -348531c,90429fe5 -3485320,10400016 -3485324,8fbf0014 -3485328,3c02801c -348532c,344284a0 -3485330,90430016 -3485334,31823 -3485338,a0430016 -348533c,90430017 -3485340,31823 -3485344,a0430017 -3485348,90430022 -348534c,31823 -3485350,a0430022 -3485354,90430023 -3485358,31823 -348535c,a0430023 -3485360,90430028 -3485364,31823 -3485368,a0430028 -348536c,90430029 -3485370,31823 -3485374,a0430029 -3485378,8fbf0014 -348537c,3e00008 -3485380,27bd0018 -3485384,850018 -3485388,1812 -348538c,24620001 -3485390,3042ffff -3485394,31a02 -3485398,431021 -348539c,21203 -34853a0,3e00008 -34853a4,304200ff -34853a8,2402ffff -34853ac,a0820002 -34853b0,a0820001 -34853b4,4a00031 -34853b8,a0820000 -34853bc,a01825 -34853c0,28a503e8 -34853c4,50a00001 -34853c8,240303e7 -34853cc,31c00 -34853d0,31c03 -34853d4,3c026666 -34853d8,24426667 -34853dc,620018 -34853e0,1010 -34853e4,21083 -34853e8,32fc3 -34853ec,451023 -34853f0,22880 -34853f4,a22821 -34853f8,52840 -34853fc,651823 -3485400,21400 -3485404,21403 -3485408,1040001c -348540c,a0830002 -3485410,3c036666 -3485414,24636667 -3485418,430018 -348541c,1810 -3485420,31883 -3485424,22fc3 -3485428,651823 -348542c,32880 -3485430,a32821 -3485434,52840 -3485438,451023 -348543c,a0820001 -3485440,31400 -3485444,21403 -3485448,1040000c -348544c,3c036666 -3485450,24636667 -3485454,430018 -3485458,1810 -348545c,31883 -3485460,22fc3 -3485464,651823 -3485468,32880 -348546c,a31821 -3485470,31840 -3485474,431023 -3485478,a0820000 -348547c,3e00008 -3485484,27bdffd0 -3485488,afbf002c -348548c,afb20028 -3485490,afb10024 -3485494,afb00020 -3485498,808025 -348549c,a08825 -34854a0,afa7003c -34854a4,8fb20040 -34854a8,c101ba6 -34854ac,24070001 -34854b0,93a7003c -34854b4,afb20018 -34854b8,afb20014 -34854bc,83a2003d -34854c0,2442005c -34854c4,afa20010 -34854c8,24e70037 -34854cc,3025 -34854d0,2202825 -34854d4,c101c0e -34854d8,2002025 -34854dc,8fbf002c -34854e0,8fb20028 -34854e4,8fb10024 -34854e8,8fb00020 -34854ec,3e00008 -34854f0,27bd0030 -34854f4,27bdffe0 -34854f8,afbf001c -34854fc,afb20018 -3485500,afb10014 -3485504,afb00010 -3485508,808025 -348550c,24850074 -3485510,24070001 -3485514,4825 -3485518,3c028041 -348551c,24429d54 -3485520,2408ffe0 -3485524,3c048041 -3485528,24849d9c -348552c,90430000 -3485530,1031824 -3485534,14600005 -3485538,80a60000 -348553c,90430001 -3485540,30c600ff -3485544,50660001 -3485548,1274825 -348554c,24420004 -3485550,73840 -3485554,1444fff5 -3485558,24a50001 -348555c,3c028041 -3485560,ac49b230 -3485564,8e1100a4 -3485568,2442b230 -348556c,3223003f -3485570,a0430004 -3485574,9602009c -3485578,8203003e -348557c,10600002 -3485580,3042fffb -3485584,34420004 -3485588,3c038041 -348558c,a462b236 -3485590,112c02 -3485594,30a5007c -3485598,26030086 -348559c,2606008a -34855a0,2407001b -34855a4,90640000 -34855a8,2482ffec -34855ac,304200ff -34855b0,2c42000d -34855b4,50400004 -34855b8,24630001 -34855bc,54870001 -34855c0,34a50001 -34855c4,24630001 -34855c8,5466fff7 -34855cc,90640000 -34855d0,3c028041 -34855d4,a045b235 -34855d8,9203007b -34855dc,2462fff9 -34855e0,304200ff -34855e4,2c420002 -34855e8,14400003 -34855ec,2025 -34855f0,10000002 -34855f4,24030007 -34855f8,24040001 -34855fc,3c028041 -3485600,2442b230 -3485604,a0440008 -3485608,a0430009 -348560c,9203007d -3485610,2462fff6 -3485614,304200ff -3485618,2c420002 -348561c,14400003 -3485620,2025 -3485624,10000002 -3485628,2403000a -348562c,24040001 -3485630,3c028041 -3485634,2442b230 -3485638,a044000a -348563c,a043000b -3485640,86020ef6 -3485644,4400016 -3485648,2403002b -348564c,96020ef4 -3485650,210c2 -3485654,3042008f -3485658,2c430010 -348565c,10600012 -3485660,2403002b -3485664,50400007 -3485668,9203008b -348566c,3c038041 -3485670,24639cd4 -3485674,431021 -3485678,90430000 -348567c,1000000d -3485680,24040001 -3485684,2462ffdf -3485688,304200ff -348568c,2c420003 -3485690,14400008 -3485694,24040001 -3485698,10000005 -348569c,2403002b -34856a0,10000004 -34856a4,24040001 -34856a8,10000002 -34856ac,24040001 -34856b0,2025 -34856b4,3c028041 -34856b8,2442b230 -34856bc,a043000d -34856c0,a044000c -34856c4,9203008a -34856c8,2462ffd3 -34856cc,304200ff -34856d0,2c42000b -34856d4,14400003 -34856d8,24040001 -34856dc,24030037 -34856e0,2025 -34856e4,3c028041 -34856e8,2442b230 -34856ec,a043000f -34856f0,a044000e -34856f4,9202003c -34856f8,10400005 -34856fc,3c028041 -3485700,24030013 -3485704,a043b241 -3485708,10000004 -348570c,24030001 -3485710,24030012 -3485714,a043b241 -3485718,9203003a -348571c,3c028041 -3485720,a043b240 -3485724,8e0200a0 -3485728,21182 -348572c,30420007 -3485730,10400009 -3485734,2025 -3485738,401825 -348573c,2c420004 -3485740,50400001 -3485744,24030003 -3485748,2463004f -348574c,306300ff -3485750,10000002 -3485754,24040001 -3485758,24030050 -348575c,3c028041 -3485760,2442b230 -3485764,a0440012 -3485768,a0430013 -348576c,8e0200a0 -3485770,21242 -3485774,30420007 -3485778,50400009 -348577c,2025 -3485780,401825 -3485784,2c420003 -3485788,50400001 -348578c,24030002 -3485790,24630052 -3485794,306300ff -3485798,10000002 -348579c,24040001 -34857a0,24030053 -34857a4,3c028041 -34857a8,2442b230 -34857ac,a0440014 -34857b0,a0430015 -34857b4,8e0300a0 -34857b8,31b02 -34857bc,30630003 -34857c0,a0430016 -34857c4,86050034 -34857c8,3c048041 -34857cc,c1014ea -34857d0,2484b24b -34857d4,3c020080 -34857d8,2221024 -34857dc,10400002 -34857e0,2825 -34857e4,860500d0 -34857e8,3c048041 -34857ec,c1014ea -34857f0,2484b24e -34857f4,860508c6 -34857f8,58a00001 -34857fc,2405ffff -3485800,3c048041 -3485804,c1014ea -3485808,2484b251 -348580c,3c128041 -3485810,2652b230 -3485814,9202003d -3485818,a2420017 -348581c,8602002e -3485820,22fc3 -3485824,30a5000f -3485828,a22821 -348582c,52903 -3485830,3c048041 -3485834,c1014ea -3485838,2484b248 -348583c,86050022 -3485840,3c048041 -3485844,c1014ea -3485848,2484b254 -348584c,118982 -3485850,32310fff -3485854,a6510028 -3485858,8fbf001c -348585c,8fb20018 -3485860,8fb10014 -3485864,8fb00010 -3485868,3e00008 -348586c,27bd0020 -3485870,27bdff88 -3485874,afbf0074 -3485878,afbe0070 -348587c,afb7006c -3485880,afb60068 -3485884,afb50064 -3485888,afb40060 -348588c,afb3005c -3485890,afb20058 -3485894,afb10054 -3485898,afb00050 -348589c,3c020002 -34858a0,a21021 -34858a4,9443ca42 -34858a8,24020008 -34858ac,14620021 -34858b0,808825 -34858b4,3c020002 -34858b8,a21021 -34858bc,9442ca36 -34858c0,14400006 -34858c4,3c020002 -34858c8,a21021 -34858cc,9444ca2e -34858d0,24020002 -34858d4,10820009 -34858d8,3c020002 -34858dc,a21021 -34858e0,9442ca30 -34858e4,24040005 -34858e8,50440005 -34858ec,3c020002 -34858f0,24040016 -34858f4,14440010 -34858f8,3c020002 -34858fc,3c020002 -3485900,a21021 -3485904,9443ca38 -3485908,31080 -348590c,431021 -3485910,21980 -3485914,431021 -3485918,21100 -348591c,24420020 -3485920,8ca401d8 -3485924,c10153d -3485928,822021 -348592c,10000220 -3485930,8fbf0074 -3485934,3c020002 -3485938,a21021 -348593c,9042ca37 -3485940,1440001d -3485944,2c44009a -3485948,3c020002 -348594c,a22821 -3485950,90a2ca31 -3485954,34420080 -3485958,2c44009a -348595c,10800214 -3485960,8fbf0074 -3485964,2c440086 -3485968,14800211 -348596c,2442007a -3485970,24040001 -3485974,441004 -3485978,3c040008 -348597c,24840014 -3485980,442024 -3485984,1480003b -3485988,3c040002 -348598c,24840081 -3485990,442024 -3485994,54800030 -3485998,24020008 -348599c,3c030004 -34859a0,24630002 -34859a4,431024 -34859a8,10400202 -34859ac,8fbe0070 -34859b0,10000039 -34859b4,241600c8 -34859b8,108001fd -34859bc,8fbf0074 -34859c0,2c440086 -34859c4,5080000e -34859c8,2442007a -34859cc,24040004 -34859d0,10440028 -34859d4,2c440005 -34859d8,5080001b -34859dc,24030006 -34859e0,24040002 -34859e4,5044001c -34859e8,24020008 -34859ec,24030003 -34859f0,1043002d -34859f4,241600c8 -34859f8,100001ee -34859fc,8fbe0070 -3485a00,24040001 -3485a04,441004 -3485a08,3c040008 -3485a0c,24840014 -3485a10,442024 -3485a14,14800017 -3485a18,3c040002 -3485a1c,24840081 -3485a20,442024 -3485a24,5480000c -3485a28,24020008 -3485a2c,3c030004 -3485a30,24630002 -3485a34,431024 -3485a38,104001dd -3485a3c,8fbf0074 -3485a40,10000017 -3485a44,241600c8 -3485a48,10430017 -3485a4c,241600c8 -3485a50,100001d7 -3485a54,8fbf0074 -3485a58,431023 -3485a5c,21840 -3485a60,431821 -3485a64,318c0 -3485a68,431021 -3485a6c,10000006 -3485a70,305600ff -3485a74,31040 -3485a78,621021 -3485a7c,210c0 -3485a80,621821 -3485a84,307600ff -3485a88,12c001c9 -3485a8c,8fbf0074 -3485a90,10000006 -3485a94,8e220008 -3485a98,10000004 -3485a9c,8e220008 -3485aa0,10000002 -3485aa4,8e220008 -3485aa8,8e220008 -3485aac,24430008 -3485ab0,ae230008 -3485ab4,3c03e700 -3485ab8,ac430000 -3485abc,ac400004 -3485ac0,8e220008 -3485ac4,24430008 -3485ac8,ae230008 -3485acc,3c03fc11 -3485ad0,34639623 -3485ad4,ac430000 -3485ad8,3c03ff2f -3485adc,3463ffff -3485ae0,ac430004 -3485ae4,2c02825 -3485ae8,c1014e1 -3485aec,24040090 -3485af0,afa20048 -3485af4,afa20044 -3485af8,a025 -3485afc,24030040 -3485b00,3c028041 -3485b04,afa20030 -3485b08,3c028041 -3485b0c,2442b230 -3485b10,afa2004c -3485b14,3c178041 -3485b18,26f79ed4 -3485b1c,3c158041 -3485b20,26b59e54 -3485b24,8e240008 -3485b28,24820008 -3485b2c,ae220008 -3485b30,3c02fa00 -3485b34,ac820000 -3485b38,31600 -3485b3c,32c00 -3485b40,451025 -3485b44,8fa50044 -3485b48,451025 -3485b4c,31a00 -3485b50,431025 -3485b54,ac820004 -3485b58,8fa20030 -3485b5c,24539dd4 -3485b60,8fbe004c -3485b64,2670ff80 -3485b68,8fd20000 -3485b6c,92020000 -3485b70,3042001f -3485b74,50400012 -3485b78,26100004 -3485b7c,32420001 -3485b80,5682000f -3485b84,26100004 -3485b88,8e020000 -3485b8c,21f42 -3485b90,31880 -3485b94,751821 -3485b98,21602 -3485b9c,3042001f -3485ba0,afa20010 -3485ba4,96070002 -3485ba8,73c00 -3485bac,92060001 -3485bb0,8c650000 -3485bb4,c101521 -3485bb8,2202025 -3485bbc,26100004 -3485bc0,1613ffea -3485bc4,129042 -3485bc8,26730080 -3485bcc,16f3ffe5 -3485bd0,27de0004 -3485bd4,2c02825 -3485bd8,c1014e1 -3485bdc,240400ff -3485be0,afa20044 -3485be4,26940001 -3485be8,24020002 -3485bec,1682ffcd -3485bf0,240300ff -3485bf4,8fa50048 -3485bf8,9825 -3485bfc,24030040 -3485c00,3c178041 -3485c04,3c1e8041 -3485c08,3c158041 -3485c0c,26b59e54 -3485c10,2416000c -3485c14,3c148041 -3485c18,10000002 -3485c1c,2694b246 -3485c20,8fa50044 -3485c24,8e240008 -3485c28,24820008 -3485c2c,ae220008 -3485c30,3c02fa00 -3485c34,ac820000 -3485c38,31600 -3485c3c,33400 -3485c40,461025 -3485c44,451025 -3485c48,31a00 -3485c4c,431025 -3485c50,ac820004 -3485c54,26f29d3c -3485c58,27d0b238 -3485c5c,92020000 -3485c60,5453000f -3485c64,26100002 -3485c68,92420000 -3485c6c,21080 -3485c70,551021 -3485c74,afb60010 -3485c78,92430001 -3485c7c,31a00 -3485c80,92470002 -3485c84,e33825 -3485c88,73c00 -3485c8c,92060001 -3485c90,8c450000 -3485c94,c101521 -3485c98,2202025 -3485c9c,26100002 -3485ca0,1614ffee -3485ca4,26520003 -3485ca8,26730001 -3485cac,327300ff -3485cb0,24020002 -3485cb4,1662ffda -3485cb8,240300ff -3485cbc,3c028041 -3485cc0,9456b258 -3485cc4,24070001 -3485cc8,3025 -3485ccc,3c058041 -3485cd0,24a5a068 -3485cd4,c101ba6 -3485cd8,2202025 -3485cdc,afa00038 -3485ce0,afa00034 -3485ce4,afa00030 -3485ce8,b825 -3485cec,3c108041 -3485cf0,26109d00 -3485cf4,8fa20044 -3485cf8,afa2003c -3485cfc,3c028041 -3485d00,2442a068 -3485d04,afa20040 -3485d08,3c1e8041 -3485d0c,10000005 -3485d10,27de9d3c -3485d14,afb50038 -3485d18,afb40034 -3485d1c,afb30030 -3485d20,240b825 -3485d24,92120000 -3485d28,92130001 -3485d2c,92140002 -3485d30,32c20001 -3485d34,1440000e -3485d38,8fb5003c -3485d3c,24050040 -3485d40,c1014e1 -3485d44,2402025 -3485d48,409025 -3485d4c,24050040 -3485d50,c1014e1 -3485d54,2602025 -3485d58,409825 -3485d5c,24050040 -3485d60,c1014e1 -3485d64,2802025 -3485d68,40a025 -3485d6c,8fb50048 -3485d70,16570007 -3485d74,8fa20030 -3485d78,14530005 -3485d7c,8fa20034 -3485d80,16820003 -3485d84,8fa20038 -3485d88,5055000e -3485d8c,92070003 +3485274,90430016 +3485278,31823 +348527c,a0430016 +3485280,90430017 +3485284,31823 +3485288,a0430017 +348528c,90430022 +3485290,31823 +3485294,a0430022 +3485298,90430023 +348529c,31823 +34852a0,a0430023 +34852a4,90430028 +34852a8,31823 +34852ac,a0430028 +34852b0,90430029 +34852b4,31823 +34852b8,a0430029 +34852bc,8fbf0014 +34852c0,3e00008 +34852c4,27bd0018 +34852c8,850018 +34852cc,1812 +34852d0,24620001 +34852d4,3042ffff +34852d8,31a02 +34852dc,431021 +34852e0,21203 +34852e4,3e00008 +34852e8,304200ff +34852ec,2402ffff +34852f0,a0820002 +34852f4,a0820001 +34852f8,4a00031 +34852fc,a0820000 +3485300,a01825 +3485304,28a503e8 +3485308,50a00001 +348530c,240303e7 +3485310,31c00 +3485314,31c03 +3485318,3c026666 +348531c,24426667 +3485320,620018 +3485324,1010 +3485328,21083 +348532c,32fc3 +3485330,451023 +3485334,22880 +3485338,a22821 +348533c,52840 +3485340,651823 +3485344,21400 +3485348,21403 +348534c,1040001c +3485350,a0830002 +3485354,3c036666 +3485358,24636667 +348535c,430018 +3485360,1810 +3485364,31883 +3485368,22fc3 +348536c,651823 +3485370,32880 +3485374,a32821 +3485378,52840 +348537c,451023 +3485380,a0820001 +3485384,31400 +3485388,21403 +348538c,1040000c +3485390,3c036666 +3485394,24636667 +3485398,430018 +348539c,1810 +34853a0,31883 +34853a4,22fc3 +34853a8,651823 +34853ac,32880 +34853b0,a31821 +34853b4,31840 +34853b8,431023 +34853bc,a0820000 +34853c0,3e00008 +34853c8,27bdffd0 +34853cc,afbf002c +34853d0,afb20028 +34853d4,afb10024 +34853d8,afb00020 +34853dc,808025 +34853e0,a08825 +34853e4,afa7003c +34853e8,8fb20040 +34853ec,c101bd7 +34853f0,24070001 +34853f4,93a7003c +34853f8,afb20018 +34853fc,afb20014 +3485400,83a2003d +3485404,2442005c +3485408,afa20010 +348540c,24e70037 +3485410,3025 +3485414,2202825 +3485418,c101c3f +348541c,2002025 +3485420,8fbf002c +3485424,8fb20028 +3485428,8fb10024 +348542c,8fb00020 +3485430,3e00008 +3485434,27bd0030 +3485438,27bdffe0 +348543c,afbf001c +3485440,afb20018 +3485444,afb10014 +3485448,afb00010 +348544c,808025 +3485450,24850074 +3485454,24070001 +3485458,4825 +348545c,3c028041 +3485460,2442a094 +3485464,2408ffe0 +3485468,3c048041 +348546c,2484a0dc +3485470,90430000 +3485474,1031824 +3485478,14600005 +348547c,80a60000 +3485480,90430001 +3485484,30c600ff +3485488,50660001 +348548c,1274825 +3485490,24420004 +3485494,73840 +3485498,1444fff5 +348549c,24a50001 +34854a0,3c028041 +34854a4,ac49b5b8 +34854a8,8e1100a4 +34854ac,2442b5b8 +34854b0,3223003f +34854b4,a0430004 +34854b8,9602009c +34854bc,8203003e +34854c0,10600002 +34854c4,3042fffb +34854c8,34420004 +34854cc,3c038041 +34854d0,a462b5be +34854d4,112c02 +34854d8,30a5007c +34854dc,26030086 +34854e0,2606008a +34854e4,2407001b +34854e8,90640000 +34854ec,2482ffec +34854f0,304200ff +34854f4,2c42000d +34854f8,50400004 +34854fc,24630001 +3485500,54870001 +3485504,34a50001 +3485508,24630001 +348550c,5466fff7 +3485510,90640000 +3485514,3c028041 +3485518,a045b5bd +348551c,9203007b +3485520,2462fff9 +3485524,304200ff +3485528,2c420002 +348552c,14400003 +3485530,2025 +3485534,10000002 +3485538,24030007 +348553c,24040001 +3485540,3c028041 +3485544,2442b5b8 +3485548,a0440008 +348554c,a0430009 +3485550,9203007d +3485554,2462fff6 +3485558,304200ff +348555c,2c420002 +3485560,14400003 +3485564,2025 +3485568,10000002 +348556c,2403000a +3485570,24040001 +3485574,3c028041 +3485578,2442b5b8 +348557c,a044000a +3485580,a043000b +3485584,86020ef6 +3485588,4400016 +348558c,2403002b +3485590,96020ef4 +3485594,210c2 +3485598,3042008f +348559c,2c430010 +34855a0,10600012 +34855a4,2403002b +34855a8,50400007 +34855ac,9203008b +34855b0,3c038041 +34855b4,2463a014 +34855b8,431021 +34855bc,90430000 +34855c0,1000000d +34855c4,24040001 +34855c8,2462ffdf +34855cc,304200ff +34855d0,2c420003 +34855d4,14400008 +34855d8,24040001 +34855dc,10000005 +34855e0,2403002b +34855e4,10000004 +34855e8,24040001 +34855ec,10000002 +34855f0,24040001 +34855f4,2025 +34855f8,3c028041 +34855fc,2442b5b8 +3485600,a043000d +3485604,a044000c +3485608,9203008a +348560c,2462ffd3 +3485610,304200ff +3485614,2c42000b +3485618,14400003 +348561c,24040001 +3485620,24030037 +3485624,2025 +3485628,3c028041 +348562c,2442b5b8 +3485630,a043000f +3485634,a044000e +3485638,9202003c +348563c,10400005 +3485640,3c028041 +3485644,24030013 +3485648,a043b5c9 +348564c,10000004 +3485650,24030001 +3485654,24030012 +3485658,a043b5c9 +348565c,9203003a +3485660,3c028041 +3485664,a043b5c8 +3485668,8e0200a0 +348566c,21182 +3485670,30420007 +3485674,10400009 +3485678,2025 +348567c,401825 +3485680,2c420004 +3485684,50400001 +3485688,24030003 +348568c,2463004f +3485690,306300ff +3485694,10000002 +3485698,24040001 +348569c,24030050 +34856a0,3c028041 +34856a4,2442b5b8 +34856a8,a0440012 +34856ac,a0430013 +34856b0,8e0200a0 +34856b4,21242 +34856b8,30420007 +34856bc,50400009 +34856c0,2025 +34856c4,401825 +34856c8,2c420003 +34856cc,50400001 +34856d0,24030002 +34856d4,24630052 +34856d8,306300ff +34856dc,10000002 +34856e0,24040001 +34856e4,24030053 +34856e8,3c028041 +34856ec,2442b5b8 +34856f0,a0440014 +34856f4,a0430015 +34856f8,8e0300a0 +34856fc,31b02 +3485700,30630003 +3485704,a0430016 +3485708,86050034 +348570c,3c048041 +3485710,c1014bb +3485714,2484b5d3 +3485718,3c020080 +348571c,2221024 +3485720,10400002 +3485724,2825 +3485728,860500d0 +348572c,3c048041 +3485730,c1014bb +3485734,2484b5d6 +3485738,860508c6 +348573c,58a00001 +3485740,2405ffff +3485744,3c048041 +3485748,c1014bb +348574c,2484b5d9 +3485750,3c128041 +3485754,2652b5b8 +3485758,9202003d +348575c,a2420017 +3485760,8602002e +3485764,22fc3 +3485768,30a5000f +348576c,a22821 +3485770,52903 +3485774,3c048041 +3485778,c1014bb +348577c,2484b5d0 +3485780,86050022 +3485784,3c048041 +3485788,c1014bb +348578c,2484b5dc +3485790,118982 +3485794,32310fff +3485798,a6510028 +348579c,8fbf001c +34857a0,8fb20018 +34857a4,8fb10014 +34857a8,8fb00010 +34857ac,3e00008 +34857b0,27bd0020 +34857b4,27bdff88 +34857b8,afbf0074 +34857bc,afbe0070 +34857c0,afb7006c +34857c4,afb60068 +34857c8,afb50064 +34857cc,afb40060 +34857d0,afb3005c +34857d4,afb20058 +34857d8,afb10054 +34857dc,afb00050 +34857e0,3c020002 +34857e4,a21021 +34857e8,9443ca42 +34857ec,24020008 +34857f0,14620021 +34857f4,808825 +34857f8,3c020002 +34857fc,a21021 +3485800,9442ca36 +3485804,14400006 +3485808,3c020002 +348580c,a21021 +3485810,9444ca2e +3485814,24020002 +3485818,10820009 +348581c,3c020002 +3485820,a21021 +3485824,9442ca30 +3485828,24040005 +348582c,50440005 +3485830,3c020002 +3485834,24040016 +3485838,14440010 +348583c,3c020002 +3485840,3c020002 +3485844,a21021 +3485848,9443ca38 +348584c,31080 +3485850,431021 +3485854,21980 +3485858,431021 +348585c,21100 +3485860,24420020 +3485864,8ca401d8 +3485868,c10150e +348586c,822021 +3485870,10000220 +3485874,8fbf0074 +3485878,3c020002 +348587c,a21021 +3485880,9042ca37 +3485884,1440001d +3485888,2c44009a +348588c,3c020002 +3485890,a22821 +3485894,90a2ca31 +3485898,34420080 +348589c,2c44009a +34858a0,10800214 +34858a4,8fbf0074 +34858a8,2c440086 +34858ac,14800211 +34858b0,2442007a +34858b4,24040001 +34858b8,441004 +34858bc,3c040008 +34858c0,24840014 +34858c4,442024 +34858c8,1480003b +34858cc,3c040002 +34858d0,24840081 +34858d4,442024 +34858d8,54800030 +34858dc,24020008 +34858e0,3c030004 +34858e4,24630002 +34858e8,431024 +34858ec,10400202 +34858f0,8fbe0070 +34858f4,10000039 +34858f8,241600c8 +34858fc,108001fd +3485900,8fbf0074 +3485904,2c440086 +3485908,5080000e +348590c,2442007a +3485910,24040004 +3485914,10440028 +3485918,2c440005 +348591c,5080001b +3485920,24030006 +3485924,24040002 +3485928,5044001c +348592c,24020008 +3485930,24030003 +3485934,1043002d +3485938,241600c8 +348593c,100001ee +3485940,8fbe0070 +3485944,24040001 +3485948,441004 +348594c,3c040008 +3485950,24840014 +3485954,442024 +3485958,14800017 +348595c,3c040002 +3485960,24840081 +3485964,442024 +3485968,5480000c +348596c,24020008 +3485970,3c030004 +3485974,24630002 +3485978,431024 +348597c,104001dd +3485980,8fbf0074 +3485984,10000017 +3485988,241600c8 +348598c,10430017 +3485990,241600c8 +3485994,100001d7 +3485998,8fbf0074 +348599c,431023 +34859a0,21840 +34859a4,431821 +34859a8,318c0 +34859ac,431021 +34859b0,10000006 +34859b4,305600ff +34859b8,31040 +34859bc,621021 +34859c0,210c0 +34859c4,621821 +34859c8,307600ff +34859cc,12c001c9 +34859d0,8fbf0074 +34859d4,10000006 +34859d8,8e220008 +34859dc,10000004 +34859e0,8e220008 +34859e4,10000002 +34859e8,8e220008 +34859ec,8e220008 +34859f0,24430008 +34859f4,ae230008 +34859f8,3c03e700 +34859fc,ac430000 +3485a00,ac400004 +3485a04,8e220008 +3485a08,24430008 +3485a0c,ae230008 +3485a10,3c03fc11 +3485a14,34639623 +3485a18,ac430000 +3485a1c,3c03ff2f +3485a20,3463ffff +3485a24,ac430004 +3485a28,2c02825 +3485a2c,c1014b2 +3485a30,24040090 +3485a34,afa20048 +3485a38,afa20044 +3485a3c,a025 +3485a40,24030040 +3485a44,3c028041 +3485a48,afa20030 +3485a4c,3c028041 +3485a50,2442b5b8 +3485a54,afa2004c +3485a58,3c178041 +3485a5c,26f7a214 +3485a60,3c158041 +3485a64,26b5a194 +3485a68,8e240008 +3485a6c,24820008 +3485a70,ae220008 +3485a74,3c02fa00 +3485a78,ac820000 +3485a7c,31600 +3485a80,32c00 +3485a84,451025 +3485a88,8fa50044 +3485a8c,451025 +3485a90,31a00 +3485a94,431025 +3485a98,ac820004 +3485a9c,8fa20030 +3485aa0,2453a114 +3485aa4,8fbe004c +3485aa8,2670ff80 +3485aac,8fd20000 +3485ab0,92020000 +3485ab4,3042001f +3485ab8,50400012 +3485abc,26100004 +3485ac0,32420001 +3485ac4,5682000f +3485ac8,26100004 +3485acc,8e020000 +3485ad0,21f42 +3485ad4,31880 +3485ad8,751821 +3485adc,21602 +3485ae0,3042001f +3485ae4,afa20010 +3485ae8,96070002 +3485aec,73c00 +3485af0,92060001 +3485af4,8c650000 +3485af8,c1014f2 +3485afc,2202025 +3485b00,26100004 +3485b04,1613ffea +3485b08,129042 +3485b0c,26730080 +3485b10,16f3ffe5 +3485b14,27de0004 +3485b18,2c02825 +3485b1c,c1014b2 +3485b20,240400ff +3485b24,afa20044 +3485b28,26940001 +3485b2c,24020002 +3485b30,1682ffcd +3485b34,240300ff +3485b38,8fa50048 +3485b3c,9825 +3485b40,24030040 +3485b44,3c178041 +3485b48,3c1e8041 +3485b4c,3c158041 +3485b50,26b5a194 +3485b54,2416000c +3485b58,3c148041 +3485b5c,10000002 +3485b60,2694b5ce +3485b64,8fa50044 +3485b68,8e240008 +3485b6c,24820008 +3485b70,ae220008 +3485b74,3c02fa00 +3485b78,ac820000 +3485b7c,31600 +3485b80,33400 +3485b84,461025 +3485b88,451025 +3485b8c,31a00 +3485b90,431025 +3485b94,ac820004 +3485b98,26f2a07c +3485b9c,27d0b5c0 +3485ba0,92020000 +3485ba4,5453000f +3485ba8,26100002 +3485bac,92420000 +3485bb0,21080 +3485bb4,551021 +3485bb8,afb60010 +3485bbc,92430001 +3485bc0,31a00 +3485bc4,92470002 +3485bc8,e33825 +3485bcc,73c00 +3485bd0,92060001 +3485bd4,8c450000 +3485bd8,c1014f2 +3485bdc,2202025 +3485be0,26100002 +3485be4,1614ffee +3485be8,26520003 +3485bec,26730001 +3485bf0,327300ff +3485bf4,24020002 +3485bf8,1662ffda +3485bfc,240300ff +3485c00,3c028041 +3485c04,9456b5e0 +3485c08,24070001 +3485c0c,3025 +3485c10,3c058041 +3485c14,24a5a3e8 +3485c18,c101bd7 +3485c1c,2202025 +3485c20,afa00038 +3485c24,afa00034 +3485c28,afa00030 +3485c2c,b825 +3485c30,3c108041 +3485c34,2610a040 +3485c38,8fa20044 +3485c3c,afa2003c +3485c40,3c028041 +3485c44,2442a3e8 +3485c48,afa20040 +3485c4c,3c1e8041 +3485c50,10000005 +3485c54,27dea07c +3485c58,afb50038 +3485c5c,afb40034 +3485c60,afb30030 +3485c64,240b825 +3485c68,92120000 +3485c6c,92130001 +3485c70,92140002 +3485c74,32c20001 +3485c78,1440000e +3485c7c,8fb5003c +3485c80,24050040 +3485c84,c1014b2 +3485c88,2402025 +3485c8c,409025 +3485c90,24050040 +3485c94,c1014b2 +3485c98,2602025 +3485c9c,409825 +3485ca0,24050040 +3485ca4,c1014b2 +3485ca8,2802025 +3485cac,40a025 +3485cb0,8fb50048 +3485cb4,16570007 +3485cb8,8fa20030 +3485cbc,14530005 +3485cc0,8fa20034 +3485cc4,16820003 +3485cc8,8fa20038 +3485ccc,5055000e +3485cd0,92070003 +3485cd4,8e230008 +3485cd8,24620008 +3485cdc,ae220008 +3485ce0,3c02fa00 +3485ce4,ac620000 +3485ce8,121600 +3485cec,132400 +3485cf0,441025 +3485cf4,551025 +3485cf8,142200 +3485cfc,441025 +3485d00,ac620004 +3485d04,92070003 +3485d08,2402000a +3485d0c,afa20018 +3485d10,24020006 +3485d14,afa20014 +3485d18,82020004 +3485d1c,2442005c +3485d20,afa20010 +3485d24,24e70037 +3485d28,3025 +3485d2c,8fa50040 +3485d30,c101c3f +3485d34,2202025 +3485d38,26100005 +3485d3c,161effc6 +3485d40,16b042 +3485d44,3c108041 +3485d48,2610b5b8 +3485d4c,92020016 +3485d50,8fb50044 +3485d54,2a09025 +3485d58,21840 +3485d5c,621821 +3485d60,3c028041 +3485d64,2442a1a0 +3485d68,621821 +3485d6c,90620000 +3485d70,21600 +3485d74,90640001 +3485d78,42400 +3485d7c,441025 +3485d80,90630002 +3485d84,31a00 +3485d88,431025 +3485d8c,551025 3485d90,8e230008 -3485d94,24620008 -3485d98,ae220008 -3485d9c,3c02fa00 -3485da0,ac620000 -3485da4,121600 -3485da8,132400 -3485dac,441025 -3485db0,551025 -3485db4,142200 -3485db8,441025 -3485dbc,ac620004 -3485dc0,92070003 -3485dc4,2402000a -3485dc8,afa20018 -3485dcc,24020006 -3485dd0,afa20014 -3485dd4,82020004 -3485dd8,2442005c -3485ddc,afa20010 -3485de0,24e70037 -3485de4,3025 -3485de8,8fa50040 -3485dec,c101c0e -3485df0,2202025 -3485df4,26100005 -3485df8,161effc6 -3485dfc,16b042 -3485e00,3c108041 -3485e04,2610b230 -3485e08,92020016 -3485e0c,8fb50044 -3485e10,2a09025 -3485e14,21840 -3485e18,621821 -3485e1c,3c028041 -3485e20,24429e60 -3485e24,621821 -3485e28,90620000 -3485e2c,21600 -3485e30,90640001 -3485e34,42400 -3485e38,441025 -3485e3c,90630002 -3485e40,31a00 -3485e44,431025 -3485e48,551025 -3485e4c,8e230008 -3485e50,24640008 -3485e54,ae240008 -3485e58,3c13fa00 -3485e5c,ac730000 -3485e60,ac620004 -3485e64,3c028041 -3485e68,24429ce4 -3485e6c,24030010 -3485e70,afa30010 -3485e74,90430005 -3485e78,31a00 -3485e7c,90470006 -3485e80,e33825 -3485e84,73c00 -3485e88,24060001 -3485e8c,3c058041 -3485e90,24a5a058 -3485e94,c101521 +3485d94,24640008 +3485d98,ae240008 +3485d9c,3c13fa00 +3485da0,ac730000 +3485da4,ac620004 +3485da8,3c028041 +3485dac,2442a024 +3485db0,24030010 +3485db4,afa30010 +3485db8,90430005 +3485dbc,31a00 +3485dc0,90470006 +3485dc4,e33825 +3485dc8,73c00 +3485dcc,24060001 +3485dd0,3c058041 +3485dd4,24a5a3d8 +3485dd8,c1014f2 +3485ddc,2202025 +3485de0,2414ff00 +3485de4,2b4a025 +3485de8,8e220008 +3485dec,24430008 +3485df0,ae230008 +3485df4,ac530000 +3485df8,ac540004 +3485dfc,24070001 +3485e00,2406000c +3485e04,3c058041 +3485e08,24a5a428 +3485e0c,c101bd7 +3485e10,2202025 +3485e14,92020017 +3485e18,1440000e +3485e1c,24100010 +3485e20,24020010 +3485e24,afa20018 +3485e28,afa20014 +3485e2c,2402005c +3485e30,afa20010 +3485e34,2407003c +3485e38,3025 +3485e3c,3c058041 +3485e40,24a5a428 +3485e44,c101c3f +3485e48,2202025 +3485e4c,10000014 +3485e50,3c028041 +3485e54,afb00018 +3485e58,afb00014 +3485e5c,2415005c +3485e60,afb50010 +3485e64,2407003a +3485e68,3025 +3485e6c,3c138041 +3485e70,2665a428 +3485e74,c101c3f +3485e78,2202025 +3485e7c,afb00018 +3485e80,afb00014 +3485e84,afb50010 +3485e88,2407003e +3485e8c,3025 +3485e90,2665a428 +3485e94,c101c3f 3485e98,2202025 -3485e9c,2414ff00 -3485ea0,2b4a025 -3485ea4,8e220008 -3485ea8,24430008 -3485eac,ae230008 -3485eb0,ac530000 -3485eb4,ac540004 -3485eb8,24070001 -3485ebc,2406000c -3485ec0,3c058041 -3485ec4,24a5a0a8 -3485ec8,c101ba6 -3485ecc,2202025 -3485ed0,92020017 -3485ed4,1440000e -3485ed8,24100010 -3485edc,24020010 -3485ee0,afa20018 -3485ee4,afa20014 -3485ee8,2402005c -3485eec,afa20010 -3485ef0,2407003c -3485ef4,3025 -3485ef8,3c058041 -3485efc,24a5a0a8 -3485f00,c101c0e -3485f04,2202025 -3485f08,10000014 -3485f0c,3c028041 -3485f10,afb00018 -3485f14,afb00014 -3485f18,2415005c -3485f1c,afb50010 -3485f20,2407003a -3485f24,3025 -3485f28,3c138041 -3485f2c,2665a0a8 -3485f30,c101c0e -3485f34,2202025 -3485f38,afb00018 -3485f3c,afb00014 -3485f40,afb50010 -3485f44,2407003e -3485f48,3025 -3485f4c,2665a0a8 -3485f50,c101c0e -3485f54,2202025 -3485f58,3c028041 -3485f5c,9042b256 -3485f60,2c42000a -3485f64,1040000b -3485f68,24070001 -3485f6c,2402000a -3485f70,afa20010 -3485f74,3c028041 -3485f78,8c479cf8 -3485f7c,24060001 -3485f80,3c058041 -3485f84,24a5a038 -3485f88,c101521 -3485f8c,2202025 -3485f90,24070001 -3485f94,2406000b -3485f98,3c108041 -3485f9c,2605a0a8 -3485fa0,c101ba6 -3485fa4,2202025 -3485fa8,24020010 -3485fac,afa20018 -3485fb0,afa20014 -3485fb4,24020086 -3485fb8,afa20010 -3485fbc,2407003c -3485fc0,3025 -3485fc4,2605a0a8 -3485fc8,c101c0e -3485fcc,2202025 -3485fd0,3c028041 -3485fd4,9042b253 -3485fd8,2c42000a -3485fdc,1040001d -3485fe0,8e220008 -3485fe4,24430008 -3485fe8,ae230008 -3485fec,3c03fa00 -3485ff0,ac430000 -3485ff4,3c03f4ec -3485ff8,24633000 -3485ffc,2439025 -3486000,ac520004 -3486004,3c038041 -3486008,9062b1c4 -348600c,24440001 -3486010,a064b1c4 -3486014,3c038041 -3486018,24639ce4 -348601c,21082 -3486020,24040010 -3486024,afa40010 -3486028,9064000f -348602c,42200 -3486030,90670010 -3486034,e43825 -3486038,73c00 -348603c,3046000f -3486040,3c058041 -3486044,24a5a078 -3486048,c101521 -348604c,2202025 -3486050,8e220008 -3486054,24430008 -3486058,ae230008 -348605c,3c03fa00 -3486060,ac430000 -3486064,ac540004 -3486068,2407000a -348606c,3025 -3486070,3c058041 -3486074,24a5a048 -3486078,c101ba6 -348607c,2202025 -3486080,8fa2004c -3486084,2453001b -3486088,3c168041 -348608c,26d6b248 -3486090,3c148041 -3486094,26949ce4 -3486098,26820019 -348609c,afa20034 -34860a0,24170001 -34860a4,241e0008 -34860a8,3c028041 -34860ac,2442a048 -34860b0,afa20038 -34860b4,afa00020 -34860b8,afa00024 -34860bc,afa00028 -34860c0,afa0002c -34860c4,27b20020 -34860c8,2401825 -34860cc,2c02025 -34860d0,90820000 -34860d4,54570006 -34860d8,2c42000a -34860dc,8c620000 -34860e0,2442ffff -34860e4,ac620000 -34860e8,10000003 -34860ec,24020005 -34860f0,21023 -34860f4,30420006 -34860f8,8c650000 -34860fc,a21021 -3486100,ac620004 -3486104,24840001 -3486108,1493fff1 -348610c,24630004 -3486110,92950000 -3486114,26b50037 -3486118,82820002 -348611c,2a2a821 -3486120,92820004 -3486124,10400006 -3486128,2801825 -348612c,8fa4002c -3486130,417c2 -3486134,441021 -3486138,21043 -348613c,2a2a823 -3486140,80620001 -3486144,2442005c -3486148,80630003 -348614c,431021 -3486150,afa20030 -3486154,2c08025 -3486158,92060000 -348615c,2cc2000a -3486160,5040000b -3486164,26100001 -3486168,8e470000 -348616c,afbe0018 -3486170,afbe0014 -3486174,8fa20030 -3486178,afa20010 -348617c,2a73821 -3486180,8fa50038 -3486184,c101c0e -3486188,2202025 -348618c,26100001 -3486190,1613fff1 -3486194,26520004 -3486198,26730003 -348619c,26940005 -34861a0,8fa20034 -34861a4,1454ffc3 -34861a8,26d60003 -34861ac,8fbf0074 -34861b0,8fbe0070 -34861b4,8fb7006c -34861b8,8fb60068 -34861bc,8fb50064 -34861c0,8fb40060 -34861c4,8fb3005c -34861c8,8fb20058 -34861cc,8fb10054 -34861d0,8fb00050 -34861d4,3e00008 -34861d8,27bd0078 -34861dc,27bdffa0 -34861e0,afbf005c -34861e4,afbe0058 -34861e8,afb70054 -34861ec,afb60050 -34861f0,afb5004c -34861f4,afb40048 -34861f8,afb30044 -34861fc,afb20040 -3486200,afb1003c -3486204,afb00038 -3486208,afa40060 -348620c,afa50064 -3486210,3c02801c -3486214,344284a0 -3486218,8c500000 -348621c,261402b8 -3486220,8e0202c0 -3486224,24430008 -3486228,ae0302c0 -348622c,3c03de00 -3486230,ac430000 -3486234,3c038041 -3486238,2463a0e8 -348623c,ac430004 -3486240,8e0202c0 -3486244,24430008 -3486248,ae0302c0 -348624c,3c03e700 -3486250,ac430000 -3486254,ac400004 -3486258,8e0202c0 -348625c,24430008 -3486260,ae0302c0 -3486264,3c03fc11 -3486268,34639623 -348626c,ac430000 -3486270,3c03ff2f -3486274,3463ffff -3486278,ac430004 -348627c,8e0202c0 -3486280,24430008 -3486284,ae0302c0 -3486288,3c03fa00 -348628c,ac430000 -3486290,2403ffff -3486294,ac430004 -3486298,3c028041 -348629c,8c52b1c8 -34862a0,24110054 -34862a4,3c178041 -34862a8,26f79fe8 -34862ac,3c168041 -34862b0,26d6b12c -34862b4,24150018 -34862b8,241e000c -34862bc,3242001f -34862c0,21040 -34862c4,129143 -34862c8,571021 -34862cc,90430000 -34862d0,31880 -34862d4,761821 -34862d8,8c730000 -34862dc,24070001 -34862e0,90460001 -34862e4,2602825 -34862e8,c101ba6 -34862ec,2802025 -34862f0,afb50018 -34862f4,afb50014 -34862f8,afbe0010 -34862fc,2203825 -3486300,3025 -3486304,2602825 -3486308,c101c0e -348630c,2802025 -3486310,26310020 -3486314,240200f4 -3486318,1622ffe9 -348631c,3242001f -3486320,8fa50064 -3486324,c10161c -3486328,2802025 -348632c,8e0202c0 -3486330,24430008 -3486334,ae0302c0 -3486338,3c03e700 -348633c,ac430000 -3486340,ac400004 -3486344,8e0202c0 -3486348,24430008 -348634c,ae0302c0 -3486350,3c03fcff -3486354,3463ffff -3486358,ac430000 -348635c,3c03fffd -3486360,3463f6fb -3486364,ac430004 -3486368,8e0202c0 -348636c,24430008 -3486370,ae0302c0 -3486374,3c03fa00 -3486378,ac430000 -348637c,93a30063 -3486380,ac430004 -3486384,3c02e450 -3486388,244203c0 -348638c,afa20020 -3486390,afa00024 -3486394,3c02e100 -3486398,afa20028 -348639c,afa0002c -34863a0,3c02f100 -34863a4,afa20030 -34863a8,3c020400 -34863ac,24420400 -34863b0,afa20034 -34863b4,27a20020 -34863b8,27a60038 -34863bc,8e0302c0 -34863c0,24640008 -34863c4,ae0402c0 -34863c8,8c450004 -34863cc,8c440000 -34863d0,ac650004 -34863d4,24420008 -34863d8,14c2fff8 -34863dc,ac640000 -34863e0,8fbf005c -34863e4,8fbe0058 -34863e8,8fb70054 -34863ec,8fb60050 -34863f0,8fb5004c -34863f4,8fb40048 -34863f8,8fb30044 -34863fc,8fb20040 -3486400,8fb1003c -3486404,8fb00038 -3486408,3e00008 -348640c,27bd0060 -3486410,3c028040 -3486414,90420cdd -3486418,10400002 -348641c,3c02800f -3486420,a0401640 -3486424,3e00008 -348642c,3c028041 -3486430,9042b1cc -3486434,1040000d -3486438,3c028011 -348643c,3442a5d0 -3486440,8c430000 -3486444,24020517 -3486448,14620008 -3486450,27bdffe8 -3486454,afbf0014 -3486458,c1024f2 -3486460,8fbf0014 -3486464,3e00008 -3486468,27bd0018 -348646c,3e00008 -3486474,27bdffe8 -3486478,afbf0014 -348647c,3c028041 -3486480,8c42b1fc -3486484,218c0 -3486488,3c048041 -348648c,2484b274 -3486490,641821 -3486494,8c630000 -3486498,1060000c -348649c,24420001 -34864a0,220c0 -34864a4,3c038041 -34864a8,2463b274 -34864ac,641821 -34864b0,402825 -34864b4,8c640000 -34864b8,24420001 -34864bc,1480fffc -34864c0,24630008 -34864c4,3c028041 -34864c8,ac45b1fc -34864cc,c1026fa -34864d0,2404013c -34864d4,3c038041 -34864d8,ac62b1f8 -34864dc,24030001 -34864e0,ac430130 -34864e4,8fbf0014 -34864e8,3e00008 -34864ec,27bd0018 -34864f0,801025 -34864f4,84a30000 -34864f8,2404000a -34864fc,14640012 -3486500,24040015 -3486504,24030010 -3486508,14c30008 -348650c,94a3001c -3486510,31942 -3486514,3063007f -3486518,24040075 -348651c,54640003 -3486520,94a3001c -3486524,3e00008 -3486528,ac400000 -348652c,3063001f -3486530,a0400000 -3486534,a0460001 -3486538,24040001 -348653c,a0440002 -3486540,3e00008 -3486544,a0430003 -3486548,14640010 -348654c,2404019c -3486550,90a3001d -3486554,24040006 -3486558,10640005 -348655c,24040011 -3486560,50640004 -3486564,90a30141 -3486568,3e00008 -348656c,ac400000 -3486570,90a30141 -3486574,a0400000 -3486578,a0460001 -348657c,24040002 -3486580,a0440002 -3486584,3e00008 -3486588,a0430003 -348658c,1464000a -3486590,2404003e -3486594,94a4001c -3486598,a0400000 -348659c,41a02 -34865a0,3063001f -34865a4,a0430001 -34865a8,24030003 -34865ac,a0430002 -34865b0,3e00008 -34865b4,a0440003 -34865b8,54c4000d -34865bc,a4400000 -34865c0,2404011a -34865c4,5464000a -34865c8,a4400000 -34865cc,3c038011 -34865d0,3463a5d0 -34865d4,90631397 -34865d8,a0400000 -34865dc,a0430001 -34865e0,24030004 -34865e4,a0430002 +3485e9c,3c028041 +3485ea0,9042b5de +3485ea4,2c42000a +3485ea8,1040000b +3485eac,24070001 +3485eb0,2402000a +3485eb4,afa20010 +3485eb8,3c028041 +3485ebc,8c47a038 +3485ec0,24060001 +3485ec4,3c058041 +3485ec8,24a5a3b8 +3485ecc,c1014f2 +3485ed0,2202025 +3485ed4,24070001 +3485ed8,2406000b +3485edc,3c108041 +3485ee0,2605a428 +3485ee4,c101bd7 +3485ee8,2202025 +3485eec,24020010 +3485ef0,afa20018 +3485ef4,afa20014 +3485ef8,24020086 +3485efc,afa20010 +3485f00,2407003c +3485f04,3025 +3485f08,2605a428 +3485f0c,c101c3f +3485f10,2202025 +3485f14,3c028041 +3485f18,9042b5db +3485f1c,2c42000a +3485f20,1040001d +3485f24,8e220008 +3485f28,24430008 +3485f2c,ae230008 +3485f30,3c03fa00 +3485f34,ac430000 +3485f38,3c03f4ec +3485f3c,24633000 +3485f40,2439025 +3485f44,ac520004 +3485f48,3c038041 +3485f4c,9062b544 +3485f50,24440001 +3485f54,a064b544 +3485f58,3c038041 +3485f5c,2463a024 +3485f60,21082 +3485f64,24040010 +3485f68,afa40010 +3485f6c,9064000f +3485f70,42200 +3485f74,90670010 +3485f78,e43825 +3485f7c,73c00 +3485f80,3046000f +3485f84,3c058041 +3485f88,24a5a3f8 +3485f8c,c1014f2 +3485f90,2202025 +3485f94,8e220008 +3485f98,24430008 +3485f9c,ae230008 +3485fa0,3c03fa00 +3485fa4,ac430000 +3485fa8,ac540004 +3485fac,2407000a +3485fb0,3025 +3485fb4,3c058041 +3485fb8,24a5a3c8 +3485fbc,c101bd7 +3485fc0,2202025 +3485fc4,8fa2004c +3485fc8,2453001b +3485fcc,3c168041 +3485fd0,26d6b5d0 +3485fd4,3c148041 +3485fd8,2694a024 +3485fdc,26820019 +3485fe0,afa20034 +3485fe4,24170001 +3485fe8,241e0008 +3485fec,3c028041 +3485ff0,2442a3c8 +3485ff4,afa20038 +3485ff8,afa00020 +3485ffc,afa00024 +3486000,afa00028 +3486004,afa0002c +3486008,27b20020 +348600c,2401825 +3486010,2c02025 +3486014,90820000 +3486018,54570006 +348601c,2c42000a +3486020,8c620000 +3486024,2442ffff +3486028,ac620000 +348602c,10000003 +3486030,24020005 +3486034,21023 +3486038,30420006 +348603c,8c650000 +3486040,a21021 +3486044,ac620004 +3486048,24840001 +348604c,1493fff1 +3486050,24630004 +3486054,92950000 +3486058,26b50037 +348605c,82820002 +3486060,2a2a821 +3486064,92820004 +3486068,10400006 +348606c,2801825 +3486070,8fa4002c +3486074,417c2 +3486078,441021 +348607c,21043 +3486080,2a2a823 +3486084,80620001 +3486088,2442005c +348608c,80630003 +3486090,431021 +3486094,afa20030 +3486098,2c08025 +348609c,92060000 +34860a0,2cc2000a +34860a4,5040000b +34860a8,26100001 +34860ac,8e470000 +34860b0,afbe0018 +34860b4,afbe0014 +34860b8,8fa20030 +34860bc,afa20010 +34860c0,2a73821 +34860c4,8fa50038 +34860c8,c101c3f +34860cc,2202025 +34860d0,26100001 +34860d4,1613fff1 +34860d8,26520004 +34860dc,26730003 +34860e0,26940005 +34860e4,8fa20034 +34860e8,1454ffc3 +34860ec,26d60003 +34860f0,8fbf0074 +34860f4,8fbe0070 +34860f8,8fb7006c +34860fc,8fb60068 +3486100,8fb50064 +3486104,8fb40060 +3486108,8fb3005c +348610c,8fb20058 +3486110,8fb10054 +3486114,8fb00050 +3486118,3e00008 +348611c,27bd0078 +3486120,27bdffa0 +3486124,afbf005c +3486128,afbe0058 +348612c,afb70054 +3486130,afb60050 +3486134,afb5004c +3486138,afb40048 +348613c,afb30044 +3486140,afb20040 +3486144,afb1003c +3486148,afb00038 +348614c,afa40060 +3486150,afa50064 +3486154,3c02801c +3486158,344284a0 +348615c,8c500000 +3486160,261402b8 +3486164,8e0202c0 +3486168,24430008 +348616c,ae0302c0 +3486170,3c03de00 +3486174,ac430000 +3486178,3c038041 +348617c,2463a468 +3486180,ac430004 +3486184,8e0202c0 +3486188,24430008 +348618c,ae0302c0 +3486190,3c03e700 +3486194,ac430000 +3486198,ac400004 +348619c,8e0202c0 +34861a0,24430008 +34861a4,ae0302c0 +34861a8,3c03fc11 +34861ac,34639623 +34861b0,ac430000 +34861b4,3c03ff2f +34861b8,3463ffff +34861bc,ac430004 +34861c0,8e0202c0 +34861c4,24430008 +34861c8,ae0302c0 +34861cc,3c03fa00 +34861d0,ac430000 +34861d4,2403ffff +34861d8,ac430004 +34861dc,3c028041 +34861e0,8c52b548 +34861e4,24110054 +34861e8,3c178041 +34861ec,26f7a328 +34861f0,3c168041 +34861f4,26d6b4ac +34861f8,24150018 +34861fc,241e000c +3486200,3242001f +3486204,21040 +3486208,129143 +348620c,571021 +3486210,90430000 +3486214,31880 +3486218,761821 +348621c,8c730000 +3486220,24070001 +3486224,90460001 +3486228,2602825 +348622c,c101bd7 +3486230,2802025 +3486234,afb50018 +3486238,afb50014 +348623c,afbe0010 +3486240,2203825 +3486244,3025 +3486248,2602825 +348624c,c101c3f +3486250,2802025 +3486254,26310020 +3486258,240200f4 +348625c,1622ffe9 +3486260,3242001f +3486264,8fa50064 +3486268,c1015ed +348626c,2802025 +3486270,8e0202c0 +3486274,24430008 +3486278,ae0302c0 +348627c,3c03e700 +3486280,ac430000 +3486284,ac400004 +3486288,8e0202c0 +348628c,24430008 +3486290,ae0302c0 +3486294,3c03fcff +3486298,3463ffff +348629c,ac430000 +34862a0,3c03fffd +34862a4,3463f6fb +34862a8,ac430004 +34862ac,8e0202c0 +34862b0,24430008 +34862b4,ae0302c0 +34862b8,3c03fa00 +34862bc,ac430000 +34862c0,93a30063 +34862c4,ac430004 +34862c8,3c02e450 +34862cc,244203c0 +34862d0,afa20020 +34862d4,afa00024 +34862d8,3c02e100 +34862dc,afa20028 +34862e0,afa0002c +34862e4,3c02f100 +34862e8,afa20030 +34862ec,3c020400 +34862f0,24420400 +34862f4,afa20034 +34862f8,27a20020 +34862fc,27a60038 +3486300,8e0302c0 +3486304,24640008 +3486308,ae0402c0 +348630c,8c450004 +3486310,8c440000 +3486314,ac650004 +3486318,24420008 +348631c,14c2fff8 +3486320,ac640000 +3486324,8fbf005c +3486328,8fbe0058 +348632c,8fb70054 +3486330,8fb60050 +3486334,8fb5004c +3486338,8fb40048 +348633c,8fb30044 +3486340,8fb20040 +3486344,8fb1003c +3486348,8fb00038 +348634c,3e00008 +3486350,27bd0060 +3486354,3c028041 +3486358,9042b54c +348635c,1040000d +3486360,3c028011 +3486364,3442a5d0 +3486368,8c430000 +348636c,24020517 +3486370,14620008 +3486378,27bdffe8 +348637c,afbf0014 +3486380,c102532 +3486388,8fbf0014 +348638c,3e00008 +3486390,27bd0018 +3486394,3e00008 +348639c,14800003 +34863a0,3c028041 +34863a4,3e00008 +34863a8,8c42a368 +34863ac,27bdffe8 +34863b0,afbf0014 +34863b4,afb00010 +34863b8,808025 +34863bc,c1018e7 +34863c0,42102 +34863c4,3210000f +34863c8,108080 +34863cc,3c038041 +34863d0,2463a368 +34863d4,2038021 +34863d8,8e030000 +34863dc,431021 +34863e0,8fbf0014 +34863e4,8fb00010 +34863e8,3e00008 +34863ec,27bd0018 +34863f0,3c028011 +34863f4,3442a5d0 +34863f8,8c42135c +34863fc,1440004c +3486400,3c028041 +3486404,9042b550 +3486408,10400049 +348640c,3c038011 +3486410,3463a5d0 +3486414,906300b2 +3486418,30630001 +348641c,14600044 +3486420,24030003 +3486424,27bdffe8 +3486428,10430028 +348642c,afbf0014 +3486430,2c430004 +3486434,10600007 +3486438,24030001 +348643c,1043000a +3486440,24030002 +3486444,10430014 +3486448,3c028011 +348644c,10000036 +3486450,8fbf0014 +3486454,24030004 +3486458,10430029 +348645c,3c028011 +3486460,10000031 +3486464,8fbf0014 +3486468,3c028011 +348646c,3442a5d0 +3486470,8c4400a4 +3486474,c1018e7 +3486478,3084003f +348647c,3c038041 +3486480,9463b54e +3486484,43102b +3486488,10400024 +348648c,8fbf0014 +3486490,10000025 +3486498,3442a5d0 +348649c,8c4400a4 +34864a0,3c02001c +34864a4,2442003f +34864a8,c1018e7 +34864ac,822024 +34864b0,3c038041 +34864b4,9463b54e +34864b8,43102b +34864bc,10400017 +34864c0,8fbf0014 +34864c4,10000018 +34864cc,3c028011 +34864d0,3442a5d0 +34864d4,8c4400a4 +34864d8,3c02001c +34864dc,c1018e7 +34864e0,822024 +34864e4,3c038041 +34864e8,9463b54e +34864ec,43102b +34864f0,1040000a +34864f4,8fbf0014 +34864f8,1000000b +3486500,3442a5d0 +3486504,844200d0 +3486508,3c038041 +348650c,9463b54e +3486510,43102a +3486514,14400004 +3486518,8fbf0014 +348651c,c101a68 +3486520,24040003 +3486524,8fbf0014 +3486528,3e00008 +348652c,27bd0018 +3486530,3e00008 +3486538,27bdffe8 +348653c,afbf0014 +3486540,3c028041 +3486544,8c42b580 +3486548,218c0 +348654c,3c048041 +3486550,2484b5fc +3486554,641821 +3486558,8c630000 +348655c,1060000c +3486560,24420001 +3486564,220c0 +3486568,3c038041 +348656c,2463b5fc +3486570,641821 +3486574,402825 +3486578,8c640000 +348657c,24420001 +3486580,1480fffc +3486584,24630008 +3486588,3c028041 +348658c,ac45b580 +3486590,c10273a +3486594,2404013c +3486598,3c038041 +348659c,ac62b57c +34865a0,24030001 +34865a4,ac430130 +34865a8,8fbf0014 +34865ac,3e00008 +34865b0,27bd0018 +34865b4,801025 +34865b8,84a30000 +34865bc,2404000a +34865c0,14640012 +34865c4,24040015 +34865c8,24030010 +34865cc,14c30008 +34865d0,94a3001c +34865d4,31942 +34865d8,3063007f +34865dc,24040075 +34865e0,54640003 +34865e4,94a3001c 34865e8,3e00008 -34865ec,a0470003 -34865f0,a0400002 -34865f4,a0460001 -34865f8,3e00008 -34865fc,a0470003 -3486600,3c038041 -3486604,8c67b1fc -3486608,24e7ffff -348660c,4e00021 -3486610,801025 -3486614,27bdfff8 -3486618,4825 -348661c,3c0a8041 -3486620,254ab274 -3486624,1273021 -3486628,61fc2 -348662c,661821 -3486630,31843 -3486634,330c0 -3486638,ca3021 -348663c,8cc80000 -3486640,8cc60004 -3486644,afa60004 -3486648,a8302b -348664c,10c00003 -3486650,105302b -3486654,10000008 -3486658,2467ffff -348665c,50c00003 -3486660,ac480000 -3486664,10000004 -3486668,24690001 -348666c,8fa30004 -3486670,10000006 -3486674,ac430004 -3486678,e9182a -348667c,1060ffea -3486680,1273021 -3486684,ac400000 -3486688,ac400004 -348668c,3e00008 -3486690,27bd0008 -3486694,ac800000 -3486698,3e00008 -348669c,ac800004 -34866a0,27bdffe0 -34866a4,afbf001c -34866a8,afb00018 -34866ac,808025 -34866b0,c10193c -34866b4,27a40010 -34866b8,8fa50010 -34866bc,14a00004 -34866c4,ae000000 -34866c8,10000003 -34866cc,ae000004 -34866d0,c101980 -34866d4,2002025 -34866d8,2001025 -34866dc,8fbf001c -34866e0,8fb00018 -34866e4,3e00008 -34866e8,27bd0020 -34866ec,27bdffe8 -34866f0,afbf0014 -34866f4,afb00010 -34866f8,afa40018 -34866fc,58202 -3486700,afa5001c -3486704,321000ff -3486708,c101eb2 -348670c,52402 -3486710,c101ea3 -3486714,402025 -3486718,3c038041 -348671c,8fa40018 -3486720,ac64b1f0 -3486724,2463b1f0 -3486728,8fa4001c -348672c,ac640004 -3486730,10202b -3486734,3c038041 -3486738,ac64b1ec -348673c,3c038041 -3486740,ac62b1e8 -3486744,90440001 -3486748,3c038041 -348674c,ac64b1e4 -3486750,94440002 -3486754,3c038041 -3486758,ac64b1e0 -348675c,94440004 -3486760,3c038041 -3486764,ac64b1dc -3486768,80440006 -348676c,3c038041 -3486770,ac64b1d8 -3486774,90420007 -3486778,30420001 -348677c,3c038041 -3486780,16000003 -3486784,ac62b1d4 -3486788,3c028040 -348678c,90500024 -3486790,3c028040 -3486794,a0500025 -3486798,8fbf0014 -348679c,8fb00010 -34867a0,3e00008 -34867a4,27bd0018 -34867a8,3c028041 -34867ac,ac40b1f0 -34867b0,2442b1f0 -34867b4,ac400004 -34867b8,3c028041 -34867bc,ac40b1ec -34867c0,3c028041 -34867c4,ac40b1e8 -34867c8,3c028041 -34867cc,ac40b1e4 -34867d0,3c028041 -34867d4,ac40b1e0 -34867d8,3c028041 -34867dc,ac40b1dc -34867e0,3c028041 -34867e4,ac40b1d8 -34867e8,3c028041 -34867ec,3e00008 -34867f0,ac40b1d4 -34867f4,8c830000 -34867f8,3c028040 -34867fc,ac43002c -3486800,94830004 -3486804,3c028040 -3486808,a4430030 -348680c,90830006 -3486810,3c028040 -3486814,3e00008 -3486818,a4430032 -348681c,afa40000 -3486820,afa50004 -3486824,3c028041 -3486828,2442b25c -348682c,1825 -3486830,24060003 -3486834,8c450000 -3486838,14a0000a -3486840,318c0 -3486844,3c028041 -3486848,2442b25c -348684c,621821 -3486850,8fa20000 -3486854,ac620000 -3486858,8fa20004 -348685c,3e00008 -3486860,ac620004 -3486864,10a40003 -3486868,24630001 -348686c,1466fff1 -3486870,24420008 -3486874,3e00008 -348687c,3c028040 -3486880,94420028 -3486884,10400013 -3486888,2403ffff -348688c,27bdffe0 -3486890,afbf001c -3486894,afa00010 -3486898,afa00014 -348689c,a3a30011 -34868a0,24040005 -34868a4,a3a40012 -34868a8,a3a30013 -34868ac,3c038040 -34868b0,94630026 -34868b4,a3a30016 -34868b8,a7a20014 -34868bc,8fa40010 -34868c0,c101a07 -34868c4,8fa50014 -34868c8,8fbf001c -34868cc,3e00008 -34868d0,27bd0020 -34868d4,3e00008 -34868dc,27bdffe0 -34868e0,afbf001c -34868e4,3c0200ff -34868e8,34420500 -34868ec,442825 -34868f0,c101980 -34868f4,27a40010 -34868f8,8fa20010 -34868fc,10400005 -3486900,8fbf001c -3486904,402025 -3486908,c101a07 -348690c,8fa50014 -3486910,8fbf001c -3486914,3e00008 -3486918,27bd0020 -348691c,3c038041 -3486920,2462b25c -3486924,8c450008 -3486928,8c44000c -348692c,ac65b25c -3486930,ac440004 -3486934,8c440010 -3486938,8c430014 -348693c,ac440008 -3486940,ac43000c -3486944,ac400010 -3486948,3e00008 -348694c,ac400014 -3486950,801825 -3486954,3084ffff -3486958,240205ff -348695c,1482000b -3486960,27bdfff8 -3486964,3c028011 -3486968,3442a660 -348696c,94430000 -3486970,24630001 -3486974,a4430000 -3486978,3c028040 -348697c,a4400028 -3486980,3c028040 -3486984,10000009 -3486988,a4400026 -348698c,3c020057 -3486990,24420058 -3486994,14620005 -3486998,3c02801c -348699c,344284a0 -34869a0,8c431d38 -34869a4,34630001 -34869a8,ac431d38 -34869ac,3e00008 -34869b0,27bd0008 -34869b4,27bdffe0 -34869b8,afbf001c -34869bc,afb00018 -34869c0,3c028041 -34869c4,8c50b25c -34869c8,2442b25c -34869cc,8c420004 -34869d0,afa20010 -34869d4,2403ff00 -34869d8,431024 -34869dc,3c03007c -34869e0,14430008 -34869e4,8fbf001c -34869e8,c101dc6 -34869f0,c101a47 -34869f8,c101a54 -34869fc,2002025 -3486a00,8fbf001c -3486a04,8fb00018 -3486a08,3e00008 -3486a0c,27bd0020 -3486a10,27bdffe8 -3486a14,afbf0014 -3486a18,afb00010 -3486a1c,3c028041 -3486a20,8c50b1f0 -3486a24,1200000e -3486a28,8fbf0014 -3486a2c,c1019fd -3486a30,2444b1f0 -3486a34,3c028041 -3486a38,8c42b25c -3486a3c,14500003 -3486a44,c101a47 -3486a4c,c101a54 -3486a50,2002025 -3486a54,c1019ea -3486a5c,8fbf0014 -3486a60,8fb00010 -3486a64,3e00008 -3486a68,27bd0018 -3486a6c,27bdffe0 -3486a70,afbf001c -3486a74,3c028041 -3486a78,8c43b25c -3486a7c,2442b25c -3486a80,8c420004 -3486a84,afa30010 -3486a88,1060000d -3486a8c,afa20014 -3486a90,602025 -3486a94,c1019bb -3486a98,402825 -3486a9c,3c02801d -3486aa0,3442aa30 -3486aa4,3c038041 -3486aa8,8c63b1f8 -3486aac,ac430428 -3486ab0,3c038041 -3486ab4,8c63b1e8 -3486ab8,80630000 -3486abc,a0430424 -3486ac0,8fbf001c -3486ac4,3e00008 -3486ac8,27bd0020 -3486acc,27bdffe8 -3486ad0,afbf0014 -3486ad4,c101a1f -3486adc,3c02801d -3486ae0,3442aa30 -3486ae4,8c42066c -3486ae8,3c03fcac -3486aec,24632485 -3486af0,431024 -3486af4,14400033 +34865ec,ac400000 +34865f0,3063001f +34865f4,a0400000 +34865f8,a0460001 +34865fc,24040001 +3486600,a0440002 +3486604,3e00008 +3486608,a0430003 +348660c,14640010 +3486610,2404019c +3486614,90a3001d +3486618,24040006 +348661c,10640005 +3486620,24040011 +3486624,50640004 +3486628,90a30141 +348662c,3e00008 +3486630,ac400000 +3486634,90a30141 +3486638,a0400000 +348663c,a0460001 +3486640,24040002 +3486644,a0440002 +3486648,3e00008 +348664c,a0430003 +3486650,1464000a +3486654,2404003e +3486658,94a4001c +348665c,a0400000 +3486660,41a02 +3486664,3063001f +3486668,a0430001 +348666c,24030003 +3486670,a0430002 +3486674,3e00008 +3486678,a0440003 +348667c,54c4000d +3486680,a4400000 +3486684,2404011a +3486688,5464000a +348668c,a4400000 +3486690,3c038011 +3486694,3463a5d0 +3486698,90631397 +348669c,a0400000 +34866a0,a0430001 +34866a4,24030004 +34866a8,a0430002 +34866ac,3e00008 +34866b0,a0470003 +34866b4,a0400002 +34866b8,a0460001 +34866bc,3e00008 +34866c0,a0470003 +34866c4,3c038041 +34866c8,8c67b580 +34866cc,24e7ffff +34866d0,4e00021 +34866d4,801025 +34866d8,27bdfff8 +34866dc,4825 +34866e0,3c0a8041 +34866e4,254ab5fc +34866e8,1273021 +34866ec,61fc2 +34866f0,661821 +34866f4,31843 +34866f8,330c0 +34866fc,ca3021 +3486700,8cc80000 +3486704,8cc60004 +3486708,afa60004 +348670c,a8302b +3486710,10c00003 +3486714,105302b +3486718,10000008 +348671c,2467ffff +3486720,50c00003 +3486724,ac480000 +3486728,10000004 +348672c,24690001 +3486730,8fa30004 +3486734,10000006 +3486738,ac430004 +348673c,e9182a +3486740,1060ffea +3486744,1273021 +3486748,ac400000 +348674c,ac400004 +3486750,3e00008 +3486754,27bd0008 +3486758,ac800000 +348675c,3e00008 +3486760,ac800004 +3486764,27bdffe0 +3486768,afbf001c +348676c,afb00018 +3486770,808025 +3486774,c10196d +3486778,27a40010 +348677c,8fa50010 +3486780,14a00004 +3486788,ae000000 +348678c,10000003 +3486790,ae000004 +3486794,c1019b1 +3486798,2002025 +348679c,2001025 +34867a0,8fbf001c +34867a4,8fb00018 +34867a8,3e00008 +34867ac,27bd0020 +34867b0,27bdffe8 +34867b4,afbf0014 +34867b8,afb00010 +34867bc,afa40018 +34867c0,58202 +34867c4,afa5001c +34867c8,321000ff +34867cc,c101ee3 +34867d0,52402 +34867d4,c101ed4 +34867d8,402025 +34867dc,3c038041 +34867e0,8fa40018 +34867e4,ac64b574 +34867e8,2463b574 +34867ec,8fa4001c +34867f0,ac640004 +34867f4,10202b +34867f8,3c038041 +34867fc,ac64b570 +3486800,3c038041 +3486804,ac62b56c +3486808,90440001 +348680c,3c038041 +3486810,ac64b568 +3486814,94440002 +3486818,3c038041 +348681c,ac64b564 +3486820,94440004 +3486824,3c038041 +3486828,ac64b560 +348682c,80440006 +3486830,3c038041 +3486834,ac64b55c +3486838,90420007 +348683c,30420001 +3486840,3c038041 +3486844,16000003 +3486848,ac62b558 +348684c,3c028040 +3486850,90500024 +3486854,3c028040 +3486858,a0500025 +348685c,8fbf0014 +3486860,8fb00010 +3486864,3e00008 +3486868,27bd0018 +348686c,3c028041 +3486870,ac40b574 +3486874,2442b574 +3486878,ac400004 +348687c,3c028041 +3486880,ac40b570 +3486884,3c028041 +3486888,ac40b56c +348688c,3c028041 +3486890,ac40b568 +3486894,3c028041 +3486898,ac40b564 +348689c,3c028041 +34868a0,ac40b560 +34868a4,3c028041 +34868a8,ac40b55c +34868ac,3c028041 +34868b0,3e00008 +34868b4,ac40b558 +34868b8,8c830000 +34868bc,3c028040 +34868c0,ac43002c +34868c4,94830004 +34868c8,3c028040 +34868cc,a4430030 +34868d0,90830006 +34868d4,3c028040 +34868d8,3e00008 +34868dc,a4430032 +34868e0,afa40000 +34868e4,afa50004 +34868e8,3c028041 +34868ec,2442b5e4 +34868f0,1825 +34868f4,24060003 +34868f8,8c450000 +34868fc,14a0000a +3486904,318c0 +3486908,3c028041 +348690c,2442b5e4 +3486910,621821 +3486914,8fa20000 +3486918,ac620000 +348691c,8fa20004 +3486920,3e00008 +3486924,ac620004 +3486928,10a40003 +348692c,24630001 +3486930,1466fff1 +3486934,24420008 +3486938,3e00008 +3486940,3c028040 +3486944,94420028 +3486948,10400013 +348694c,2403ffff +3486950,27bdffe0 +3486954,afbf001c +3486958,afa00010 +348695c,afa00014 +3486960,a3a30011 +3486964,24040005 +3486968,a3a40012 +348696c,a3a30013 +3486970,3c038040 +3486974,94630026 +3486978,a3a30016 +348697c,a7a20014 +3486980,8fa40010 +3486984,c101a38 +3486988,8fa50014 +348698c,8fbf001c +3486990,3e00008 +3486994,27bd0020 +3486998,3e00008 +34869a0,27bdffe0 +34869a4,afbf001c +34869a8,3c0200ff +34869ac,34420500 +34869b0,442825 +34869b4,c1019b1 +34869b8,27a40010 +34869bc,8fa20010 +34869c0,10400005 +34869c4,8fbf001c +34869c8,402025 +34869cc,c101a38 +34869d0,8fa50014 +34869d4,8fbf001c +34869d8,3e00008 +34869dc,27bd0020 +34869e0,3c038041 +34869e4,2462b5e4 +34869e8,8c450008 +34869ec,8c44000c +34869f0,ac65b5e4 +34869f4,ac440004 +34869f8,8c440010 +34869fc,8c430014 +3486a00,ac440008 +3486a04,ac43000c +3486a08,ac400010 +3486a0c,3e00008 +3486a10,ac400014 +3486a14,801825 +3486a18,3084ffff +3486a1c,240205ff +3486a20,1482000b +3486a24,27bdfff8 +3486a28,3c028011 +3486a2c,3442a660 +3486a30,94430000 +3486a34,24630001 +3486a38,a4430000 +3486a3c,3c028040 +3486a40,a4400028 +3486a44,3c028040 +3486a48,10000009 +3486a4c,a4400026 +3486a50,3c020057 +3486a54,24420058 +3486a58,14620005 +3486a5c,3c02801c +3486a60,344284a0 +3486a64,8c431d38 +3486a68,34630001 +3486a6c,ac431d38 +3486a70,3e00008 +3486a74,27bd0008 +3486a78,27bdffe0 +3486a7c,afbf001c +3486a80,afb00018 +3486a84,3c028041 +3486a88,8c50b5e4 +3486a8c,2442b5e4 +3486a90,8c420004 +3486a94,afa20010 +3486a98,2403ff00 +3486a9c,431024 +3486aa0,3c03007c +3486aa4,14430008 +3486aa8,8fbf001c +3486aac,c101df7 +3486ab4,c101a78 +3486abc,c101a85 +3486ac0,2002025 +3486ac4,8fbf001c +3486ac8,8fb00018 +3486acc,3e00008 +3486ad0,27bd0020 +3486ad4,27bdffe8 +3486ad8,afbf0014 +3486adc,afb00010 +3486ae0,3c028041 +3486ae4,8c50b574 +3486ae8,1200000e +3486aec,8fbf0014 +3486af0,c101a2e +3486af4,2444b574 3486af8,3c028041 -3486afc,3c02801d -3486b00,3442aa30 -3486b04,94420088 -3486b08,30420001 -3486b0c,1040002a -3486b10,1025 -3486b14,3c02801d -3486b18,3442aa30 -3486b1c,8c420670 -3486b20,3c03000c -3486b24,431024 -3486b28,14400023 -3486b2c,1025 -3486b30,3c02800e -3486b34,3442f1b0 -3486b38,8c420000 -3486b3c,30420020 -3486b40,1440001d -3486b44,1025 -3486b48,3c02801c -3486b4c,344284a0 -3486b50,8c420794 -3486b54,14400018 -3486b58,1025 -3486b5c,3c028041 -3486b60,9042b1d0 -3486b64,24420001 -3486b68,304200ff -3486b6c,2c430002 -3486b70,14600012 +3486afc,8c42b5e4 +3486b00,14500003 +3486b08,c101a78 +3486b10,c101a85 +3486b14,2002025 +3486b18,c101a1b +3486b20,8fbf0014 +3486b24,8fb00010 +3486b28,3e00008 +3486b2c,27bd0018 +3486b30,27bdffe0 +3486b34,afbf001c +3486b38,3c028041 +3486b3c,8c43b5e4 +3486b40,2442b5e4 +3486b44,8c420004 +3486b48,afa30010 +3486b4c,1060000d +3486b50,afa20014 +3486b54,602025 +3486b58,c1019ec +3486b5c,402825 +3486b60,3c02801d +3486b64,3442aa30 +3486b68,3c038041 +3486b6c,8c63b57c +3486b70,ac430428 3486b74,3c038041 -3486b78,3c028041 -3486b7c,c101a6d -3486b80,a040b1d0 -3486b84,c101dc2 -3486b8c,10400005 -3486b94,c101dcb -3486b9c,1000000b -3486ba0,8fbf0014 -3486ba4,c101a9b -3486bac,10000007 -3486bb0,8fbf0014 -3486bb4,1025 -3486bb8,3c038041 -3486bbc,10000002 -3486bc0,a062b1d0 -3486bc4,a040b1d0 -3486bc8,8fbf0014 -3486bcc,3e00008 -3486bd0,27bd0018 -3486bd4,27bdffd8 -3486bd8,afbf0024 -3486bdc,afb20020 -3486be0,afb1001c -3486be4,afb00018 -3486be8,a09025 -3486bec,10800012 -3486bf0,c08825 -3486bf4,10c00010 -3486bf8,808025 -3486bfc,4c10004 -3486c00,c03825 -3486c04,63823 -3486c08,73e00 -3486c0c,73e03 -3486c10,30e700ff -3486c14,3c02801c -3486c18,344284a0 -3486c1c,904600a5 -3486c20,2002825 -3486c24,c1019a8 -3486c28,27a40010 -3486c2c,8fa20010 -3486c30,14400005 -3486c34,8fa40010 -3486c38,c1019ea -3486c40,10000019 -3486c44,2201025 -3486c48,c1019bb -3486c4c,8fa50014 -3486c50,3c028041 -3486c54,8c42b1e8 -3486c58,86040000 -3486c5c,2403000a -3486c60,1483000c -3486c64,80420000 -3486c68,8fa30014 -3486c6c,2404ff00 -3486c70,641824 -3486c74,3c04007c -3486c78,50640001 -3486c7c,2402007c -3486c80,9603001c -3486c84,3063f01f -3486c88,22140 -3486c8c,641825 -3486c90,a603001c -3486c94,6230005 -3486c98,a2420424 -3486c9c,21023 -3486ca0,21600 -3486ca4,21603 -3486ca8,a2420424 -3486cac,8fbf0024 -3486cb0,8fb20020 -3486cb4,8fb1001c -3486cb8,8fb00018 -3486cbc,3e00008 -3486cc0,27bd0028 -3486cc4,27bdffd8 -3486cc8,afbf0024 -3486ccc,afb20020 -3486cd0,afb1001c -3486cd4,afb00018 -3486cd8,808825 -3486cdc,3825 -3486ce0,3025 -3486ce4,802825 -3486ce8,c1019a8 +3486b78,8c63b56c +3486b7c,80630000 +3486b80,a0430424 +3486b84,8fbf001c +3486b88,3e00008 +3486b8c,27bd0020 +3486b90,27bdffe8 +3486b94,afbf0014 +3486b98,c101a50 +3486ba0,3c02801d +3486ba4,3442aa30 +3486ba8,8c42066c +3486bac,3c03fcac +3486bb0,24632485 +3486bb4,431024 +3486bb8,14400033 +3486bbc,3c028041 +3486bc0,3c02801d +3486bc4,3442aa30 +3486bc8,94420088 +3486bcc,30420001 +3486bd0,1040002a +3486bd4,1025 +3486bd8,3c02801d +3486bdc,3442aa30 +3486be0,8c420670 +3486be4,3c03000c +3486be8,431024 +3486bec,14400023 +3486bf0,1025 +3486bf4,3c02800e +3486bf8,3442f1b0 +3486bfc,8c420000 +3486c00,30420020 +3486c04,1440001d +3486c08,1025 +3486c0c,3c02801c +3486c10,344284a0 +3486c14,8c420794 +3486c18,14400018 +3486c1c,1025 +3486c20,3c028041 +3486c24,9042b554 +3486c28,24420001 +3486c2c,304200ff +3486c30,2c430002 +3486c34,14600012 +3486c38,3c038041 +3486c3c,3c028041 +3486c40,c101a9e +3486c44,a040b554 +3486c48,c101df3 +3486c50,10400005 +3486c58,c101dfc +3486c60,1000000b +3486c64,8fbf0014 +3486c68,c101acc +3486c70,10000007 +3486c74,8fbf0014 +3486c78,1025 +3486c7c,3c038041 +3486c80,10000002 +3486c84,a062b554 +3486c88,a040b554 +3486c8c,8fbf0014 +3486c90,3e00008 +3486c94,27bd0018 +3486c98,27bdffd8 +3486c9c,afbf0024 +3486ca0,afb20020 +3486ca4,afb1001c +3486ca8,afb00018 +3486cac,a09025 +3486cb0,10800012 +3486cb4,c08825 +3486cb8,10c00010 +3486cbc,808025 +3486cc0,4c10004 +3486cc4,c03825 +3486cc8,63823 +3486ccc,73e00 +3486cd0,73e03 +3486cd4,30e700ff +3486cd8,3c02801c +3486cdc,344284a0 +3486ce0,904600a5 +3486ce4,2002825 +3486ce8,c1019d9 3486cec,27a40010 3486cf0,8fa20010 -3486cf4,10400029 -3486cf8,93b20016 -3486cfc,c101eb2 -3486d00,97a40014 -3486d04,c101ea3 -3486d08,402025 -3486d0c,408025 -3486d10,ae200134 -3486d14,3c028040 -3486d18,16400015 -3486d1c,a0520025 -3486d20,3c028040 -3486d24,90430024 -3486d28,3c028040 -3486d2c,a0430025 -3486d30,3025 -3486d34,96050002 -3486d38,3c11801c -3486d3c,3c02800d -3486d40,3442ce14 -3486d44,40f809 -3486d48,362484a0 -3486d4c,92050001 -3486d50,3c028006 -3486d54,3442fdcc -3486d58,40f809 -3486d5c,362484a0 -3486d60,c101eca -3486d64,2002025 -3486d68,10000013 -3486d6c,8fbf0024 -3486d70,3025 -3486d74,96050002 -3486d78,3c04801c -3486d7c,3c02800d -3486d80,3442ce14 -3486d84,40f809 -3486d88,348484a0 -3486d8c,c1019fd -3486d90,27a40010 -3486d94,10000008 -3486d98,8fbf0024 -3486d9c,c101eb2 -3486da0,2404005b -3486da4,c101ea3 -3486da8,402025 -3486dac,408025 -3486db0,1000ffdb -3486db4,ae200134 -3486db8,8fb20020 -3486dbc,8fb1001c -3486dc0,8fb00018 -3486dc4,3e00008 -3486dc8,27bd0028 -3486dcc,27bdffe8 -3486dd0,afbf0014 -3486dd4,afb00010 -3486dd8,3c028011 -3486ddc,3442a5d0 -3486de0,94500eec -3486de4,32100002 -3486de8,1600000c +3486cf4,14400005 +3486cf8,8fa40010 +3486cfc,c101a1b +3486d04,10000019 +3486d08,2201025 +3486d0c,c1019ec +3486d10,8fa50014 +3486d14,3c028041 +3486d18,8c42b56c +3486d1c,86040000 +3486d20,2403000a +3486d24,1483000c +3486d28,80420000 +3486d2c,8fa30014 +3486d30,2404ff00 +3486d34,641824 +3486d38,3c04007c +3486d3c,50640001 +3486d40,2402007c +3486d44,9603001c +3486d48,3063f01f +3486d4c,22140 +3486d50,641825 +3486d54,a603001c +3486d58,6230005 +3486d5c,a2420424 +3486d60,21023 +3486d64,21600 +3486d68,21603 +3486d6c,a2420424 +3486d70,8fbf0024 +3486d74,8fb20020 +3486d78,8fb1001c +3486d7c,8fb00018 +3486d80,3e00008 +3486d84,27bd0028 +3486d88,27bdffd8 +3486d8c,afbf0024 +3486d90,afb20020 +3486d94,afb1001c +3486d98,afb00018 +3486d9c,808825 +3486da0,3825 +3486da4,3025 +3486da8,802825 +3486dac,c1019d9 +3486db0,27a40010 +3486db4,8fa20010 +3486db8,10400029 +3486dbc,93b20016 +3486dc0,c101ee3 +3486dc4,97a40014 +3486dc8,c101ed4 +3486dcc,402025 +3486dd0,408025 +3486dd4,ae200134 +3486dd8,3c028040 +3486ddc,16400015 +3486de0,a0520025 +3486de4,3c028040 +3486de8,90430024 3486dec,3c028040 -3486df0,90420cd5 -3486df4,50400004 -3486df8,3c028011 -3486dfc,c101a37 -3486e00,24040002 -3486e04,3c028011 -3486e08,3442a5d0 -3486e0c,94430eec -3486e10,34630002 -3486e14,a4430eec -3486e18,3c028040 -3486e1c,90430cd5 -3486e20,14600002 -3486e24,24020001 -3486e28,10102b -3486e2c,8fbf0014 -3486e30,8fb00010 -3486e34,3e00008 -3486e38,27bd0018 -3486e3c,94830004 -3486e40,94820006 -3486e44,620018 -3486e48,9082000c -3486e4c,1812 -3486e58,620018 -3486e5c,1012 -3486e60,3e00008 -3486e68,27bdffe8 -3486e6c,afbf0014 -3486e70,afb00010 -3486e74,c101b8f -3486e78,808025 -3486e7c,96030008 -3486e80,620018 -3486e84,1012 -3486e88,8fbf0014 -3486e8c,8fb00010 -3486e90,3e00008 -3486e94,27bd0018 -3486e98,27bdff98 -3486e9c,afbf0064 -3486ea0,afb60060 -3486ea4,afb5005c -3486ea8,afb40058 -3486eac,afb30054 -3486eb0,afb20050 -3486eb4,afb1004c -3486eb8,afb00048 -3486ebc,808025 -3486ec0,a0a025 -3486ec4,c0a825 -3486ec8,94b10004 -3486ecc,94a20006 -3486ed0,470018 -3486ed4,9012 -3486ed8,90b6000b -3486edc,90b3000a -3486ee0,139d40 -3486ee4,3c0200e0 -3486ee8,2629824 -3486eec,1614c0 -3486ef0,3c030018 -3486ef4,431024 -3486ef8,2629825 -3486efc,2622ffff -3486f00,30420fff -3486f04,531025 -3486f08,3c03fd00 -3486f0c,431025 -3486f10,afa20010 -3486f14,c101b8f -3486f18,a02025 -3486f1c,550018 -3486f20,8e820000 -3486f24,1812 -3486f28,431021 -3486f2c,afa20014 -3486f30,2ec30002 -3486f34,10600003 -3486f38,24020010 -3486f3c,24020004 -3486f40,2c21004 -3486f44,510018 -3486f48,1812 -3486f4c,2463003f -3486f50,317c3 -3486f54,3042003f -3486f58,431021 -3486f5c,210c0 -3486f60,3c030003 -3486f64,3463fe00 -3486f68,431024 -3486f6c,531025 -3486f70,3c03f500 -3486f74,431025 -3486f78,afa20018 -3486f7c,3c040700 -3486f80,afa4001c -3486f84,3c03e600 -3486f88,afa30020 -3486f8c,afa00024 -3486f90,3c03f400 -3486f94,afa30028 -3486f98,2623ffff -3486f9c,31b80 -3486fa0,3c0500ff -3486fa4,34a5f000 -3486fa8,651824 -3486fac,2652ffff -3486fb0,129080 -3486fb4,32520ffc -3486fb8,721825 -3486fbc,642025 -3486fc0,afa4002c -3486fc4,3c04e700 -3486fc8,afa40030 -3486fcc,afa00034 -3486fd0,afa20038 -3486fd4,afa0003c -3486fd8,3c02f200 -3486fdc,afa20040 -3486fe0,afa30044 -3486fe4,27a20010 -3486fe8,27a60048 -3486fec,8e030008 -3486ff0,24640008 -3486ff4,ae040008 -3486ff8,8c450004 -3486ffc,8c440000 -3487000,ac650004 -3487004,24420008 -3487008,1446fff8 -348700c,ac640000 -3487010,8fbf0064 -3487014,8fb60060 -3487018,8fb5005c -348701c,8fb40058 -3487020,8fb30054 -3487024,8fb20050 -3487028,8fb1004c -348702c,8fb00048 -3487030,3e00008 -3487034,27bd0068 -3487038,27bdffe0 -348703c,8fa80030 -3487040,8fa20034 -3487044,8faa0038 -3487048,94a30004 -348704c,31a80 -3487050,14400002 -3487054,62001a -3487058,7000d -348705c,4812 -3487060,94a30006 -3487064,471021 -3487068,21380 -348706c,3c0b00ff -3487070,356bf000 -3487074,4b1024 -3487078,1482821 -348707c,52880 -3487080,30a50fff -3487084,451025 -3487088,3c05e400 -348708c,451025 -3487090,afa20000 -3487094,73b80 -3487098,eb3824 -348709c,84080 -34870a0,31080fff -34870a4,e83825 -34870a8,afa70004 -34870ac,3c02e100 -34870b0,afa20008 -34870b4,660018 -34870b8,1012 -34870bc,21140 -34870c0,3042ffff -34870c4,afa2000c -34870c8,3c02f100 -34870cc,afa20010 -34870d0,31a80 -34870d4,15400002 -34870d8,6a001a -34870dc,7000d -34870e0,1012 -34870e4,3042ffff -34870e8,94c00 -34870ec,491025 -34870f0,afa20014 -34870f4,afbd0018 -34870f8,27a50018 -34870fc,8c820008 -3487100,24430008 -3487104,ac830008 -3487108,8fa30018 -348710c,8c670004 -3487110,8c660000 -3487114,ac470004 -3487118,ac460000 -348711c,24620008 -3487120,1445fff6 -3487124,afa20018 -3487128,3e00008 -348712c,27bd0020 -3487130,27bdffa0 -3487134,afbf005c -3487138,afb10058 -348713c,afb00054 -3487140,afa00010 -3487144,3c0201a0 -3487148,24422000 -348714c,afa20014 -3487150,3c110003 -3487154,362295c0 -3487158,afa20018 -348715c,c102709 -3487160,27a40010 -3487164,afa0001c -3487168,3c020084 -348716c,24426000 -3487170,afa20020 -3487174,3402b400 -3487178,afa20024 -348717c,c102709 -3487180,27a4001c -3487184,afa00028 -3487188,3c02007b -348718c,3442d000 -3487190,afa2002c -3487194,3c100008 -3487198,361088a0 -348719c,afb00030 -34871a0,c102709 -34871a4,27a40028 -34871a8,afa00034 -34871ac,3c0201a3 -34871b0,3442c000 -34871b4,afa20038 -34871b8,24023b00 -34871bc,afa2003c -34871c0,c102709 -34871c4,27a40034 -34871c8,afa00040 -34871cc,3c020085 -34871d0,3442e000 -34871d4,afa20044 -34871d8,24021d80 -34871dc,afa20048 -34871e0,c102709 -34871e4,27a40040 -34871e8,8fa20010 -34871ec,2631a300 -34871f0,518821 -34871f4,3c038041 -34871f8,ac71a0d8 -34871fc,24422980 -3487200,3c038041 -3487204,ac62a0c8 -3487208,8fa20028 -348720c,3c038041 -3487210,ac62a0b8 -3487214,3c038041 -3487218,8fa4001c -348721c,ac64a0a8 -3487220,3c048041 -3487224,3c038041 -3487228,2463d780 -348722c,ac83a088 -3487230,3c048041 -3487234,3c038041 -3487238,2463df80 -348723c,ac83a078 -3487240,2610f7a0 -3487244,501021 -3487248,3c038041 -348724c,ac62a068 -3487250,8fa20034 -3487254,24441e00 -3487258,3c038041 -348725c,ac64a058 -3487260,244435c0 -3487264,3c038041 -3487268,ac64a048 -348726c,8fa30040 -3487270,24631980 -3487274,3c048041 -3487278,ac83a038 -348727c,3c038041 -3487280,ac62a028 -3487284,3c118041 -3487288,c101b9a -348728c,2624a098 -3487290,408025 -3487294,c1026fa -3487298,402025 -348729c,104fc2 -34872a0,1304821 -34872a4,2a100002 -34872a8,16000018 -34872ac,ae22a098 -34872b0,94843 -34872b4,3c038041 -34872b8,2463c2b8 -34872bc,2025 -34872c0,3025 -34872c4,2204025 -34872c8,2407fff0 -34872cc,8d05a098 -34872d0,a42821 -34872d4,90620000 -34872d8,21102 -34872dc,471025 -34872e0,a0a20000 -34872e4,8d02a098 -34872e8,441021 -34872ec,90650000 -34872f0,a72825 -34872f4,a0450001 -34872f8,24c60001 -34872fc,24630001 -3487300,c9102a -3487304,1440fff1 -3487308,24840002 -348730c,8fbf005c -3487310,8fb10058 -3487314,8fb00054 -3487318,3e00008 -348731c,27bd0060 -3487320,3c038040 -3487324,9462084e -3487328,2463084e -348732c,94640002 -3487330,94630004 -3487334,3c058041 -3487338,8ca5b1a0 -348733c,a4a20000 -3487340,a4a40002 -3487344,a4a30004 -3487348,3c058041 -348734c,8ca6b19c -3487350,a4c20000 -3487354,8ca5b19c -3487358,a4a40004 -348735c,a4a30008 -3487360,240500ff -3487364,1445000a -3487368,3c058041 -348736c,24050046 -3487370,14850007 -3487374,3c058041 -3487378,24050032 -348737c,14650004 -3487380,3c058041 -3487384,1825 -3487388,2025 -348738c,240200c8 -3487390,8ca5b198 -3487394,a4a20000 -3487398,a4a40002 -348739c,a4a30004 -34873a0,3c058041 -34873a4,8ca5b194 -34873a8,a4a20000 -34873ac,a4a40002 -34873b0,a4a30004 -34873b4,3c028041 -34873b8,8c43b190 -34873bc,3c028040 -34873c0,94450854 -34873c4,24420854 -34873c8,94440002 -34873cc,94420004 -34873d0,a4650000 -34873d4,a4640002 -34873d8,a4620004 -34873dc,3c028041 -34873e0,8c43b18c -34873e4,3c028040 -34873e8,9445085a -34873ec,2442085a -34873f0,94440002 -34873f4,94420004 -34873f8,a4650000 -34873fc,a4640002 -3487400,a4620004 -3487404,3c028041 -3487408,8c43b188 -348740c,3c028040 -3487410,94450860 -3487414,24420860 -3487418,94440002 -348741c,94420004 -3487420,a4650000 -3487424,a4640002 -3487428,a4620004 -348742c,3c028041 -3487430,8c42b184 -3487434,3c068040 -3487438,94c30872 -348743c,a4430000 -3487440,3c028041 -3487444,8c43b180 -3487448,24c20872 -348744c,94440002 -3487450,a4640000 -3487454,3c038041 -3487458,8c63b17c -348745c,94440004 -3487460,a4640000 -3487464,3c038041 -3487468,8c63b178 -348746c,3c058040 -3487470,94a40878 -3487474,a4640000 -3487478,3c038041 -348747c,8c64b174 -3487480,24a30878 -3487484,94670002 -3487488,a4870000 -348748c,3c048041 -3487490,8c84b170 -3487494,94670004 -3487498,a4870000 -348749c,3c048041 -34874a0,8c84b16c -34874a4,94c80872 -34874a8,94470002 -34874ac,94460004 -34874b0,a4880000 -34874b4,a4870002 -34874b8,a4860004 -34874bc,3c048041 -34874c0,8c84b15c -34874c4,94a60878 -34874c8,94650002 -34874cc,94630004 -34874d0,a4860000 -34874d4,a4850002 -34874d8,a4830004 -34874dc,94420002 -34874e0,3043ffff -34874e4,2c6300ce -34874e8,50600001 -34874ec,240200cd -34874f0,24420032 -34874f4,3047ffff -34874f8,3c028040 -34874fc,94420876 -3487500,3043ffff -3487504,2c6300ce -3487508,50600001 -348750c,240200cd -3487510,24420032 -3487514,3046ffff -3487518,3c028040 -348751c,94420878 -3487520,3043ffff -3487524,2c6300ce -3487528,50600001 -348752c,240200cd -3487530,24420032 -3487534,3044ffff -3487538,3c028040 -348753c,9442087a -3487540,3043ffff -3487544,2c6300ce -3487548,50600001 -348754c,240200cd -3487550,24420032 -3487554,3043ffff -3487558,3c028040 -348755c,9442087c -3487560,3045ffff -3487564,2ca500ce -3487568,50a00001 -348756c,240200cd -3487570,24420032 -3487574,3c058041 -3487578,8ca8b168 -348757c,3c058040 -3487580,94a50872 -3487584,30a9ffff -3487588,2d2900ce -348758c,15200002 -3487590,3042ffff -3487594,240500cd -3487598,24a50032 -348759c,a5050000 -34875a0,a5070002 -34875a4,a5060004 -34875a8,3c058041 -34875ac,8ca5b158 -34875b0,a4a40000 -34875b4,a4a30002 -34875b8,a4a20004 -34875bc,3c028041 -34875c0,8c43b160 -34875c4,3c028040 -34875c8,94450872 -34875cc,24420872 -34875d0,94440002 -34875d4,94420004 -34875d8,a4650000 -34875dc,a4640002 -34875e0,a4620004 -34875e4,3c028041 -34875e8,8c43b150 -34875ec,3c028040 -34875f0,94450878 -34875f4,24420878 -34875f8,94440002 -34875fc,94420004 -3487600,a4650000 -3487604,a4640002 -3487608,a4620004 -348760c,3c028041 -3487610,8c43b14c -3487614,3c028040 -3487618,94460866 -348761c,24440866 -3487620,94850002 -3487624,94840004 -3487628,a4660000 -348762c,a4650002 -3487630,a4640004 -3487634,94420866 -3487638,3043ffff -348763c,2c6300ce -3487640,50600001 -3487644,240200cd -3487648,24420032 -348764c,3044ffff -3487650,3c028040 -3487654,94420868 -3487658,3043ffff -348765c,2c6300ce -3487660,50600001 -3487664,240200cd -3487668,24420032 -348766c,3043ffff -3487670,3c028040 -3487674,9442086a -3487678,3045ffff -348767c,2ca500ce -3487680,50a00001 -3487684,240200cd -3487688,24420032 -348768c,3042ffff -3487690,3c058041 -3487694,8ca5b148 -3487698,a4a40000 -348769c,a4a30002 -34876a0,a4a20004 -34876a4,3c058041 -34876a8,8ca5b140 -34876ac,a4a40000 -34876b0,a4a30002 -34876b4,3e00008 -34876b8,a4a20004 -34876bc,3c028011 -34876c0,3442a5d0 -34876c4,8c4200a0 -34876c8,21302 -34876cc,30420003 -34876d0,21840 -34876d4,621821 -34876d8,3c028041 -34876dc,24429e60 -34876e0,621821 -34876e4,90640000 -34876e8,42600 -34876ec,90620001 -34876f0,21400 -34876f4,822021 -34876f8,90620002 -34876fc,21200 -3487700,3e00008 -3487704,821021 -3487708,3c028041 -348770c,9042b200 -3487710,3e00008 -3487714,2102b -3487718,3c038041 -348771c,9062b200 -3487720,24420001 -3487724,3e00008 -3487728,a062b200 -348772c,3c028041 -3487730,9042b200 -3487734,1040001b -3487738,2442ffff -348773c,27bdffd8 -3487740,afbf0024 -3487744,afb10020 -3487748,afb0001c -348774c,3c038041 -3487750,a062b200 -3487754,3c108038 -3487758,3610e578 -348775c,24050014 -3487760,3c11801d -3487764,200f809 -3487768,3624aa30 -348776c,24020014 -3487770,afa20014 -3487774,afa00010 -3487778,26100130 -348777c,3825 -3487780,24060003 -3487784,3625aa30 -3487788,200f809 -348778c,262484a0 -3487790,8fbf0024 -3487794,8fb10020 -3487798,8fb0001c -348779c,3e00008 -34877a0,27bd0028 -34877a4,3e00008 -34877ac,3e00008 -34877b4,24020140 -34877b8,3e00008 -34877bc,a4821424 -34877c0,27bdffe0 -34877c4,afbf001c -34877c8,afb10018 -34877cc,afb00014 -34877d0,808025 -34877d4,8c8208c4 -34877d8,24420001 -34877dc,c102598 -34877e0,ac8208c4 -34877e4,3c028041 -34877e8,9442b1b2 -34877ec,8e0308c4 -34877f0,1462001e -34877f4,8fbf001c -34877f8,920200b2 -34877fc,34420001 -3487800,a20200b2 -3487804,3c04801c -3487808,348484a0 -348780c,3c110001 -3487810,918821 -3487814,86221e1a -3487818,ae020000 -348781c,948200a4 -3487820,a6020066 -3487824,3c108009 -3487828,3602d894 -348782c,40f809 -3487830,261005d4 -3487834,3c04a34b -3487838,200f809 -348783c,3484e820 -3487840,3c028011 -3487844,3442a5d0 -3487848,2403fff8 -348784c,a4431412 -3487850,240200a0 -3487854,a6221e1a -3487858,24020014 -348785c,a2221e15 -3487860,24020001 -3487864,a2221e5e -3487868,8fbf001c -348786c,8fb10018 -3487870,8fb00014 -3487874,3e00008 -3487878,27bd0020 -348787c,8c8200a0 -3487880,34423000 -3487884,ac8200a0 -3487888,3c028041 -348788c,9042b203 -3487890,304200ff -3487894,10400005 -3487898,52840 -348789c,3c028010 -34878a0,451021 -34878a4,94428cec -34878a8,a4820034 -34878ac,3e00008 -34878b4,24020001 -34878b8,3e00008 -34878bc,a082003e -34878c0,24020012 -34878c4,2406ffff -34878c8,24070016 -34878cc,821821 -34878d0,80630074 -34878d4,54660004 -34878d8,24420001 -34878dc,822021 -34878e0,3e00008 -34878e4,a0850074 -34878e8,1447fff9 -34878ec,821821 -34878f0,3e00008 -34878f8,862021 -34878fc,908200a8 -3487900,a22825 -3487904,3e00008 -3487908,a08500a8 -348790c,852021 -3487910,908200bc -3487914,21e00 -3487918,31e03 -348791c,4620001 -3487920,1025 -3487924,24420001 -3487928,3e00008 -348792c,a08200bc -3487930,24020001 -3487934,a082003d -3487938,24020014 -348793c,a08200cf -3487940,24020140 -3487944,3e00008 -3487948,a4821424 -348794c,24020001 -3487950,a0820032 -3487954,a082003a -3487958,24020030 -348795c,a48213f4 -3487960,3e00008 -3487964,a0820033 -3487968,24020002 -348796c,a0820032 -3487970,24020001 -3487974,a082003a -3487978,a082003c -348797c,24020060 -3487980,a48213f4 -3487984,3e00008 -3487988,a0820033 -348798c,24020007 -3487990,3e00008 -3487994,a082007b -3487998,24020001 -348799c,a21004 -34879a0,8c8500a4 -34879a4,a22825 -34879a8,3e00008 -34879ac,ac8500a4 -34879b0,27bdffe8 -34879b4,afbf0014 -34879b8,c101dc6 -34879c0,8fbf0014 -34879c4,3e00008 -34879c8,27bd0018 -34879cc,24020010 -34879d0,a0820082 -34879d4,9082009a -34879d8,2442000a -34879dc,3e00008 -34879e0,a082009a -34879e4,3c028041 -34879e8,9042b203 -34879ec,304200ff -34879f0,10400005 -34879f4,52840 -34879f8,3c028010 -34879fc,451021 -3487a00,94428cec -3487a04,a4820034 +3486df0,a0430025 +3486df4,3025 +3486df8,96050002 +3486dfc,3c11801c +3486e00,3c02800d +3486e04,3442ce14 +3486e08,40f809 +3486e0c,362484a0 +3486e10,92050001 +3486e14,3c028006 +3486e18,3442fdcc +3486e1c,40f809 +3486e20,362484a0 +3486e24,c101efb +3486e28,2002025 +3486e2c,10000013 +3486e30,8fbf0024 +3486e34,3025 +3486e38,96050002 +3486e3c,3c04801c +3486e40,3c02800d +3486e44,3442ce14 +3486e48,40f809 +3486e4c,348484a0 +3486e50,c101a2e +3486e54,27a40010 +3486e58,10000008 +3486e5c,8fbf0024 +3486e60,c101ee3 +3486e64,2404005b +3486e68,c101ed4 +3486e6c,402025 +3486e70,408025 +3486e74,1000ffdb +3486e78,ae200134 +3486e7c,8fb20020 +3486e80,8fb1001c +3486e84,8fb00018 +3486e88,3e00008 +3486e8c,27bd0028 +3486e90,27bdffe8 +3486e94,afbf0014 +3486e98,afb00010 +3486e9c,3c028011 +3486ea0,3442a5d0 +3486ea4,94500eec +3486ea8,32100002 +3486eac,1600000c +3486eb0,3c028040 +3486eb4,90420cd5 +3486eb8,50400004 +3486ebc,3c028011 +3486ec0,c101a68 +3486ec4,24040002 +3486ec8,3c028011 +3486ecc,3442a5d0 +3486ed0,94430eec +3486ed4,34630002 +3486ed8,a4430eec +3486edc,3c028040 +3486ee0,90430cd5 +3486ee4,14600002 +3486ee8,24020001 +3486eec,10102b +3486ef0,8fbf0014 +3486ef4,8fb00010 +3486ef8,3e00008 +3486efc,27bd0018 +3486f00,94830004 +3486f04,94820006 +3486f08,620018 +3486f0c,9082000c +3486f10,1812 +3486f1c,620018 +3486f20,1012 +3486f24,3e00008 +3486f2c,27bdffe8 +3486f30,afbf0014 +3486f34,afb00010 +3486f38,c101bc0 +3486f3c,808025 +3486f40,96030008 +3486f44,620018 +3486f48,1012 +3486f4c,8fbf0014 +3486f50,8fb00010 +3486f54,3e00008 +3486f58,27bd0018 +3486f5c,27bdff98 +3486f60,afbf0064 +3486f64,afb60060 +3486f68,afb5005c +3486f6c,afb40058 +3486f70,afb30054 +3486f74,afb20050 +3486f78,afb1004c +3486f7c,afb00048 +3486f80,808025 +3486f84,a0a025 +3486f88,c0a825 +3486f8c,94b10004 +3486f90,94a20006 +3486f94,470018 +3486f98,9012 +3486f9c,90b6000b +3486fa0,90b3000a +3486fa4,139d40 +3486fa8,3c0200e0 +3486fac,2629824 +3486fb0,1614c0 +3486fb4,3c030018 +3486fb8,431024 +3486fbc,2629825 +3486fc0,2622ffff +3486fc4,30420fff +3486fc8,531025 +3486fcc,3c03fd00 +3486fd0,431025 +3486fd4,afa20010 +3486fd8,c101bc0 +3486fdc,a02025 +3486fe0,550018 +3486fe4,8e820000 +3486fe8,1812 +3486fec,431021 +3486ff0,afa20014 +3486ff4,2ec30002 +3486ff8,10600003 +3486ffc,24020010 +3487000,24020004 +3487004,2c21004 +3487008,510018 +348700c,1812 +3487010,2463003f +3487014,317c3 +3487018,3042003f +348701c,431021 +3487020,210c0 +3487024,3c030003 +3487028,3463fe00 +348702c,431024 +3487030,531025 +3487034,3c03f500 +3487038,431025 +348703c,afa20018 +3487040,3c040700 +3487044,afa4001c +3487048,3c03e600 +348704c,afa30020 +3487050,afa00024 +3487054,3c03f400 +3487058,afa30028 +348705c,2623ffff +3487060,31b80 +3487064,3c0500ff +3487068,34a5f000 +348706c,651824 +3487070,2652ffff +3487074,129080 +3487078,32520ffc +348707c,721825 +3487080,642025 +3487084,afa4002c +3487088,3c04e700 +348708c,afa40030 +3487090,afa00034 +3487094,afa20038 +3487098,afa0003c +348709c,3c02f200 +34870a0,afa20040 +34870a4,afa30044 +34870a8,27a20010 +34870ac,27a60048 +34870b0,8e030008 +34870b4,24640008 +34870b8,ae040008 +34870bc,8c450004 +34870c0,8c440000 +34870c4,ac650004 +34870c8,24420008 +34870cc,1446fff8 +34870d0,ac640000 +34870d4,8fbf0064 +34870d8,8fb60060 +34870dc,8fb5005c +34870e0,8fb40058 +34870e4,8fb30054 +34870e8,8fb20050 +34870ec,8fb1004c +34870f0,8fb00048 +34870f4,3e00008 +34870f8,27bd0068 +34870fc,27bdffe0 +3487100,8fa80030 +3487104,8fa20034 +3487108,8faa0038 +348710c,94a30004 +3487110,31a80 +3487114,14400002 +3487118,62001a +348711c,7000d +3487120,4812 +3487124,94a30006 +3487128,471021 +348712c,21380 +3487130,3c0b00ff +3487134,356bf000 +3487138,4b1024 +348713c,1482821 +3487140,52880 +3487144,30a50fff +3487148,451025 +348714c,3c05e400 +3487150,451025 +3487154,afa20000 +3487158,73b80 +348715c,eb3824 +3487160,84080 +3487164,31080fff +3487168,e83825 +348716c,afa70004 +3487170,3c02e100 +3487174,afa20008 +3487178,660018 +348717c,1012 +3487180,21140 +3487184,3042ffff +3487188,afa2000c +348718c,3c02f100 +3487190,afa20010 +3487194,31a80 +3487198,15400002 +348719c,6a001a +34871a0,7000d +34871a4,1012 +34871a8,3042ffff +34871ac,94c00 +34871b0,491025 +34871b4,afa20014 +34871b8,afbd0018 +34871bc,27a50018 +34871c0,8c820008 +34871c4,24430008 +34871c8,ac830008 +34871cc,8fa30018 +34871d0,8c670004 +34871d4,8c660000 +34871d8,ac470004 +34871dc,ac460000 +34871e0,24620008 +34871e4,1445fff6 +34871e8,afa20018 +34871ec,3e00008 +34871f0,27bd0020 +34871f4,27bdffa0 +34871f8,afbf005c +34871fc,afb10058 +3487200,afb00054 +3487204,afa00010 +3487208,3c0201a0 +348720c,24422000 +3487210,afa20014 +3487214,3c110003 +3487218,362295c0 +348721c,afa20018 +3487220,c102749 +3487224,27a40010 +3487228,afa0001c +348722c,3c020084 +3487230,24426000 +3487234,afa20020 +3487238,3402b400 +348723c,afa20024 +3487240,c102749 +3487244,27a4001c +3487248,afa00028 +348724c,3c02007b +3487250,3442d000 +3487254,afa2002c +3487258,3c100008 +348725c,361088a0 +3487260,afb00030 +3487264,c102749 +3487268,27a40028 +348726c,afa00034 +3487270,3c0201a3 +3487274,3442c000 +3487278,afa20038 +348727c,24023b00 +3487280,afa2003c +3487284,c102749 +3487288,27a40034 +348728c,afa00040 +3487290,3c020085 +3487294,3442e000 +3487298,afa20044 +348729c,24021d80 +34872a0,afa20048 +34872a4,c102749 +34872a8,27a40040 +34872ac,8fa20010 +34872b0,2631a300 +34872b4,518821 +34872b8,3c038041 +34872bc,ac71a458 +34872c0,24422980 +34872c4,3c038041 +34872c8,ac62a448 +34872cc,8fa20028 +34872d0,3c038041 +34872d4,ac62a438 +34872d8,3c038041 +34872dc,8fa4001c +34872e0,ac64a428 +34872e4,3c048041 +34872e8,3c038041 +34872ec,2463db08 +34872f0,ac83a408 +34872f4,3c048041 +34872f8,3c038041 +34872fc,2463e308 +3487300,ac83a3f8 +3487304,2610f7a0 +3487308,501021 +348730c,3c038041 +3487310,ac62a3e8 +3487314,8fa20034 +3487318,24441e00 +348731c,3c038041 +3487320,ac64a3d8 +3487324,244435c0 +3487328,3c038041 +348732c,ac64a3c8 +3487330,8fa30040 +3487334,24631980 +3487338,3c048041 +348733c,ac83a3b8 +3487340,3c038041 +3487344,ac62a3a8 +3487348,3c118041 +348734c,c101bcb +3487350,2624a418 +3487354,408025 +3487358,c10273a +348735c,402025 +3487360,104fc2 +3487364,1304821 +3487368,2a100002 +348736c,16000018 +3487370,ae22a418 +3487374,94843 +3487378,3c038041 +348737c,2463c640 +3487380,2025 +3487384,3025 +3487388,2204025 +348738c,2407fff0 +3487390,8d05a418 +3487394,a42821 +3487398,90620000 +348739c,21102 +34873a0,471025 +34873a4,a0a20000 +34873a8,8d02a418 +34873ac,441021 +34873b0,90650000 +34873b4,a72825 +34873b8,a0450001 +34873bc,24c60001 +34873c0,24630001 +34873c4,c9102a +34873c8,1440fff1 +34873cc,24840002 +34873d0,8fbf005c +34873d4,8fb10058 +34873d8,8fb00054 +34873dc,3e00008 +34873e0,27bd0060 +34873e4,3c038040 +34873e8,9462084e +34873ec,2463084e +34873f0,94640002 +34873f4,94630004 +34873f8,3c058041 +34873fc,8ca5b520 +3487400,a4a20000 +3487404,a4a40002 +3487408,a4a30004 +348740c,3c058041 +3487410,8ca6b51c +3487414,a4c20000 +3487418,8ca5b51c +348741c,a4a40004 +3487420,a4a30008 +3487424,240500ff +3487428,1445000a +348742c,3c058041 +3487430,24050046 +3487434,14850007 +3487438,3c058041 +348743c,24050032 +3487440,14650004 +3487444,3c058041 +3487448,1825 +348744c,2025 +3487450,240200c8 +3487454,8ca5b518 +3487458,a4a20000 +348745c,a4a40002 +3487460,a4a30004 +3487464,3c058041 +3487468,8ca5b514 +348746c,a4a20000 +3487470,a4a40002 +3487474,a4a30004 +3487478,3c028041 +348747c,8c43b510 +3487480,3c028040 +3487484,94450854 +3487488,24420854 +348748c,94440002 +3487490,94420004 +3487494,a4650000 +3487498,a4640002 +348749c,a4620004 +34874a0,3c028041 +34874a4,8c43b50c +34874a8,3c028040 +34874ac,9445085a +34874b0,2442085a +34874b4,94440002 +34874b8,94420004 +34874bc,a4650000 +34874c0,a4640002 +34874c4,a4620004 +34874c8,3c028041 +34874cc,8c43b508 +34874d0,3c028040 +34874d4,94450860 +34874d8,24420860 +34874dc,94440002 +34874e0,94420004 +34874e4,a4650000 +34874e8,a4640002 +34874ec,a4620004 +34874f0,3c028041 +34874f4,8c42b504 +34874f8,3c068040 +34874fc,94c30872 +3487500,a4430000 +3487504,3c028041 +3487508,8c43b500 +348750c,24c20872 +3487510,94440002 +3487514,a4640000 +3487518,3c038041 +348751c,8c63b4fc +3487520,94440004 +3487524,a4640000 +3487528,3c038041 +348752c,8c63b4f8 +3487530,3c058040 +3487534,94a40878 +3487538,a4640000 +348753c,3c038041 +3487540,8c64b4f4 +3487544,24a30878 +3487548,94670002 +348754c,a4870000 +3487550,3c048041 +3487554,8c84b4f0 +3487558,94670004 +348755c,a4870000 +3487560,3c048041 +3487564,8c84b4ec +3487568,94c80872 +348756c,94470002 +3487570,94460004 +3487574,a4880000 +3487578,a4870002 +348757c,a4860004 +3487580,3c048041 +3487584,8c84b4dc +3487588,94a60878 +348758c,94650002 +3487590,94630004 +3487594,a4860000 +3487598,a4850002 +348759c,a4830004 +34875a0,94420002 +34875a4,3043ffff +34875a8,2c6300ce +34875ac,50600001 +34875b0,240200cd +34875b4,24420032 +34875b8,3047ffff +34875bc,3c028040 +34875c0,94420876 +34875c4,3043ffff +34875c8,2c6300ce +34875cc,50600001 +34875d0,240200cd +34875d4,24420032 +34875d8,3046ffff +34875dc,3c028040 +34875e0,94420878 +34875e4,3043ffff +34875e8,2c6300ce +34875ec,50600001 +34875f0,240200cd +34875f4,24420032 +34875f8,3044ffff +34875fc,3c028040 +3487600,9442087a +3487604,3043ffff +3487608,2c6300ce +348760c,50600001 +3487610,240200cd +3487614,24420032 +3487618,3043ffff +348761c,3c028040 +3487620,9442087c +3487624,3045ffff +3487628,2ca500ce +348762c,50a00001 +3487630,240200cd +3487634,24420032 +3487638,3c058041 +348763c,8ca8b4e8 +3487640,3c058040 +3487644,94a50872 +3487648,30a9ffff +348764c,2d2900ce +3487650,15200002 +3487654,3042ffff +3487658,240500cd +348765c,24a50032 +3487660,a5050000 +3487664,a5070002 +3487668,a5060004 +348766c,3c058041 +3487670,8ca5b4d8 +3487674,a4a40000 +3487678,a4a30002 +348767c,a4a20004 +3487680,3c028041 +3487684,8c43b4e0 +3487688,3c028040 +348768c,94450872 +3487690,24420872 +3487694,94440002 +3487698,94420004 +348769c,a4650000 +34876a0,a4640002 +34876a4,a4620004 +34876a8,3c028041 +34876ac,8c43b4d0 +34876b0,3c028040 +34876b4,94450878 +34876b8,24420878 +34876bc,94440002 +34876c0,94420004 +34876c4,a4650000 +34876c8,a4640002 +34876cc,a4620004 +34876d0,3c028041 +34876d4,8c43b4cc +34876d8,3c028040 +34876dc,94460866 +34876e0,24440866 +34876e4,94850002 +34876e8,94840004 +34876ec,a4660000 +34876f0,a4650002 +34876f4,a4640004 +34876f8,94420866 +34876fc,3043ffff +3487700,2c6300ce +3487704,50600001 +3487708,240200cd +348770c,24420032 +3487710,3044ffff +3487714,3c028040 +3487718,94420868 +348771c,3043ffff +3487720,2c6300ce +3487724,50600001 +3487728,240200cd +348772c,24420032 +3487730,3043ffff +3487734,3c028040 +3487738,9442086a +348773c,3045ffff +3487740,2ca500ce +3487744,50a00001 +3487748,240200cd +348774c,24420032 +3487750,3042ffff +3487754,3c058041 +3487758,8ca5b4c8 +348775c,a4a40000 +3487760,a4a30002 +3487764,a4a20004 +3487768,3c058041 +348776c,8ca5b4c0 +3487770,a4a40000 +3487774,a4a30002 +3487778,3e00008 +348777c,a4a20004 +3487780,3c028011 +3487784,3442a5d0 +3487788,8c4200a0 +348778c,21302 +3487790,30420003 +3487794,21840 +3487798,621821 +348779c,3c028041 +34877a0,2442a1a0 +34877a4,621821 +34877a8,90640000 +34877ac,42600 +34877b0,90620001 +34877b4,21400 +34877b8,822021 +34877bc,90620002 +34877c0,21200 +34877c4,3e00008 +34877c8,821021 +34877cc,3c028041 +34877d0,9042b584 +34877d4,3e00008 +34877d8,2102b +34877dc,3c038041 +34877e0,9062b584 +34877e4,24420001 +34877e8,3e00008 +34877ec,a062b584 +34877f0,3c028041 +34877f4,9042b584 +34877f8,1040001b +34877fc,2442ffff +3487800,27bdffd8 +3487804,afbf0024 +3487808,afb10020 +348780c,afb0001c +3487810,3c038041 +3487814,a062b584 +3487818,3c108038 +348781c,3610e578 +3487820,24050014 +3487824,3c11801d +3487828,200f809 +348782c,3624aa30 +3487830,24020014 +3487834,afa20014 +3487838,afa00010 +348783c,26100130 +3487840,3825 +3487844,24060003 +3487848,3625aa30 +348784c,200f809 +3487850,262484a0 +3487854,8fbf0024 +3487858,8fb10020 +348785c,8fb0001c +3487860,3e00008 +3487864,27bd0028 +3487868,3e00008 +3487870,3e00008 +3487878,24020140 +348787c,3e00008 +3487880,a4821424 +3487884,27bdffe0 +3487888,afbf001c +348788c,afb10018 +3487890,afb00014 +3487894,808025 +3487898,8c8208c4 +348789c,24420001 +34878a0,c1025d8 +34878a4,ac8208c4 +34878a8,3c028041 +34878ac,9442b532 +34878b0,8e0308c4 +34878b4,1462001e +34878b8,8fbf001c +34878bc,920200b2 +34878c0,34420001 +34878c4,a20200b2 +34878c8,3c04801c +34878cc,348484a0 +34878d0,3c110001 +34878d4,918821 +34878d8,86221e1a +34878dc,ae020000 +34878e0,948200a4 +34878e4,a6020066 +34878e8,3c108009 +34878ec,3602d894 +34878f0,40f809 +34878f4,261005d4 +34878f8,3c04a34b +34878fc,200f809 +3487900,3484e820 +3487904,3c028011 +3487908,3442a5d0 +348790c,2403fff8 +3487910,a4431412 +3487914,240200a0 +3487918,a6221e1a +348791c,24020014 +3487920,a2221e15 +3487924,24020001 +3487928,a2221e5e +348792c,8fbf001c +3487930,8fb10018 +3487934,8fb00014 +3487938,3e00008 +348793c,27bd0020 +3487940,8c8200a0 +3487944,34423000 +3487948,ac8200a0 +348794c,3c028041 +3487950,9042b587 +3487954,304200ff +3487958,10400005 +348795c,52840 +3487960,3c028010 +3487964,451021 +3487968,94428cec +348796c,a4820034 +3487970,3e00008 +3487978,24020001 +348797c,3e00008 +3487980,a082003e +3487984,24020012 +3487988,2406ffff +348798c,24070016 +3487990,821821 +3487994,80630074 +3487998,54660004 +348799c,24420001 +34879a0,822021 +34879a4,3e00008 +34879a8,a0850074 +34879ac,1447fff9 +34879b0,821821 +34879b4,3e00008 +34879bc,862021 +34879c0,908200a8 +34879c4,a22825 +34879c8,3e00008 +34879cc,a08500a8 +34879d0,852021 +34879d4,908200bc +34879d8,21e00 +34879dc,31e03 +34879e0,4620001 +34879e4,1025 +34879e8,24420001 +34879ec,3e00008 +34879f0,a08200bc +34879f4,24020001 +34879f8,a082003d +34879fc,24020014 +3487a00,a08200cf +3487a04,24020140 3487a08,3e00008 -3487a10,3c028041 -3487a14,9042b202 -3487a18,1040000c -3487a1c,3c028041 -3487a20,94820f06 -3487a24,34420040 -3487a28,a4820f06 -3487a2c,3c028041 -3487a30,9042b201 -3487a34,54400009 -3487a38,94820f06 -3487a3c,94820ef4 -3487a40,3042fb87 -3487a44,3e00008 -3487a48,a4820ef4 -3487a4c,9042b201 -3487a50,1040000c -3487a58,94820f06 -3487a5c,34420080 -3487a60,a4820f06 -3487a64,94820ef6 -3487a68,24038f00 -3487a6c,431025 -3487a70,a4820ef6 -3487a74,94820ee4 -3487a78,2403f000 -3487a7c,431025 -3487a80,a4820ee4 -3487a84,3e00008 -3487a8c,2c8200cd -3487a90,1040000b -3487a94,41880 -3487a98,641021 -3487a9c,21080 -3487aa0,3c058041 -3487aa4,24a5a110 -3487aa8,a21021 -3487aac,80430000 -3487ab0,3182b -3487ab4,31823 -3487ab8,3e00008 -3487abc,431024 -3487ac0,3e00008 -3487ac4,1025 -3487ac8,27bdffe0 -3487acc,afbf001c -3487ad0,afb20018 -3487ad4,afb10014 -3487ad8,afb00010 -3487adc,808025 -3487ae0,3c128011 -3487ae4,3652a5d0 -3487ae8,c101ea3 -3487aec,2002025 -3487af0,2008825 -3487af4,8c420008 -3487af8,2002825 -3487afc,40f809 -3487b00,2402025 -3487b04,1622fff8 -3487b08,408025 -3487b0c,2201025 -3487b10,8fbf001c -3487b14,8fb20018 -3487b18,8fb10014 -3487b1c,8fb00010 -3487b20,3e00008 -3487b24,27bd0020 -3487b28,27bdffe8 -3487b2c,afbf0014 -3487b30,8c82000c -3487b34,84860012 -3487b38,84850010 -3487b3c,3c048011 -3487b40,40f809 -3487b44,3484a5d0 -3487b48,8fbf0014 -3487b4c,3e00008 -3487b50,27bd0018 -3487b54,3e00008 -3487b58,a01025 -3487b5c,8082007d -3487b60,21027 -3487b64,2102b -3487b68,3e00008 -3487b6c,24420008 -3487b70,8c8200a0 -3487b74,21182 -3487b78,30420007 -3487b7c,10400005 -3487b84,38420001 -3487b88,2102b -3487b8c,3e00008 -3487b90,24420035 -3487b94,3e00008 -3487b98,24020054 -3487b9c,8c8200a0 -3487ba0,210c2 -3487ba4,30420007 -3487ba8,10400005 -3487bb0,38420001 -3487bb4,2102b -3487bb8,3e00008 -3487bbc,24420033 -3487bc0,3e00008 -3487bc4,24020032 -3487bc8,8c8200a0 -3487bcc,30420007 -3487bd0,10400005 -3487bd8,38420001 -3487bdc,2102b -3487be0,3e00008 -3487be4,24420030 -3487be8,3e00008 -3487bec,24020004 -3487bf0,8c8300a0 -3487bf4,31b82 -3487bf8,30630007 -3487bfc,10600005 -3487c00,24040001 -3487c04,14640004 -3487c08,2402007b -3487c0c,3e00008 -3487c10,24020060 -3487c14,24020005 +3487a0c,a4821424 +3487a10,24020001 +3487a14,a0820032 +3487a18,a082003a +3487a1c,24020030 +3487a20,a48213f4 +3487a24,3e00008 +3487a28,a0820033 +3487a2c,24020002 +3487a30,a0820032 +3487a34,24020001 +3487a38,a082003a +3487a3c,a082003c +3487a40,24020060 +3487a44,a48213f4 +3487a48,3e00008 +3487a4c,a0820033 +3487a50,24020007 +3487a54,3e00008 +3487a58,a082007b +3487a5c,24020001 +3487a60,a21004 +3487a64,8c8500a4 +3487a68,a22825 +3487a6c,3e00008 +3487a70,ac8500a4 +3487a74,27bdffe8 +3487a78,afbf0014 +3487a7c,c101df7 +3487a84,8fbf0014 +3487a88,3e00008 +3487a8c,27bd0018 +3487a90,24020010 +3487a94,a0820082 +3487a98,9082009a +3487a9c,2442000a +3487aa0,3e00008 +3487aa4,a082009a +3487aa8,3c028041 +3487aac,9042b587 +3487ab0,304200ff +3487ab4,10400005 +3487ab8,52840 +3487abc,3c028010 +3487ac0,451021 +3487ac4,94428cec +3487ac8,a4820034 +3487acc,3e00008 +3487ad4,3c028041 +3487ad8,9042b586 +3487adc,1040000c +3487ae0,3c028041 +3487ae4,94820f06 +3487ae8,34420040 +3487aec,a4820f06 +3487af0,3c028041 +3487af4,9042b585 +3487af8,54400009 +3487afc,94820f06 +3487b00,94820ef4 +3487b04,3042fb87 +3487b08,3e00008 +3487b0c,a4820ef4 +3487b10,9042b585 +3487b14,1040000c +3487b1c,94820f06 +3487b20,34420080 +3487b24,a4820f06 +3487b28,94820ef6 +3487b2c,24038f00 +3487b30,431025 +3487b34,a4820ef6 +3487b38,94820ee4 +3487b3c,2403f000 +3487b40,431025 +3487b44,a4820ee4 +3487b48,3e00008 +3487b50,2c8200cd +3487b54,1040000b +3487b58,41880 +3487b5c,641021 +3487b60,21080 +3487b64,3c058041 +3487b68,24a5a490 +3487b6c,a21021 +3487b70,80430000 +3487b74,3182b +3487b78,31823 +3487b7c,3e00008 +3487b80,431024 +3487b84,3e00008 +3487b88,1025 +3487b8c,27bdffe0 +3487b90,afbf001c +3487b94,afb20018 +3487b98,afb10014 +3487b9c,afb00010 +3487ba0,808025 +3487ba4,3c128011 +3487ba8,3652a5d0 +3487bac,c101ed4 +3487bb0,2002025 +3487bb4,2008825 +3487bb8,8c420008 +3487bbc,2002825 +3487bc0,40f809 +3487bc4,2402025 +3487bc8,1622fff8 +3487bcc,408025 +3487bd0,2201025 +3487bd4,8fbf001c +3487bd8,8fb20018 +3487bdc,8fb10014 +3487be0,8fb00010 +3487be4,3e00008 +3487be8,27bd0020 +3487bec,27bdffe8 +3487bf0,afbf0014 +3487bf4,8c82000c +3487bf8,84860012 +3487bfc,84850010 +3487c00,3c048011 +3487c04,40f809 +3487c08,3484a5d0 +3487c0c,8fbf0014 +3487c10,3e00008 +3487c14,27bd0018 3487c18,3e00008 -3487c20,8c8300a0 -3487c24,31b02 -3487c28,30630003 -3487c2c,10600005 -3487c30,24040001 -3487c34,14640004 -3487c38,240200c7 -3487c3c,3e00008 -3487c40,24020046 -3487c44,24020045 -3487c48,3e00008 -3487c50,8c8200a0 -3487c54,21242 -3487c58,30420007 -3487c5c,2102b -3487c60,3e00008 -3487c64,24420037 -3487c68,8c8200a0 -3487c6c,21502 -3487c70,30420007 -3487c74,2c420002 -3487c78,2c420001 +3487c1c,a01025 +3487c20,8082007d +3487c24,21027 +3487c28,2102b +3487c2c,3e00008 +3487c30,24420008 +3487c34,8c8200a0 +3487c38,21182 +3487c3c,30420007 +3487c40,10400005 +3487c48,38420001 +3487c4c,2102b +3487c50,3e00008 +3487c54,24420035 +3487c58,3e00008 +3487c5c,24020054 +3487c60,8c8200a0 +3487c64,210c2 +3487c68,30420007 +3487c6c,10400005 +3487c74,38420001 +3487c78,2102b 3487c7c,3e00008 -3487c80,24420079 -3487c84,8c8200a0 -3487c88,21442 -3487c8c,30420007 -3487c90,2c420002 -3487c94,2c420001 -3487c98,3e00008 -3487c9c,24420077 -3487ca0,9082003a -3487ca4,2102b -3487ca8,3e00008 -3487cac,244200b9 -3487cb0,8083007c -3487cb4,2402ffff -3487cb8,50620007 -3487cbc,2402006b -3487cc0,80830094 -3487cc4,28630006 -3487cc8,10600003 -3487ccc,2402006a +3487c80,24420033 +3487c84,3e00008 +3487c88,24020032 +3487c8c,8c8200a0 +3487c90,30420007 +3487c94,10400005 +3487c9c,38420001 +3487ca0,2102b +3487ca4,3e00008 +3487ca8,24420030 +3487cac,3e00008 +3487cb0,24020004 +3487cb4,8c8300a0 +3487cb8,31b82 +3487cbc,30630007 +3487cc0,10600005 +3487cc4,24040001 +3487cc8,14640004 +3487ccc,2402007b 3487cd0,3e00008 -3487cd4,24020003 -3487cd8,3e00008 -3487ce0,8083007b -3487ce4,2402ffff -3487ce8,10620003 -3487cf0,3e00008 -3487cf4,2402000c -3487cf8,3e00008 -3487cfc,2402003b -3487d00,8c8300a0 -3487d04,30630007 -3487d08,14600002 -3487d0c,a01025 -3487d10,2402004d -3487d14,3e00008 -3487d1c,8c8300a0 -3487d20,30630038 -3487d24,14600002 -3487d28,a01025 -3487d2c,2402004d -3487d30,3e00008 -3487d38,8c8300a0 -3487d3c,3c040001 -3487d40,3484c000 -3487d44,641824 -3487d48,14600002 -3487d4c,a01025 -3487d50,2402004d -3487d54,3e00008 -3487d5c,94820eda -3487d60,30420008 -3487d64,14400010 -3487d6c,80830086 -3487d70,2402001b -3487d74,1062000e -3487d7c,80830087 -3487d80,1062000d -3487d88,80830088 -3487d8c,1062000c -3487d90,2403001b -3487d94,80840089 -3487d98,1483000a -3487d9c,a01025 -3487da0,3e00008 -3487da4,240200c8 -3487da8,3e00008 -3487dac,240200c8 -3487db0,3e00008 -3487db4,240200c8 -3487db8,3e00008 -3487dbc,240200c8 -3487dc0,240200c8 -3487dc4,3e00008 -3487dcc,27bdffe8 -3487dd0,afbf0014 -3487dd4,c1026f5 -3487ddc,c101c4c -3487de4,c10250e -3487dec,c10191d -3487df4,c102321 -3487dfc,8fbf0014 -3487e00,3e00008 -3487e04,27bd0018 -3487e08,27bdffe8 -3487e0c,afbf0014 -3487e10,c101ab3 -3487e18,c100fb0 -3487e20,c102244 -3487e28,c101cc8 -3487e30,c10143d -3487e38,c101904 -3487e40,8fbf0014 -3487e44,3e00008 -3487e48,27bd0018 -3487e4c,27bdffe8 -3487e50,afbf0014 -3487e54,afb00010 -3487e58,3c10801c -3487e5c,361084a0 -3487e60,8e040000 -3487e64,c1011a5 -3487e68,248402a8 -3487e6c,8e040000 -3487e70,c1025a2 -3487e74,248402a8 -3487e78,8fbf0014 -3487e7c,8fb00010 -3487e80,3e00008 -3487e84,27bd0018 -3487e88,27bdffe8 -3487e8c,afbf0014 -3487e90,c10190b -3487e98,c1026f0 -3487ea0,c102334 -3487ea8,c101437 -3487eb0,8fbf0014 -3487eb4,3e00008 -3487eb8,27bd0018 -3487ebc,3c02801c -3487ec0,344284a0 -3487ec4,3c030001 -3487ec8,431021 -3487ecc,84430988 -3487ed0,14600022 -3487ed4,3c02801c -3487ed8,344284a0 -3487edc,3c030001 -3487ee0,431021 -3487ee4,84420992 -3487ee8,14400014 -3487eec,21840 -3487ef0,3c028011 -3487ef4,3442a5d0 -3487ef8,8c420004 -3487efc,14400009 -3487f00,3c028011 -3487f04,3442a5d0 -3487f08,8c4300a0 -3487f0c,3c020001 -3487f10,3442c007 -3487f14,621824 -3487f18,14600026 -3487f1c,24020001 -3487f20,3c028011 -3487f24,3442a5d0 -3487f28,8c4200a0 -3487f2c,21382 -3487f30,30420007 -3487f34,3e00008 -3487f38,2102b -3487f3c,621821 -3487f40,3c028011 -3487f44,3442a5d0 -3487f48,8c4200a0 -3487f4c,621006 -3487f50,30420007 -3487f54,3e00008 -3487f58,2102b -3487f5c,344284a0 -3487f60,3c040001 -3487f64,441021 -3487f68,84440992 -3487f6c,1480000a -3487f70,3c028011 -3487f74,24020003 -3487f78,14620007 -3487f7c,3c028011 -3487f80,3442a5d0 -3487f84,8c42009c -3487f88,3c03000c -3487f8c,431024 -3487f90,3e00008 -3487f94,2102b -3487f98,3442a5d0 -3487f9c,9442009c -3487fa0,42080 -3487fa4,2463ffff -3487fa8,832021 -3487fac,821007 -3487fb0,30420001 +3487cd4,24020060 +3487cd8,24020005 +3487cdc,3e00008 +3487ce4,8c8300a0 +3487ce8,31b02 +3487cec,30630003 +3487cf0,10600005 +3487cf4,24040001 +3487cf8,14640004 +3487cfc,240200c7 +3487d00,3e00008 +3487d04,24020046 +3487d08,24020045 +3487d0c,3e00008 +3487d14,8c8200a0 +3487d18,21242 +3487d1c,30420007 +3487d20,2102b +3487d24,3e00008 +3487d28,24420037 +3487d2c,8c8200a0 +3487d30,21502 +3487d34,30420007 +3487d38,2c420002 +3487d3c,2c420001 +3487d40,3e00008 +3487d44,24420079 +3487d48,8c8200a0 +3487d4c,21442 +3487d50,30420007 +3487d54,2c420002 +3487d58,2c420001 +3487d5c,3e00008 +3487d60,24420077 +3487d64,9082003a +3487d68,2102b +3487d6c,3e00008 +3487d70,244200b9 +3487d74,8083007c +3487d78,2402ffff +3487d7c,50620007 +3487d80,2402006b +3487d84,80830094 +3487d88,28630006 +3487d8c,10600003 +3487d90,2402006a +3487d94,3e00008 +3487d98,24020003 +3487d9c,3e00008 +3487da4,8083007b +3487da8,2402ffff +3487dac,10620003 +3487db4,3e00008 +3487db8,2402000c +3487dbc,3e00008 +3487dc0,2402003b +3487dc4,8c8300a0 +3487dc8,30630007 +3487dcc,14600002 +3487dd0,a01025 +3487dd4,2402004d +3487dd8,3e00008 +3487de0,8c8300a0 +3487de4,30630038 +3487de8,14600002 +3487dec,a01025 +3487df0,2402004d +3487df4,3e00008 +3487dfc,8c8300a0 +3487e00,3c040001 +3487e04,3484c000 +3487e08,641824 +3487e0c,14600002 +3487e10,a01025 +3487e14,2402004d +3487e18,3e00008 +3487e20,94820eda +3487e24,30420008 +3487e28,14400010 +3487e30,80830086 +3487e34,2402001b +3487e38,1062000e +3487e40,80830087 +3487e44,1062000d +3487e4c,80830088 +3487e50,1062000c +3487e54,2403001b +3487e58,80840089 +3487e5c,1483000a +3487e60,a01025 +3487e64,3e00008 +3487e68,240200c8 +3487e6c,3e00008 +3487e70,240200c8 +3487e74,3e00008 +3487e78,240200c8 +3487e7c,3e00008 +3487e80,240200c8 +3487e84,240200c8 +3487e88,3e00008 +3487e90,27bdffe8 +3487e94,afbf0014 +3487e98,c102735 +3487ea0,c101c7d +3487ea8,c10254e +3487eb0,c10194e +3487eb8,c102361 +3487ec0,8fbf0014 +3487ec4,3e00008 +3487ec8,27bd0018 +3487ecc,27bdffe8 +3487ed0,afbf0014 +3487ed4,c101ae4 +3487edc,c100f82 +3487ee4,c102284 +3487eec,c101cf9 +3487ef4,c10140e +3487efc,8fbf0014 +3487f00,3e00008 +3487f04,27bd0018 +3487f08,27bdffe8 +3487f0c,afbf0014 +3487f10,afb00010 +3487f14,3c10801c +3487f18,361084a0 +3487f1c,8e040000 +3487f20,c101176 +3487f24,248402a8 +3487f28,8e040000 +3487f2c,c1025e2 +3487f30,248402a8 +3487f34,c1018fc +3487f3c,8fbf0014 +3487f40,8fb00010 +3487f44,3e00008 +3487f48,27bd0018 +3487f4c,27bdffe0 +3487f50,afbf001c +3487f54,afb10018 +3487f58,afb00014 +3487f5c,808025 +3487f60,c10275a +3487f64,a08825 +3487f68,2202825 +3487f6c,c027368 +3487f70,2002025 +3487f74,8fbf001c +3487f78,8fb10018 +3487f7c,8fb00014 +3487f80,3e00008 +3487f84,27bd0020 +3487f88,27bdffe8 +3487f8c,afbf0014 +3487f90,c1018d5 +3487f98,c102730 +3487fa0,c102374 +3487fa8,c101408 +3487fb0,8fbf0014 3487fb4,3e00008 -3487fbc,27bdffe0 -3487fc0,afbf001c -3487fc4,3c028040 -3487fc8,9042088b -3487fcc,10400010 -3487fd0,3c028040 -3487fd4,2406000c -3487fd8,3c028041 -3487fdc,8c45b204 -3487fe0,c102467 -3487fe4,27a40010 -3487fe8,3c028011 -3487fec,97a30010 -3487ff0,a4435dd2 -3487ff4,93a30012 -3487ff8,a0435dd4 -3487ffc,97a30010 -3488000,a4435dda -3488004,93a30012 -3488008,a0435ddc -348800c,3c028040 -3488010,9042088c -3488014,10400010 -3488018,8fbf001c -348801c,2406000a -3488020,3c028041 -3488024,8c45b204 -3488028,c102467 -348802c,27a40010 -3488030,3c028011 -3488034,97a30010 -3488038,a4435dce -348803c,93a30012 -3488040,a0435dd0 -3488044,97a30010 -3488048,a4435dd6 -348804c,93a30012 -3488050,a0435dd8 -3488054,8fbf001c -3488058,3e00008 -348805c,27bd0020 -3488060,3c02801d -3488064,3442aa30 -3488068,8c420678 -348806c,10400063 -3488074,8c430130 -3488078,10600060 -3488080,8c4201c8 -3488084,2c43001f -3488088,1060005c -3488090,27bdffd8 -3488094,afbf0024 -3488098,afb10020 -348809c,afb0001c -34880a0,280c0 -34880a4,2028023 -34880a8,108080 -34880ac,2028023 -34880b0,108100 -34880b4,3c028011 -34880b8,2028021 -34880bc,3c028040 -34880c0,9042088d -34880c4,10400018 -34880c8,2610572c -34880cc,3c118041 -34880d0,24060006 -34880d4,8e25b204 -34880d8,c102467 -34880dc,27a40010 -34880e0,93a20010 -34880e4,a2020192 -34880e8,93a20011 -34880ec,a2020193 -34880f0,93a20012 -34880f4,a2020194 -34880f8,8e25b204 -34880fc,24060006 -3488100,24a5000c -3488104,c102467 -3488108,27a40010 -348810c,93a20010 -3488110,a202019a -3488114,93a20011 -3488118,a202019b -348811c,93a20012 -3488120,1000000c -3488124,a202019c -3488128,3c028040 -348812c,9044087e -3488130,a2040192 -3488134,2442087e -3488138,90430001 -348813c,a2030193 -3488140,90420002 -3488144,a2020194 -3488148,a204019a -348814c,a203019b -3488150,a202019c -3488154,3c028040 -3488158,9042088e -348815c,10400018 -3488160,3c028040 -3488164,3c118041 -3488168,24060005 -348816c,8e25b204 -3488170,c102467 -3488174,27a40010 -3488178,93a20010 -348817c,a2020196 -3488180,93a20011 -3488184,a2020197 -3488188,93a20012 -348818c,a2020198 -3488190,8e25b204 -3488194,24060005 -3488198,24a5000a -348819c,c102467 -34881a0,27a40010 -34881a4,93a20010 -34881a8,a202019e -34881ac,93a20011 -34881b0,a202019f -34881b4,93a20012 -34881b8,1000000b -34881bc,a20201a0 -34881c0,90440881 -34881c4,a2040196 -34881c8,24420881 -34881cc,90430001 -34881d0,a2030197 -34881d4,90420002 -34881d8,a2020198 -34881dc,a204019e -34881e0,a203019f -34881e4,a20201a0 -34881e8,8fbf0024 -34881ec,8fb10020 -34881f0,8fb0001c -34881f4,3e00008 -34881f8,27bd0028 -34881fc,3e00008 -3488204,27bdffd0 -3488208,afbf002c -348820c,afb20028 -3488210,afb10024 -3488214,afb00020 -3488218,3c028040 -348821c,90430884 -3488220,240200fa -3488224,14620008 -3488228,24100001 -348822c,3c028040 -3488230,24420884 -3488234,90500001 -3488238,90420002 -348823c,2028025 -3488240,321000ff -3488244,10802b -3488248,3c028040 -348824c,90430887 -3488250,240200fa -3488254,14620008 -3488258,24110001 -348825c,3c028040 -3488260,24420887 -3488264,90510001 -3488268,90420002 -348826c,2228825 -3488270,323100ff -3488274,11882b -3488278,3c128041 -348827c,24060009 -3488280,8e45b204 -3488284,c102467 -3488288,27a40010 -348828c,8e45b204 -3488290,24060009 -3488294,24a50012 -3488298,c102467 -348829c,27a40014 -34882a0,24060007 -34882a4,8e45b204 -34882a8,c102467 -34882ac,27a40018 -34882b0,8e45b204 -34882b4,24060007 -34882b8,24a5000e -34882bc,c102467 -34882c0,27a4001c -34882c4,3c02801c -34882c8,344284a0 -34882cc,8c421c4c -34882d0,10400064 -34882d4,8fbf002c -34882d8,240500da -34882dc,3c068011 -34882e0,24c65c3c -34882e4,3c088040 -34882e8,3c078040 -34882ec,3c0a8040 -34882f0,254c0887 -34882f4,3c098040 -34882f8,252b0884 -34882fc,8c430130 -3488300,50600055 -3488304,8c420124 -3488308,84430000 -348830c,54650052 -3488310,8c420124 -3488314,8c43016c -3488318,320c0 -348831c,832023 -3488320,42080 -3488324,832023 -3488328,42100 -348832c,2484faf0 -3488330,862021 -3488334,8c4d0170 -3488338,d18c0 -348833c,6d1823 -3488340,31880 -3488344,6d1823 -3488348,31900 -348834c,2463faf0 -3488350,910d088f -3488354,11a0000e -3488358,661821 -348835c,97ae0010 -3488360,a48e0192 -3488364,93ad0012 -3488368,a08d0194 -348836c,a46e0192 -3488370,a06d0194 -3488374,97ae0014 -3488378,a48e019a -348837c,93ad0016 -3488380,a08d019c -3488384,a46e019a -3488388,10000012 -348838c,a06d019c -3488390,12000011 -3488394,90ed0890 -3488398,912f0884 -348839c,a08f0192 -34883a0,916e0001 -34883a4,a08e0193 -34883a8,916d0002 -34883ac,a08d0194 -34883b0,a06f0192 -34883b4,a06e0193 -34883b8,a06d0194 -34883bc,a08f019a -34883c0,a08e019b -34883c4,a08d019c -34883c8,a06f019a -34883cc,a06e019b -34883d0,a06d019c -34883d4,90ed0890 -34883d8,11a0000d -34883dc,97ae0018 -34883e0,a48e0196 -34883e4,93ad001a -34883e8,a08d0198 -34883ec,a46e0196 -34883f0,a06d0198 -34883f4,97ae001c -34883f8,a48e019e -34883fc,93ad001e -3488400,a08d01a0 -3488404,a46e019e -3488408,10000012 -348840c,a06d01a0 -3488410,52200011 -3488414,8c420124 -3488418,914f0887 -348841c,a08f0196 -3488420,918e0001 -3488424,a08e0197 -3488428,918d0002 -348842c,a08d0198 -3488430,a06f0196 -3488434,a06e0197 -3488438,a06d0198 -348843c,a08f019e -3488440,a08e019f -3488444,a08d01a0 -3488448,a06f019e -348844c,a06e019f -3488450,a06d01a0 -3488454,8c420124 -3488458,5440ffa9 -348845c,8c430130 -3488460,8fbf002c -3488464,8fb20028 -3488468,8fb10024 -348846c,8fb00020 -3488470,3e00008 -3488474,27bd0030 -3488478,27bdffd8 -348847c,afbf001c -3488480,f7b40020 -3488484,3c028040 -3488488,9042088f -348848c,1040000a -3488490,46006506 -3488494,24060009 -3488498,3c028041 -348849c,8c45b204 -34884a0,c102467 -34884a4,27a40010 -34884a8,93a20010 -34884ac,93a30011 -34884b0,10000006 -34884b4,93a40012 -34884b8,3c048040 -34884bc,90820884 -34884c0,24840884 -34884c4,90830001 -34884c8,90840002 -34884cc,240500fa -34884d0,14450043 -34884d4,642825 -34884d8,14a00041 -34884e0,3c028041 -34884e4,c4409eac -34884e8,4600a002 -34884ec,3c028041 -34884f0,c4429eb0 -34884f4,46020000 -34884f8,3c028041 -34884fc,c4429eb4 -3488500,4600103e -3488508,45030005 -348850c,46020001 -3488510,4600000d -3488514,44020000 -3488518,10000006 -348851c,304200ff -3488520,4600000d -3488524,44020000 -3488528,3c038000 -348852c,431025 -3488530,304200ff -3488534,3c038041 -3488538,c4609eb8 -348853c,4600a002 -3488540,3c038041 -3488544,c4629eb0 -3488548,46020000 -348854c,3c038041 -3488550,c4629eb4 -3488554,4600103e -348855c,45030005 -3488560,46020001 -3488564,4600000d -3488568,44030000 -348856c,10000006 -3488570,306300ff -3488574,4600000d -3488578,44030000 -348857c,3c048000 -3488580,641825 -3488584,306300ff -3488588,3c048041 -348858c,c4809ebc -3488590,4600a002 -3488594,3c048041 -3488598,c4829ec0 -348859c,46020000 -34885a0,3c048041 -34885a4,c4829eb4 -34885a8,4600103e -34885b0,45030005 -34885b4,46020001 -34885b8,4600000d -34885bc,44040000 -34885c0,10000040 -34885c4,308400ff -34885c8,4600000d -34885cc,44040000 -34885d0,3c058000 -34885d4,852025 -34885d8,1000003a -34885dc,308400ff -34885e0,44820000 -34885e8,46800020 -34885ec,46140002 -34885f0,3c028041 -34885f4,c4429eb4 -34885f8,4600103e -3488600,45030005 -3488604,46020001 -3488608,4600000d -348860c,44020000 -3488610,10000006 -3488614,304200ff -3488618,4600000d -348861c,44020000 -3488620,3c058000 -3488624,451025 -3488628,304200ff -348862c,44830000 -3488634,46800020 -3488638,46140002 -348863c,3c038041 -3488640,c4629eb4 -3488644,4600103e -348864c,45030005 -3488650,46020001 -3488654,4600000d -3488658,44030000 -348865c,10000006 -3488660,306300ff +3487fb8,27bd0018 +3487fbc,3c02801c +3487fc0,344284a0 +3487fc4,3c030001 +3487fc8,431021 +3487fcc,84430988 +3487fd0,14600022 +3487fd4,3c02801c +3487fd8,344284a0 +3487fdc,3c030001 +3487fe0,431021 +3487fe4,84420992 +3487fe8,14400014 +3487fec,21840 +3487ff0,3c028011 +3487ff4,3442a5d0 +3487ff8,8c420004 +3487ffc,14400009 +3488000,3c028011 +3488004,3442a5d0 +3488008,8c4300a0 +348800c,3c020001 +3488010,3442c007 +3488014,621824 +3488018,14600026 +348801c,24020001 +3488020,3c028011 +3488024,3442a5d0 +3488028,8c4200a0 +348802c,21382 +3488030,30420007 +3488034,3e00008 +3488038,2102b +348803c,621821 +3488040,3c028011 +3488044,3442a5d0 +3488048,8c4200a0 +348804c,621006 +3488050,30420007 +3488054,3e00008 +3488058,2102b +348805c,344284a0 +3488060,3c040001 +3488064,441021 +3488068,84440992 +348806c,1480000a +3488070,3c028011 +3488074,24020003 +3488078,14620007 +348807c,3c028011 +3488080,3442a5d0 +3488084,8c42009c +3488088,3c03000c +348808c,431024 +3488090,3e00008 +3488094,2102b +3488098,3442a5d0 +348809c,9442009c +34880a0,42080 +34880a4,2463ffff +34880a8,832021 +34880ac,821007 +34880b0,30420001 +34880b4,3e00008 +34880bc,27bdffe0 +34880c0,afbf001c +34880c4,3c028040 +34880c8,9042088b +34880cc,10400010 +34880d0,3c028040 +34880d4,2406000c +34880d8,3c028041 +34880dc,8c45b588 +34880e0,c1024a7 +34880e4,27a40010 +34880e8,3c028011 +34880ec,97a30010 +34880f0,a4435dd2 +34880f4,93a30012 +34880f8,a0435dd4 +34880fc,97a30010 +3488100,a4435dda +3488104,93a30012 +3488108,a0435ddc +348810c,3c028040 +3488110,9042088c +3488114,10400010 +3488118,8fbf001c +348811c,2406000a +3488120,3c028041 +3488124,8c45b588 +3488128,c1024a7 +348812c,27a40010 +3488130,3c028011 +3488134,97a30010 +3488138,a4435dce +348813c,93a30012 +3488140,a0435dd0 +3488144,97a30010 +3488148,a4435dd6 +348814c,93a30012 +3488150,a0435dd8 +3488154,8fbf001c +3488158,3e00008 +348815c,27bd0020 +3488160,3c02801d +3488164,3442aa30 +3488168,8c420678 +348816c,10400063 +3488174,8c430130 +3488178,10600060 +3488180,8c4201c8 +3488184,2c43001f +3488188,1060005c +3488190,27bdffd8 +3488194,afbf0024 +3488198,afb10020 +348819c,afb0001c +34881a0,280c0 +34881a4,2028023 +34881a8,108080 +34881ac,2028023 +34881b0,108100 +34881b4,3c028011 +34881b8,2028021 +34881bc,3c028040 +34881c0,9042088d +34881c4,10400018 +34881c8,2610572c +34881cc,3c118041 +34881d0,24060006 +34881d4,8e25b588 +34881d8,c1024a7 +34881dc,27a40010 +34881e0,93a20010 +34881e4,a2020192 +34881e8,93a20011 +34881ec,a2020193 +34881f0,93a20012 +34881f4,a2020194 +34881f8,8e25b588 +34881fc,24060006 +3488200,24a5000c +3488204,c1024a7 +3488208,27a40010 +348820c,93a20010 +3488210,a202019a +3488214,93a20011 +3488218,a202019b +348821c,93a20012 +3488220,1000000c +3488224,a202019c +3488228,3c028040 +348822c,9044087e +3488230,a2040192 +3488234,2442087e +3488238,90430001 +348823c,a2030193 +3488240,90420002 +3488244,a2020194 +3488248,a204019a +348824c,a203019b +3488250,a202019c +3488254,3c028040 +3488258,9042088e +348825c,10400018 +3488260,3c028040 +3488264,3c118041 +3488268,24060005 +348826c,8e25b588 +3488270,c1024a7 +3488274,27a40010 +3488278,93a20010 +348827c,a2020196 +3488280,93a20011 +3488284,a2020197 +3488288,93a20012 +348828c,a2020198 +3488290,8e25b588 +3488294,24060005 +3488298,24a5000a +348829c,c1024a7 +34882a0,27a40010 +34882a4,93a20010 +34882a8,a202019e +34882ac,93a20011 +34882b0,a202019f +34882b4,93a20012 +34882b8,1000000b +34882bc,a20201a0 +34882c0,90440881 +34882c4,a2040196 +34882c8,24420881 +34882cc,90430001 +34882d0,a2030197 +34882d4,90420002 +34882d8,a2020198 +34882dc,a204019e +34882e0,a203019f +34882e4,a20201a0 +34882e8,8fbf0024 +34882ec,8fb10020 +34882f0,8fb0001c +34882f4,3e00008 +34882f8,27bd0028 +34882fc,3e00008 +3488304,27bdffd0 +3488308,afbf002c +348830c,afb20028 +3488310,afb10024 +3488314,afb00020 +3488318,3c028040 +348831c,90430884 +3488320,240200fa +3488324,14620008 +3488328,24100001 +348832c,3c028040 +3488330,24420884 +3488334,90500001 +3488338,90420002 +348833c,2028025 +3488340,321000ff +3488344,10802b +3488348,3c028040 +348834c,90430887 +3488350,240200fa +3488354,14620008 +3488358,24110001 +348835c,3c028040 +3488360,24420887 +3488364,90510001 +3488368,90420002 +348836c,2228825 +3488370,323100ff +3488374,11882b +3488378,3c128041 +348837c,24060009 +3488380,8e45b588 +3488384,c1024a7 +3488388,27a40010 +348838c,8e45b588 +3488390,24060009 +3488394,24a50012 +3488398,c1024a7 +348839c,27a40014 +34883a0,24060007 +34883a4,8e45b588 +34883a8,c1024a7 +34883ac,27a40018 +34883b0,8e45b588 +34883b4,24060007 +34883b8,24a5000e +34883bc,c1024a7 +34883c0,27a4001c +34883c4,3c02801c +34883c8,344284a0 +34883cc,8c421c4c +34883d0,10400064 +34883d4,8fbf002c +34883d8,240500da +34883dc,3c068011 +34883e0,24c65c3c +34883e4,3c088040 +34883e8,3c078040 +34883ec,3c0a8040 +34883f0,254c0887 +34883f4,3c098040 +34883f8,252b0884 +34883fc,8c430130 +3488400,50600055 +3488404,8c420124 +3488408,84430000 +348840c,54650052 +3488410,8c420124 +3488414,8c43016c +3488418,320c0 +348841c,832023 +3488420,42080 +3488424,832023 +3488428,42100 +348842c,2484faf0 +3488430,862021 +3488434,8c4d0170 +3488438,d18c0 +348843c,6d1823 +3488440,31880 +3488444,6d1823 +3488448,31900 +348844c,2463faf0 +3488450,910d088f +3488454,11a0000e +3488458,661821 +348845c,97ae0010 +3488460,a48e0192 +3488464,93ad0012 +3488468,a08d0194 +348846c,a46e0192 +3488470,a06d0194 +3488474,97ae0014 +3488478,a48e019a +348847c,93ad0016 +3488480,a08d019c +3488484,a46e019a +3488488,10000012 +348848c,a06d019c +3488490,12000011 +3488494,90ed0890 +3488498,912f0884 +348849c,a08f0192 +34884a0,916e0001 +34884a4,a08e0193 +34884a8,916d0002 +34884ac,a08d0194 +34884b0,a06f0192 +34884b4,a06e0193 +34884b8,a06d0194 +34884bc,a08f019a +34884c0,a08e019b +34884c4,a08d019c +34884c8,a06f019a +34884cc,a06e019b +34884d0,a06d019c +34884d4,90ed0890 +34884d8,11a0000d +34884dc,97ae0018 +34884e0,a48e0196 +34884e4,93ad001a +34884e8,a08d0198 +34884ec,a46e0196 +34884f0,a06d0198 +34884f4,97ae001c +34884f8,a48e019e +34884fc,93ad001e +3488500,a08d01a0 +3488504,a46e019e +3488508,10000012 +348850c,a06d01a0 +3488510,52200011 +3488514,8c420124 +3488518,914f0887 +348851c,a08f0196 +3488520,918e0001 +3488524,a08e0197 +3488528,918d0002 +348852c,a08d0198 +3488530,a06f0196 +3488534,a06e0197 +3488538,a06d0198 +348853c,a08f019e +3488540,a08e019f +3488544,a08d01a0 +3488548,a06f019e +348854c,a06e019f +3488550,a06d01a0 +3488554,8c420124 +3488558,5440ffa9 +348855c,8c430130 +3488560,8fbf002c +3488564,8fb20028 +3488568,8fb10024 +348856c,8fb00020 +3488570,3e00008 +3488574,27bd0030 +3488578,27bdffd8 +348857c,afbf001c +3488580,f7b40020 +3488584,3c028040 +3488588,9042088f +348858c,1040000a +3488590,46006506 +3488594,24060009 +3488598,3c028041 +348859c,8c45b588 +34885a0,c1024a7 +34885a4,27a40010 +34885a8,93a20010 +34885ac,93a30011 +34885b0,10000006 +34885b4,93a40012 +34885b8,3c048040 +34885bc,90820884 +34885c0,24840884 +34885c4,90830001 +34885c8,90840002 +34885cc,240500fa +34885d0,14450043 +34885d4,642825 +34885d8,14a00041 +34885e0,3c028041 +34885e4,c440a1ec +34885e8,4600a002 +34885ec,3c028041 +34885f0,c442a1f0 +34885f4,46020000 +34885f8,3c028041 +34885fc,c442a1f4 +3488600,4600103e +3488608,45030005 +348860c,46020001 +3488610,4600000d +3488614,44020000 +3488618,10000006 +348861c,304200ff +3488620,4600000d +3488624,44020000 +3488628,3c038000 +348862c,431025 +3488630,304200ff +3488634,3c038041 +3488638,c460a1f8 +348863c,4600a002 +3488640,3c038041 +3488644,c462a1f0 +3488648,46020000 +348864c,3c038041 +3488650,c462a1f4 +3488654,4600103e +348865c,45030005 +3488660,46020001 3488664,4600000d 3488668,44030000 -348866c,3c058000 -3488670,651825 -3488674,306300ff -3488678,44840000 -3488680,46800020 -3488684,46140002 +348866c,10000006 +3488670,306300ff +3488674,4600000d +3488678,44030000 +348867c,3c048000 +3488680,641825 +3488684,306300ff 3488688,3c048041 -348868c,c4829eb4 -3488690,4600103e -3488698,45030005 -348869c,46020001 -34886a0,4600000d -34886a4,44040000 -34886a8,10000006 -34886ac,308400ff -34886b0,4600000d -34886b4,44040000 -34886b8,3c058000 -34886bc,852025 -34886c0,308400ff -34886c4,21600 -34886c8,42200 -34886cc,441025 -34886d0,31c00 -34886d4,431025 -34886d8,344200ff -34886dc,8fbf001c -34886e0,d7b40020 -34886e4,3e00008 -34886e8,27bd0028 -34886ec,27bdffd8 -34886f0,afbf0024 -34886f4,afb20020 -34886f8,afb1001c -34886fc,afb00018 -3488700,3c02801c -3488704,344284a0 -3488708,90421cda -348870c,24030004 -3488710,10430015 -3488714,2c430005 -3488718,50600006 -348871c,2442fffb -3488720,24030002 -3488724,50430008 -3488728,3c028040 -348872c,10000013 -3488730,3c028040 -3488734,304200fb -3488738,54400010 -348873c,3c028040 -3488740,10000005 -3488744,3c028040 -3488748,90500891 -348874c,3c028040 -3488750,1000000d -3488754,90510892 -3488758,90500893 -348875c,3c028040 -3488760,10000009 -3488764,90510894 -3488768,3c028040 -348876c,90500895 -3488770,3c028040 -3488774,10000004 -3488778,90510896 -348877c,90500897 -3488780,3c028040 -3488784,90510898 -3488788,2111025 -348878c,1040005b -3488790,8fbf0024 -3488794,3c128041 -3488798,2406000e -348879c,8e45b204 -34887a0,c102467 -34887a4,27a40010 -34887a8,2406000c -34887ac,8e45b204 -34887b0,c102467 -34887b4,27a40014 -34887b8,1200000a -34887bc,3c02801c -34887c0,344284a0 -34887c4,90431cda -34887c8,318c0 -34887cc,3c02800f -34887d0,431021 -34887d4,97a30010 -34887d8,a4438214 -34887dc,93a30012 -34887e0,a0438216 -34887e4,1220000a -34887e8,3c02801c -34887ec,344284a0 -34887f0,90431cda -34887f4,318c0 -34887f8,3c02800f -34887fc,431021 -3488800,97a30014 -3488804,a4438218 -3488808,93a30016 -348880c,a043821a -3488810,12000010 -3488814,3c02801d -3488818,3c02801c -348881c,344284a0 -3488820,97a30010 -3488824,a4431cf0 -3488828,93a30012 -348882c,a0431cf2 -3488830,97a30010 -3488834,a4431d04 -3488838,93a30012 -348883c,a0431d06 -3488840,97a30010 -3488844,a4431d18 -3488848,93a30012 -348884c,a0431d1a -3488850,3c02801d -3488854,3442aa30 -3488858,8c42067c -348885c,10400027 -3488860,8fbf0024 -3488864,8c430130 -3488868,10600025 -348886c,8fb20020 -3488870,12000010 -3488874,24430234 -3488878,93a40010 -348887c,44840000 -3488884,46800020 -3488888,e4400234 -348888c,93a20011 -3488890,44820000 -3488898,46800020 -348889c,e4600004 -34888a0,93a20012 -34888a4,44820000 -34888ac,46800020 -34888b0,e4600008 -34888b4,12200011 -34888b8,8fbf0024 -34888bc,93a20014 -34888c0,44820000 -34888c8,46800020 -34888cc,e4600010 -34888d0,93a20015 -34888d4,44820000 -34888dc,46800020 -34888e0,e4600014 -34888e4,93a20016 -34888e8,44820000 -34888f0,46800020 -34888f4,e4600018 -34888f8,8fbf0024 -34888fc,8fb20020 -3488900,8fb1001c -3488904,8fb00018 -3488908,3e00008 -348890c,27bd0028 -3488910,27bdffe8 -3488914,afbf0014 -3488918,3c038041 -348891c,8c62b204 -3488920,24420001 -3488924,c101fef -3488928,ac62b204 -348892c,c102018 -3488934,c102081 -348893c,c1021bb -3488944,8fbf0014 -3488948,3e00008 -348894c,27bd0018 -3488950,27bdffe8 -3488954,afbf0014 -3488958,801025 -348895c,2c430193 -3488960,10600006 -3488964,a02025 -3488968,210c0 -348896c,3c03800f -3488970,34638ff8 -3488974,10000008 -3488978,431021 -348897c,2442fe6e -3488980,21080 -3488984,2403fff8 -3488988,431024 -348898c,3c038040 -3488990,24630c9c -3488994,621021 -3488998,8c450000 -348899c,8c460004 -34889a0,3c028000 -34889a4,24420df0 -34889a8,40f809 -34889ac,c53023 -34889b0,8fbf0014 -34889b4,3e00008 -34889b8,27bd0018 -34889bc,27bdffe8 -34889c0,afbf0014 -34889c4,801025 -34889c8,a02025 -34889cc,a4450000 -34889d0,c102254 -34889d4,8c450004 -34889d8,8fbf0014 -34889dc,3e00008 -34889e0,27bd0018 -34889e4,27bdffe8 -34889e8,afbf0014 -34889ec,afb00010 -34889f0,3c028041 -34889f4,2442c274 -34889f8,24450040 -34889fc,94430000 -3488a00,1064000b -3488a04,408025 -3488a08,54600006 -3488a0c,24420008 -3488a10,802825 -3488a14,c10226f -3488a18,402025 -3488a1c,10000005 -3488a20,2001025 -3488a24,5445fff6 -3488a28,94430000 -3488a2c,8025 -3488a30,2001025 -3488a34,8fbf0014 -3488a38,8fb00010 -3488a3c,3e00008 -3488a40,27bd0018 -3488a44,3c03801c -3488a48,346384a0 -3488a4c,8c620000 -3488a50,8c860004 -3488a54,8c4502d0 -3488a58,24a70008 -3488a5c,ac4702d0 -3488a60,3c02db06 -3488a64,24420018 -3488a68,aca20000 -3488a6c,aca60004 -3488a70,8c650000 -3488a74,8c840004 -3488a78,8ca302c0 -3488a7c,24660008 -3488a80,aca602c0 -3488a84,ac620000 -3488a88,3e00008 -3488a8c,ac640004 -3488a90,27bdffe0 -3488a94,afbf0014 -3488a98,f7b40018 -3488a9c,3c02800a -3488aa0,3442a78c -3488aa4,40f809 -3488aa8,46006506 -3488aac,2442000c -3488ab0,2025 -3488ab4,1000000a -3488ab8,2405000c -3488abc,c4600000 -3488ac0,46140002 -3488ac4,e4600000 -3488ac8,24630004 -3488acc,5462fffc -3488ad0,c4600000 -3488ad4,24840004 -3488ad8,10850003 -3488adc,24420010 -3488ae0,1000fff6 -3488ae4,2443fff4 -3488ae8,8fbf0014 -3488aec,d7b40018 -3488af0,3e00008 -3488af4,27bd0020 -3488af8,27bdffd8 -3488afc,afbf0024 -3488b00,afb30020 -3488b04,afb2001c -3488b08,afb10018 -3488b0c,afb00014 -3488b10,809825 -3488b14,a09025 -3488b18,c08025 -3488b1c,3c118002 -3488b20,26222438 -3488b24,3025 -3488b28,2002825 -3488b2c,40f809 -3488b30,2402025 -3488b34,26312554 -3488b38,3025 -3488b3c,2002825 -3488b40,220f809 -3488b44,2402025 -3488b48,2602825 -3488b4c,3c028005 -3488b50,244270c0 -3488b54,40f809 -3488b58,2002025 -3488b5c,8fbf0024 -3488b60,8fb30020 -3488b64,8fb2001c -3488b68,8fb10018 -3488b6c,8fb00014 -3488b70,3e00008 -3488b74,27bd0028 -3488b78,44860000 -3488b7c,24020063 -3488b80,54820005 -3488b84,84a20000 -3488b88,3c028041 -3488b8c,c4429ec8 -3488b90,3e00008 -3488b94,46020002 -3488b98,240300f1 -3488b9c,54430008 -3488ba0,24030015 -3488ba4,24020046 -3488ba8,1082000d -3488bac,2402002f -3488bb0,1482000e -3488bb4,3c028041 -3488bb8,3e00008 -3488bbc,c4409ec4 -3488bc0,1443000a -3488bc4,24020011 -3488bc8,90a3001d -3488bcc,14620007 -3488bd0,3c028041 -3488bd4,c4429ec8 -3488bd8,3e00008 -3488bdc,46020002 -3488be0,3c028041 -3488be4,3e00008 -3488be8,c4409ec4 -3488bec,3e00008 -3488bf4,27bdffd8 -3488bf8,afbf001c -3488bfc,afb20018 -3488c00,afb10014 -3488c04,afb00010 -3488c08,f7b40020 -3488c0c,48202 -3488c10,afa40028 -3488c14,a08825 -3488c18,c09025 -3488c1c,4487a000 -3488c20,108600 -3488c24,108603 -3488c28,c102279 -3488c2c,42402 -3488c30,c102291 -3488c34,402025 -3488c38,4406a000 -3488c3c,2202825 -3488c40,c1022de -3488c44,2002025 -3488c48,c1022a4 -3488c4c,46000306 -3488c50,2604ffff -3488c54,2403025 -3488c58,2202825 -3488c5c,42600 -3488c60,c1022be -3488c64,42603 -3488c68,8fbf001c -3488c6c,8fb20018 -3488c70,8fb10014 -3488c74,8fb00010 -3488c78,d7b40020 -3488c7c,3e00008 -3488c80,27bd0028 -3488c84,27bdffe0 -3488c88,afbf001c -3488c8c,afb10018 -3488c90,afb00014 -3488c94,3c108041 -3488c98,2610c274 -3488c9c,26110040 -3488ca0,a6000000 -3488ca4,c1026fa -3488ca8,24041e70 -3488cac,ae020004 -3488cb0,26100008 -3488cb4,5611fffb -3488cb8,a6000000 -3488cbc,8fbf001c -3488cc0,8fb10018 -3488cc4,8fb00014 -3488cc8,3e00008 -3488ccc,27bd0020 +348868c,c480a1fc +3488690,4600a002 +3488694,3c048041 +3488698,c482a200 +348869c,46020000 +34886a0,3c048041 +34886a4,c482a1f4 +34886a8,4600103e +34886b0,45030005 +34886b4,46020001 +34886b8,4600000d +34886bc,44040000 +34886c0,10000040 +34886c4,308400ff +34886c8,4600000d +34886cc,44040000 +34886d0,3c058000 +34886d4,852025 +34886d8,1000003a +34886dc,308400ff +34886e0,44820000 +34886e8,46800020 +34886ec,46140002 +34886f0,3c028041 +34886f4,c442a1f4 +34886f8,4600103e +3488700,45030005 +3488704,46020001 +3488708,4600000d +348870c,44020000 +3488710,10000006 +3488714,304200ff +3488718,4600000d +348871c,44020000 +3488720,3c058000 +3488724,451025 +3488728,304200ff +348872c,44830000 +3488734,46800020 +3488738,46140002 +348873c,3c038041 +3488740,c462a1f4 +3488744,4600103e +348874c,45030005 +3488750,46020001 +3488754,4600000d +3488758,44030000 +348875c,10000006 +3488760,306300ff +3488764,4600000d +3488768,44030000 +348876c,3c058000 +3488770,651825 +3488774,306300ff +3488778,44840000 +3488780,46800020 +3488784,46140002 +3488788,3c048041 +348878c,c482a1f4 +3488790,4600103e +3488798,45030005 +348879c,46020001 +34887a0,4600000d +34887a4,44040000 +34887a8,10000006 +34887ac,308400ff +34887b0,4600000d +34887b4,44040000 +34887b8,3c058000 +34887bc,852025 +34887c0,308400ff +34887c4,21600 +34887c8,42200 +34887cc,441025 +34887d0,31c00 +34887d4,431025 +34887d8,344200ff +34887dc,8fbf001c +34887e0,d7b40020 +34887e4,3e00008 +34887e8,27bd0028 +34887ec,27bdffd8 +34887f0,afbf0024 +34887f4,afb20020 +34887f8,afb1001c +34887fc,afb00018 +3488800,3c02801c +3488804,344284a0 +3488808,90421cda +348880c,24030004 +3488810,10430015 +3488814,2c430005 +3488818,50600006 +348881c,2442fffb +3488820,24030002 +3488824,50430008 +3488828,3c028040 +348882c,10000013 +3488830,3c028040 +3488834,304200fb +3488838,54400010 +348883c,3c028040 +3488840,10000005 +3488844,3c028040 +3488848,90500891 +348884c,3c028040 +3488850,1000000d +3488854,90510892 +3488858,90500893 +348885c,3c028040 +3488860,10000009 +3488864,90510894 +3488868,3c028040 +348886c,90500895 +3488870,3c028040 +3488874,10000004 +3488878,90510896 +348887c,90500897 +3488880,3c028040 +3488884,90510898 +3488888,2111025 +348888c,1040005b +3488890,8fbf0024 +3488894,3c128041 +3488898,2406000e +348889c,8e45b588 +34888a0,c1024a7 +34888a4,27a40010 +34888a8,2406000c +34888ac,8e45b588 +34888b0,c1024a7 +34888b4,27a40014 +34888b8,1200000a +34888bc,3c02801c +34888c0,344284a0 +34888c4,90431cda +34888c8,318c0 +34888cc,3c02800f +34888d0,431021 +34888d4,97a30010 +34888d8,a4438214 +34888dc,93a30012 +34888e0,a0438216 +34888e4,1220000a +34888e8,3c02801c +34888ec,344284a0 +34888f0,90431cda +34888f4,318c0 +34888f8,3c02800f +34888fc,431021 +3488900,97a30014 +3488904,a4438218 +3488908,93a30016 +348890c,a043821a +3488910,12000010 +3488914,3c02801d +3488918,3c02801c +348891c,344284a0 +3488920,97a30010 +3488924,a4431cf0 +3488928,93a30012 +348892c,a0431cf2 +3488930,97a30010 +3488934,a4431d04 +3488938,93a30012 +348893c,a0431d06 +3488940,97a30010 +3488944,a4431d18 +3488948,93a30012 +348894c,a0431d1a +3488950,3c02801d +3488954,3442aa30 +3488958,8c42067c +348895c,10400027 +3488960,8fbf0024 +3488964,8c430130 +3488968,10600025 +348896c,8fb20020 +3488970,12000010 +3488974,24430234 +3488978,93a40010 +348897c,44840000 +3488984,46800020 +3488988,e4400234 +348898c,93a20011 +3488990,44820000 +3488998,46800020 +348899c,e4600004 +34889a0,93a20012 +34889a4,44820000 +34889ac,46800020 +34889b0,e4600008 +34889b4,12200011 +34889b8,8fbf0024 +34889bc,93a20014 +34889c0,44820000 +34889c8,46800020 +34889cc,e4600010 +34889d0,93a20015 +34889d4,44820000 +34889dc,46800020 +34889e0,e4600014 +34889e4,93a20016 +34889e8,44820000 +34889f0,46800020 +34889f4,e4600018 +34889f8,8fbf0024 +34889fc,8fb20020 +3488a00,8fb1001c +3488a04,8fb00018 +3488a08,3e00008 +3488a0c,27bd0028 +3488a10,27bdffe8 +3488a14,afbf0014 +3488a18,3c038041 +3488a1c,8c62b588 +3488a20,24420001 +3488a24,c10202f +3488a28,ac62b588 +3488a2c,c102058 +3488a34,c1020c1 +3488a3c,c1021fb +3488a44,8fbf0014 +3488a48,3e00008 +3488a4c,27bd0018 +3488a50,27bdffe8 +3488a54,afbf0014 +3488a58,801025 +3488a5c,2c430193 +3488a60,10600006 +3488a64,a02025 +3488a68,210c0 +3488a6c,3c03800f +3488a70,34638ff8 +3488a74,10000008 +3488a78,431021 +3488a7c,2442fe6e +3488a80,21080 +3488a84,2403fff8 +3488a88,431024 +3488a8c,3c038040 +3488a90,24630c9c +3488a94,621021 +3488a98,8c450000 +3488a9c,8c460004 +3488aa0,3c028000 +3488aa4,24420df0 +3488aa8,40f809 +3488aac,c53023 +3488ab0,8fbf0014 +3488ab4,3e00008 +3488ab8,27bd0018 +3488abc,27bdffe8 +3488ac0,afbf0014 +3488ac4,801025 +3488ac8,a02025 +3488acc,a4450000 +3488ad0,c102294 +3488ad4,8c450004 +3488ad8,8fbf0014 +3488adc,3e00008 +3488ae0,27bd0018 +3488ae4,27bdffe8 +3488ae8,afbf0014 +3488aec,afb00010 +3488af0,3c028041 +3488af4,2442c5fc +3488af8,24450040 +3488afc,94430000 +3488b00,1064000b +3488b04,408025 +3488b08,54600006 +3488b0c,24420008 +3488b10,802825 +3488b14,c1022af +3488b18,402025 +3488b1c,10000005 +3488b20,2001025 +3488b24,5445fff6 +3488b28,94430000 +3488b2c,8025 +3488b30,2001025 +3488b34,8fbf0014 +3488b38,8fb00010 +3488b3c,3e00008 +3488b40,27bd0018 +3488b44,3c03801c +3488b48,346384a0 +3488b4c,8c620000 +3488b50,8c860004 +3488b54,8c4502d0 +3488b58,24a70008 +3488b5c,ac4702d0 +3488b60,3c02db06 +3488b64,24420018 +3488b68,aca20000 +3488b6c,aca60004 +3488b70,8c650000 +3488b74,8c840004 +3488b78,8ca302c0 +3488b7c,24660008 +3488b80,aca602c0 +3488b84,ac620000 +3488b88,3e00008 +3488b8c,ac640004 +3488b90,27bdffe0 +3488b94,afbf0014 +3488b98,f7b40018 +3488b9c,3c02800a +3488ba0,3442a78c +3488ba4,40f809 +3488ba8,46006506 +3488bac,2442000c +3488bb0,2025 +3488bb4,1000000a +3488bb8,2405000c +3488bbc,c4600000 +3488bc0,46140002 +3488bc4,e4600000 +3488bc8,24630004 +3488bcc,5462fffc +3488bd0,c4600000 +3488bd4,24840004 +3488bd8,10850003 +3488bdc,24420010 +3488be0,1000fff6 +3488be4,2443fff4 +3488be8,8fbf0014 +3488bec,d7b40018 +3488bf0,3e00008 +3488bf4,27bd0020 +3488bf8,27bdffd8 +3488bfc,afbf0024 +3488c00,afb30020 +3488c04,afb2001c +3488c08,afb10018 +3488c0c,afb00014 +3488c10,809825 +3488c14,a09025 +3488c18,c08025 +3488c1c,3c118002 +3488c20,26222438 +3488c24,3025 +3488c28,2002825 +3488c2c,40f809 +3488c30,2402025 +3488c34,26312554 +3488c38,3025 +3488c3c,2002825 +3488c40,220f809 +3488c44,2402025 +3488c48,2602825 +3488c4c,3c028005 +3488c50,244270c0 +3488c54,40f809 +3488c58,2002025 +3488c5c,8fbf0024 +3488c60,8fb30020 +3488c64,8fb2001c +3488c68,8fb10018 +3488c6c,8fb00014 +3488c70,3e00008 +3488c74,27bd0028 +3488c78,44860000 +3488c7c,24020063 +3488c80,54820005 +3488c84,84a20000 +3488c88,3c028041 +3488c8c,c442a208 +3488c90,3e00008 +3488c94,46020002 +3488c98,240300f1 +3488c9c,54430008 +3488ca0,24030015 +3488ca4,24020046 +3488ca8,1082000d +3488cac,2402002f +3488cb0,1482000e +3488cb4,3c028041 +3488cb8,3e00008 +3488cbc,c440a204 +3488cc0,1443000a +3488cc4,24020011 +3488cc8,90a3001d +3488ccc,14620007 3488cd0,3c028041 -3488cd4,a440c274 -3488cd8,2442c274 -3488cdc,a4400008 -3488ce0,a4400010 -3488ce4,a4400018 -3488ce8,a4400020 -3488cec,a4400028 -3488cf0,a4400030 -3488cf4,3e00008 -3488cf8,a4400038 -3488cfc,27bdffe8 -3488d00,afbf0014 +3488cd4,c442a208 +3488cd8,3e00008 +3488cdc,46020002 +3488ce0,3c028041 +3488ce4,3e00008 +3488ce8,c440a204 +3488cec,3e00008 +3488cf4,27bdffd8 +3488cf8,afbf001c +3488cfc,afb20018 +3488d00,afb10014 3488d04,afb00010 -3488d08,afa5001c -3488d0c,10a0000e -3488d10,afa60020 -3488d14,808025 -3488d18,93a40023 -3488d1c,50800002 -3488d20,97a40020 -3488d24,3084ffff -3488d28,c101eb2 -3488d30,c101ea3 +3488d08,f7b40020 +3488d0c,48202 +3488d10,afa40028 +3488d14,a08825 +3488d18,c09025 +3488d1c,4487a000 +3488d20,108600 +3488d24,108603 +3488d28,c1022b9 +3488d2c,42402 +3488d30,c1022d1 3488d34,402025 -3488d38,94430004 -3488d3c,a6030000 -3488d40,80420006 -3488d44,a2020002 -3488d48,8fbf0014 -3488d4c,8fb00010 -3488d50,3e00008 -3488d54,27bd0018 -3488d58,27bdffe0 -3488d5c,afbf001c -3488d60,afb00018 -3488d64,808025 -3488d68,30e700ff -3488d6c,90c600a5 -3488d70,c1019a8 -3488d74,27a40010 -3488d78,8fa50010 -3488d7c,8fa60014 -3488d80,c10233f -3488d84,2002025 -3488d88,8fbf001c -3488d8c,8fb00018 -3488d90,3e00008 -3488d94,27bd0020 -3488d98,27bdffd8 -3488d9c,afbf0024 -3488da0,afb10020 -3488da4,afb0001c -3488da8,808025 -3488dac,a08825 -3488db0,3c028041 -3488db4,8c429e6c -3488db8,afa20010 -3488dbc,3825 -3488dc0,a03025 -3488dc4,802825 -3488dc8,c102356 -3488dcc,27a40010 +3488d38,4406a000 +3488d3c,2202825 +3488d40,c10231e +3488d44,2002025 +3488d48,c1022e4 +3488d4c,46000306 +3488d50,2604ffff +3488d54,2403025 +3488d58,2202825 +3488d5c,42600 +3488d60,c1022fe +3488d64,42603 +3488d68,8fbf001c +3488d6c,8fb20018 +3488d70,8fb10014 +3488d74,8fb00010 +3488d78,d7b40020 +3488d7c,3e00008 +3488d80,27bd0028 +3488d84,27bdffe0 +3488d88,afbf001c +3488d8c,afb10018 +3488d90,afb00014 +3488d94,3c108041 +3488d98,2610c5fc +3488d9c,26110040 +3488da0,a6000000 +3488da4,c10273a +3488da8,24041e70 +3488dac,ae020004 +3488db0,26100008 +3488db4,5611fffb +3488db8,a6000000 +3488dbc,8fbf001c +3488dc0,8fb10018 +3488dc4,8fb00014 +3488dc8,3e00008 +3488dcc,27bd0020 3488dd0,3c028041 -3488dd4,8c479ecc -3488dd8,2203025 -3488ddc,2002825 -3488de0,c1022fd -3488de4,8fa40010 -3488de8,8fbf0024 -3488dec,8fb10020 -3488df0,8fb0001c +3488dd4,a440c5fc +3488dd8,2442c5fc +3488ddc,a4400008 +3488de0,a4400010 +3488de4,a4400018 +3488de8,a4400020 +3488dec,a4400028 +3488df0,a4400030 3488df4,3e00008 -3488df8,27bd0028 -3488dfc,27bdffd8 -3488e00,afbf0024 -3488e04,afb10020 -3488e08,afb0001c -3488e0c,808025 -3488e10,9083001d -3488e14,24020011 -3488e18,10620007 -3488e1c,a08825 -3488e20,3c028001 -3488e24,24423268 -3488e28,40f809 -3488e30,10000010 -3488e34,8fbf0024 -3488e38,3c028041 -3488e3c,8c429e70 -3488e40,afa20010 -3488e44,3825 -3488e48,a03025 -3488e4c,802825 -3488e50,c102356 -3488e54,27a40010 -3488e58,3c028041 -3488e5c,8c479ecc -3488e60,2203025 -3488e64,2002825 -3488e68,c1022fd -3488e6c,8fa40010 -3488e70,8fbf0024 -3488e74,8fb10020 -3488e78,8fb0001c -3488e7c,3e00008 -3488e80,27bd0028 -3488e84,27bdffd8 -3488e88,afbf0024 -3488e8c,afb10020 -3488e90,afb0001c -3488e94,808025 -3488e98,a08825 -3488e9c,3c028041 -3488ea0,8c429e74 -3488ea4,afa20010 -3488ea8,2407004f -3488eac,a03025 -3488eb0,802825 -3488eb4,c102356 -3488eb8,27a40010 -3488ebc,3c028041 -3488ec0,8c479ed0 -3488ec4,2203025 -3488ec8,2002825 -3488ecc,c1022fd -3488ed0,8fa40010 -3488ed4,8fbf0024 -3488ed8,8fb10020 -3488edc,8fb0001c -3488ee0,3e00008 -3488ee4,27bd0028 -3488ee8,27bdffd8 -3488eec,afbf0024 -3488ef0,afb10020 -3488ef4,afb0001c -3488ef8,808025 -3488efc,a08825 -3488f00,3c028041 -3488f04,8c429e78 -3488f08,afa20010 -3488f0c,3825 -3488f10,a03025 -3488f14,802825 -3488f18,c102356 -3488f1c,27a40010 -3488f20,3c028041 -3488f24,8c479ed4 -3488f28,2203025 -3488f2c,2002825 -3488f30,c1022fd -3488f34,8fa40010 -3488f38,8fbf0024 -3488f3c,8fb10020 -3488f40,8fb0001c -3488f44,3e00008 -3488f48,27bd0028 -3488f4c,27bdffd8 -3488f50,afbf0024 -3488f54,afb10020 -3488f58,afb0001c -3488f5c,808025 -3488f60,a08825 -3488f64,3c028041 -3488f68,8c429e7c -3488f6c,afa20010 -3488f70,2407000c -3488f74,a03025 -3488f78,802825 -3488f7c,c102356 -3488f80,27a40010 -3488f84,3c028041 -3488f88,8c479ed8 -3488f8c,2203025 -3488f90,2002825 -3488f94,c1022fd -3488f98,8fa40010 -3488f9c,8fbf0024 -3488fa0,8fb10020 -3488fa4,8fb0001c -3488fa8,3e00008 -3488fac,27bd0028 -3488fb0,27bdffd0 -3488fb4,afbf002c -3488fb8,afb10028 -3488fbc,afb00024 -3488fc0,808025 -3488fc4,afa00010 -3488fc8,afa00014 -3488fcc,9482001c -3488fd0,24030001 -3488fd4,14430008 -3488fd8,a08825 -3488fdc,24070015 -3488fe0,90a600a5 -3488fe4,802825 -3488fe8,c1019a8 -3488fec,27a40010 -3488ff0,10000012 -3488ff4,afa00018 -3488ff8,24030007 -3488ffc,14430008 -3489000,24030a0c -3489004,24070058 -3489008,90a600a5 -348900c,802825 -3489010,c1019a8 -3489014,27a40010 -3489018,10000008 -348901c,afa00018 -3489020,54430006 -3489024,afa00018 -3489028,3c050010 -348902c,34a5010a -3489030,c101980 -3489034,27a40010 -3489038,afa00018 -348903c,8fa50010 -3489040,8fa60014 -3489044,c10233f -3489048,27a40018 -348904c,97a20018 -3489050,10400008 -3489054,2203025 -3489058,3c028041 -348905c,8c479ec4 -3489060,2002825 -3489064,c1022fd -3489068,8fa40018 -348906c,10000005 -3489070,8fbf002c -3489074,2002825 -3489078,c1022be -348907c,82040141 -3489080,8fbf002c -3489084,8fb10028 -3489088,8fb00024 -348908c,3e00008 -3489090,27bd0030 -3489094,27bdffd0 -3489098,afbf002c -348909c,afb10028 -34890a0,afb00024 -34890a4,808025 -34890a8,afa00010 -34890ac,afa00014 -34890b0,9482001c -34890b4,10400004 -34890b8,a08825 -34890bc,24030005 -34890c0,54430007 -34890c4,afa00018 -34890c8,24070034 -34890cc,922600a5 -34890d0,2002825 -34890d4,c1019a8 -34890d8,27a40010 -34890dc,afa00018 -34890e0,8fa50010 -34890e4,8fa60014 -34890e8,c10233f -34890ec,27a40018 -34890f0,97a20018 -34890f4,10400008 -34890f8,2203025 -34890fc,3c028041 -3489100,8c479ec4 -3489104,2002825 -3489108,c1022fd -348910c,8fa40018 -3489110,10000005 -3489114,8fbf002c -3489118,2002825 -348911c,c1022be -3489120,82040147 -3489124,8fbf002c -3489128,8fb10028 -348912c,8fb00024 -3489130,3e00008 -3489134,27bd0030 -3489138,27bdffd8 -348913c,afbf0024 -3489140,afb10020 -3489144,afb0001c -3489148,808025 -348914c,a08825 -3489150,3c028041 -3489154,8c429e6c -3489158,afa20010 -348915c,2407003e -3489160,a03025 -3489164,802825 -3489168,c102356 -348916c,27a40010 -3489170,3c028041 -3489174,8c479ec4 -3489178,2203025 -348917c,2002825 -3489180,c1022fd -3489184,8fa40010 -3489188,8fbf0024 -348918c,8fb10020 -3489190,8fb0001c -3489194,3e00008 -3489198,27bd0028 -348919c,801025 -34891a0,14c00002 -34891a4,a6001b -34891a8,7000d -34891ac,2810 -34891b0,3812 -34891b4,3c03aaaa -34891b8,3463aaab -34891bc,e30019 -34891c0,1810 -34891c4,31882 -34891c8,32040 -34891cc,831821 -34891d0,31840 -34891d4,e31823 -34891d8,44850000 -34891dc,4a10004 -34891e0,468000a1 -34891e4,3c048041 -34891e8,d4809ee8 -34891ec,46201080 -34891f0,462010a0 -34891f4,44860000 -34891f8,4c10004 -34891fc,46800021 -3489200,3c048041 -3489204,d4849ee8 -3489208,46240000 -348920c,46200020 -3489210,46001083 -3489214,3c048041 -3489218,c4849edc -348921c,46022101 -3489220,24640001 -3489224,3c068041 -3489228,24c69e80 -348922c,32840 -3489230,a32821 -3489234,c52821 -3489238,90a50001 -348923c,44850000 -3489244,46800020 -3489248,46040002 -348924c,42840 -3489250,a42821 -3489254,c53021 -3489258,90c50001 -348925c,44853000 -3489264,468031a0 -3489268,46023182 -348926c,46060000 -3489270,3c058041 -3489274,c4a69ee0 -3489278,4600303e -3489280,45030005 -3489284,46060001 -3489288,4600000d -348928c,44050000 -3489290,10000006 -3489294,30a700ff -3489298,4600000d -348929c,44050000 -34892a0,3c068000 -34892a4,a62825 -34892a8,30a700ff -34892ac,3c068041 -34892b0,24c69e80 -34892b4,32840 -34892b8,a32821 -34892bc,c52821 -34892c0,90a50002 -34892c4,44850000 -34892cc,46800020 -34892d0,46040002 -34892d4,42840 -34892d8,a42821 -34892dc,c53021 -34892e0,90c50002 -34892e4,44853000 -34892ec,468031a0 -34892f0,46023182 -34892f4,46060000 -34892f8,3c058041 -34892fc,c4a69ee0 -3489300,4600303e -3489308,45030005 -348930c,46060001 -3489310,4600000d -3489314,44050000 -3489318,10000006 -348931c,30a600ff -3489320,4600000d -3489324,44050000 -3489328,3c068000 -348932c,a62825 -3489330,30a600ff -3489334,32840 -3489338,a31821 -348933c,3c088041 -3489340,25089e80 -3489344,681821 -3489348,90650000 -348934c,44850000 -3489354,46800020 -3489358,46040002 -348935c,41840 -3489360,641821 -3489364,681821 -3489368,90630000 -348936c,44832000 -3489374,46802120 -3489378,46022082 -348937c,46020000 -3489380,3c038041 -3489384,c4629ee0 -3489388,4600103e -3489390,45030005 -3489394,46020001 +3488df8,a4400038 +3488dfc,27bdffe8 +3488e00,afbf0014 +3488e04,afb00010 +3488e08,afa5001c +3488e0c,10a0000e +3488e10,afa60020 +3488e14,808025 +3488e18,93a40023 +3488e1c,50800002 +3488e20,97a40020 +3488e24,3084ffff +3488e28,c101ee3 +3488e30,c101ed4 +3488e34,402025 +3488e38,94430004 +3488e3c,a6030000 +3488e40,80420006 +3488e44,a2020002 +3488e48,8fbf0014 +3488e4c,8fb00010 +3488e50,3e00008 +3488e54,27bd0018 +3488e58,27bdffe0 +3488e5c,afbf001c +3488e60,afb00018 +3488e64,808025 +3488e68,30e700ff +3488e6c,90c600a5 +3488e70,c1019d9 +3488e74,27a40010 +3488e78,8fa50010 +3488e7c,8fa60014 +3488e80,c10237f +3488e84,2002025 +3488e88,8fbf001c +3488e8c,8fb00018 +3488e90,3e00008 +3488e94,27bd0020 +3488e98,27bdffd8 +3488e9c,afbf0024 +3488ea0,afb10020 +3488ea4,afb0001c +3488ea8,808025 +3488eac,a08825 +3488eb0,3c028041 +3488eb4,8c42a1ac +3488eb8,afa20010 +3488ebc,3825 +3488ec0,a03025 +3488ec4,802825 +3488ec8,c102396 +3488ecc,27a40010 +3488ed0,3c028041 +3488ed4,8c47a20c +3488ed8,2203025 +3488edc,2002825 +3488ee0,c10233d +3488ee4,8fa40010 +3488ee8,8fbf0024 +3488eec,8fb10020 +3488ef0,8fb0001c +3488ef4,3e00008 +3488ef8,27bd0028 +3488efc,27bdffd8 +3488f00,afbf0024 +3488f04,afb10020 +3488f08,afb0001c +3488f0c,808025 +3488f10,9083001d +3488f14,24020011 +3488f18,10620007 +3488f1c,a08825 +3488f20,3c028001 +3488f24,24423268 +3488f28,40f809 +3488f30,10000010 +3488f34,8fbf0024 +3488f38,3c028041 +3488f3c,8c42a1b0 +3488f40,afa20010 +3488f44,3825 +3488f48,a03025 +3488f4c,802825 +3488f50,c102396 +3488f54,27a40010 +3488f58,3c028041 +3488f5c,8c47a20c +3488f60,2203025 +3488f64,2002825 +3488f68,c10233d +3488f6c,8fa40010 +3488f70,8fbf0024 +3488f74,8fb10020 +3488f78,8fb0001c +3488f7c,3e00008 +3488f80,27bd0028 +3488f84,27bdffd8 +3488f88,afbf0024 +3488f8c,afb10020 +3488f90,afb0001c +3488f94,808025 +3488f98,a08825 +3488f9c,3c028041 +3488fa0,8c42a1b4 +3488fa4,afa20010 +3488fa8,2407004f +3488fac,a03025 +3488fb0,802825 +3488fb4,c102396 +3488fb8,27a40010 +3488fbc,3c028041 +3488fc0,8c47a210 +3488fc4,2203025 +3488fc8,2002825 +3488fcc,c10233d +3488fd0,8fa40010 +3488fd4,8fbf0024 +3488fd8,8fb10020 +3488fdc,8fb0001c +3488fe0,3e00008 +3488fe4,27bd0028 +3488fe8,27bdffd8 +3488fec,afbf0024 +3488ff0,afb10020 +3488ff4,afb0001c +3488ff8,808025 +3488ffc,a08825 +3489000,3c028041 +3489004,8c42a1b8 +3489008,afa20010 +348900c,3825 +3489010,a03025 +3489014,802825 +3489018,c102396 +348901c,27a40010 +3489020,3c028041 +3489024,8c47a214 +3489028,2203025 +348902c,2002825 +3489030,c10233d +3489034,8fa40010 +3489038,8fbf0024 +348903c,8fb10020 +3489040,8fb0001c +3489044,3e00008 +3489048,27bd0028 +348904c,27bdffd8 +3489050,afbf0024 +3489054,afb10020 +3489058,afb0001c +348905c,808025 +3489060,a08825 +3489064,3c028041 +3489068,8c42a1bc +348906c,afa20010 +3489070,2407000c +3489074,a03025 +3489078,802825 +348907c,c102396 +3489080,27a40010 +3489084,3c028041 +3489088,8c47a218 +348908c,2203025 +3489090,2002825 +3489094,c10233d +3489098,8fa40010 +348909c,8fbf0024 +34890a0,8fb10020 +34890a4,8fb0001c +34890a8,3e00008 +34890ac,27bd0028 +34890b0,27bdffd0 +34890b4,afbf002c +34890b8,afb10028 +34890bc,afb00024 +34890c0,808025 +34890c4,afa00010 +34890c8,afa00014 +34890cc,9482001c +34890d0,24030001 +34890d4,14430008 +34890d8,a08825 +34890dc,24070015 +34890e0,90a600a5 +34890e4,802825 +34890e8,c1019d9 +34890ec,27a40010 +34890f0,10000012 +34890f4,afa00018 +34890f8,24030007 +34890fc,14430008 +3489100,24030a0c +3489104,24070058 +3489108,90a600a5 +348910c,802825 +3489110,c1019d9 +3489114,27a40010 +3489118,10000008 +348911c,afa00018 +3489120,54430006 +3489124,afa00018 +3489128,3c050010 +348912c,34a5010a +3489130,c1019b1 +3489134,27a40010 +3489138,afa00018 +348913c,8fa50010 +3489140,8fa60014 +3489144,c10237f +3489148,27a40018 +348914c,97a20018 +3489150,10400008 +3489154,2203025 +3489158,3c028041 +348915c,8c47a204 +3489160,2002825 +3489164,c10233d +3489168,8fa40018 +348916c,10000005 +3489170,8fbf002c +3489174,2002825 +3489178,c1022fe +348917c,82040141 +3489180,8fbf002c +3489184,8fb10028 +3489188,8fb00024 +348918c,3e00008 +3489190,27bd0030 +3489194,27bdffd0 +3489198,afbf002c +348919c,afb10028 +34891a0,afb00024 +34891a4,808025 +34891a8,afa00010 +34891ac,afa00014 +34891b0,9482001c +34891b4,10400004 +34891b8,a08825 +34891bc,24030005 +34891c0,54430007 +34891c4,afa00018 +34891c8,24070034 +34891cc,922600a5 +34891d0,2002825 +34891d4,c1019d9 +34891d8,27a40010 +34891dc,afa00018 +34891e0,8fa50010 +34891e4,8fa60014 +34891e8,c10237f +34891ec,27a40018 +34891f0,97a20018 +34891f4,10400008 +34891f8,2203025 +34891fc,3c028041 +3489200,8c47a204 +3489204,2002825 +3489208,c10233d +348920c,8fa40018 +3489210,10000005 +3489214,8fbf002c +3489218,2002825 +348921c,c1022fe +3489220,82040147 +3489224,8fbf002c +3489228,8fb10028 +348922c,8fb00024 +3489230,3e00008 +3489234,27bd0030 +3489238,27bdffd8 +348923c,afbf0024 +3489240,afb10020 +3489244,afb0001c +3489248,808025 +348924c,a08825 +3489250,3c028041 +3489254,8c42a1ac +3489258,afa20010 +348925c,2407003e +3489260,a03025 +3489264,802825 +3489268,c102396 +348926c,27a40010 +3489270,3c028041 +3489274,8c47a204 +3489278,2203025 +348927c,2002825 +3489280,c10233d +3489284,8fa40010 +3489288,8fbf0024 +348928c,8fb10020 +3489290,8fb0001c +3489294,3e00008 +3489298,27bd0028 +348929c,801025 +34892a0,14c00002 +34892a4,a6001b +34892a8,7000d +34892ac,2810 +34892b0,3812 +34892b4,3c03aaaa +34892b8,3463aaab +34892bc,e30019 +34892c0,1810 +34892c4,31882 +34892c8,32040 +34892cc,831821 +34892d0,31840 +34892d4,e31823 +34892d8,44850000 +34892dc,4a10004 +34892e0,468000a1 +34892e4,3c048041 +34892e8,d480a228 +34892ec,46201080 +34892f0,462010a0 +34892f4,44860000 +34892f8,4c10004 +34892fc,46800021 +3489300,3c048041 +3489304,d484a228 +3489308,46240000 +348930c,46200020 +3489310,46001083 +3489314,3c048041 +3489318,c484a21c +348931c,46022101 +3489320,24640001 +3489324,3c068041 +3489328,24c6a1c0 +348932c,32840 +3489330,a32821 +3489334,c52821 +3489338,90a50001 +348933c,44850000 +3489344,46800020 +3489348,46040002 +348934c,42840 +3489350,a42821 +3489354,c53021 +3489358,90c50001 +348935c,44853000 +3489364,468031a0 +3489368,46023182 +348936c,46060000 +3489370,3c058041 +3489374,c4a6a220 +3489378,4600303e +3489380,45030005 +3489384,46060001 +3489388,4600000d +348938c,44050000 +3489390,10000006 +3489394,30a700ff 3489398,4600000d -348939c,44030000 -34893a0,10000006 -34893a4,a0430000 -34893a8,4600000d -34893ac,44030000 -34893b0,3c048000 -34893b4,641825 -34893b8,a0430000 -34893bc,a0470001 -34893c0,3e00008 -34893c4,a0460002 -34893c8,3c028011 -34893cc,3442a5d0 -34893d0,24030140 -34893d4,a4431424 -34893d8,90440032 -34893dc,41840 -34893e0,641821 -34893e4,31900 -34893e8,3e00008 -34893ec,a0430033 -34893f0,24a20002 -34893f4,24a50082 -34893f8,24065700 -34893fc,24070004 -3489400,9443fffe -3489404,50660008 -3489408,24420004 -348940c,50600006 -3489410,24420004 -3489414,94430000 -3489418,2c630004 -348941c,54600001 -3489420,a4470000 -3489424,24420004 -3489428,5445fff6 -348942c,9443fffe -3489430,3e00008 -3489438,27bdffe8 -348943c,afbf0014 -3489440,c1026fa -3489444,24040400 -3489448,3c038041 -348944c,ac62b208 -3489450,3c038041 -3489454,ac62b20c -3489458,8fbf0014 -348945c,3e00008 -3489460,27bd0018 -3489464,80820000 -3489468,10400026 -348946c,24870001 -3489470,3c038041 -3489474,8c68b208 -3489478,25080400 -348947c,3c038041 -3489480,8c63b20c -3489484,5825 -3489488,3c0aff00 -348948c,254a0fff -3489490,30c60fff -3489494,240df000 -3489498,3c098041 -348949c,2529a098 -34894a0,240c0001 -34894a4,68202b -34894a8,54800005 -34894ac,a0620000 -34894b0,11600014 -34894b4,3c028041 -34894b8,3e00008 -34894bc,ac43b20c -34894c0,30a40fff -34894c4,42300 -34894c8,8c620000 -34894cc,4a1024 -34894d0,441025 -34894d4,4d1024 -34894d8,461025 -34894dc,ac620000 -34894e0,24630004 -34894e4,95220004 -34894e8,a22821 -34894ec,24e70001 -34894f0,80e2ffff -34894f4,1440ffeb -34894f8,1805825 -34894fc,3c028041 -3489500,ac43b20c -3489504,3e00008 -348950c,27bdffb8 -3489510,afbf0044 -3489514,afbe0040 -3489518,afb7003c -348951c,afb60038 -3489520,afb50034 -3489524,afb40030 -3489528,afb3002c -348952c,afb20028 -3489530,afb10024 -3489534,afb00020 -3489538,80a825 -348953c,b025 -3489540,9025 -3489544,3c138041 -3489548,2673a098 -348954c,3c178041 -3489550,3c148041 -3489554,3c1e38e3 -3489558,24070012 -348955c,2c03025 -3489560,2602825 -3489564,c101ba6 -3489568,2a02025 -348956c,8ef0b208 -3489570,8e82b20c -3489574,202102b -3489578,50400026 -348957c,26520001 -3489580,37d18e39 -3489584,82020000 -3489588,2002825 -348958c,2442ffe0 -3489590,510018 -3489594,1810 -3489598,31883 -348959c,227c3 -34895a0,641823 -34895a4,14720016 -34895a8,26100004 -34895ac,8ca70000 -34895b0,73b02 -34895b4,510018 -34895b8,1810 -34895bc,31883 -34895c0,641823 -34895c4,330c0 -34895c8,c33021 -34895cc,63040 -34895d0,96630006 -34895d4,afa30018 -34895d8,96630004 -34895dc,afa30014 -34895e0,8ca30000 -34895e4,30630fff -34895e8,afa30010 -34895ec,30e70fff -34895f0,463023 -34895f4,2602825 -34895f8,c101c0e -34895fc,2a02025 -3489600,8e82b20c -3489604,202102b -3489608,5440ffdf -348960c,82020000 -3489610,26520001 -3489614,24020006 -3489618,1642ffcf -348961c,26d60012 -3489620,3c028041 -3489624,8c43b208 -3489628,3c028041 -348962c,ac43b20c -3489630,8fbf0044 -3489634,8fbe0040 -3489638,8fb7003c -348963c,8fb60038 -3489640,8fb50034 -3489644,8fb40030 -3489648,8fb3002c -348964c,8fb20028 -3489650,8fb10024 -3489654,8fb00020 -3489658,3e00008 -348965c,27bd0048 -3489660,3c028041 -3489664,24030001 -3489668,ac43b214 -348966c,3c038041 -3489670,8c62b218 -3489674,2c440006 -3489678,50800001 -348967c,24020005 -3489680,3e00008 -3489684,ac62b218 -3489688,27bdffb8 -348968c,afbf0044 -3489690,afbe0040 -3489694,afb6003c -3489698,afb50038 -348969c,afb40034 -34896a0,afb30030 -34896a4,afb2002c -34896a8,afb10028 -34896ac,afb00024 -34896b0,3a0f025 -34896b4,3c028041 -34896b8,9442b210 -34896bc,10400133 -34896c0,3a0a825 -34896c4,3c02801d -34896c8,3442aa30 -34896cc,8c42066c -34896d0,3c033000 -34896d4,24630483 -34896d8,431024 -34896dc,1440012b -34896e0,808025 -34896e4,3c02801c -34896e8,344284a0 -34896ec,8c430008 -34896f0,3c02800f -34896f4,8c4213ec -34896f8,54620125 -34896fc,2a0e825 -3489700,3c028011 -3489704,3442a5d0 -3489708,8c47135c -348970c,14e0011f -3489710,3c02800e -3489714,3442f1b0 -3489718,8c420000 -348971c,30420020 -3489720,1440011a -3489724,3c028041 -3489728,8c43b214 -348972c,24020001 -3489730,1062000a -3489734,3c02801c -3489738,344284a0 -348973c,3c030001 -3489740,431021 -3489744,94430934 -3489748,24020006 -348974c,54620110 -3489750,2a0e825 -3489754,10000009 -3489758,3c038041 -348975c,344284a0 -3489760,3c030001 -3489764,431021 -3489768,94430934 -348976c,24020006 -3489770,14620007 -3489774,3c028041 -3489778,3c038041 -348977c,8c62b218 -3489780,3042001f -3489784,ac62b218 -3489788,10000022 -348978c,241300ff -3489790,8c42b218 -3489794,2c430006 -3489798,1060000a -348979c,2c43006a -34897a0,29a00 -34897a4,2629823 -34897a8,3c02cccc -34897ac,3442cccd -34897b0,2620019 -34897b4,9810 -34897b8,139882 -34897bc,10000015 -34897c0,327300ff -34897c4,14600013 -34897c8,241300ff -34897cc,2c4300ba -34897d0,1060000b -34897d4,21a00 -34897d8,621023 -34897dc,24429769 -34897e0,3c03cccc -34897e4,3463cccd -34897e8,430019 -34897ec,1010 -34897f0,29982 -34897f4,139827 -34897f8,10000006 -34897fc,327300ff -3489800,3c028041 -3489804,ac40b214 -3489808,3c028041 -348980c,100000df -3489810,ac40b218 -3489814,3c038041 -3489818,8c62b218 -348981c,24420001 -3489820,ac62b218 -3489824,3c028011 -3489828,3442a5d0 -348982c,8c4808c4 -3489830,19000011 -3489834,1001025 -3489838,e05025 -348983c,3c056666 -3489840,24a56667 -3489844,254a0001 -3489848,401825 -348984c,450018 -3489850,2010 -3489854,42083 -3489858,217c3 -348985c,2863000a -3489860,1060fff8 -3489864,821023 -3489868,15400005 -348986c,3c028041 -3489870,10000002 -3489874,240a0001 -3489878,240a0001 -348987c,3c028041 -3489880,9445b1b2 -3489884,18a00010 -3489888,a01025 -348988c,3c066666 -3489890,24c66667 -3489894,24e70001 -3489898,401825 -348989c,460018 -34898a0,2010 -34898a4,42083 -34898a8,217c3 -34898ac,2863000a -34898b0,1060fff8 -34898b4,821023 -34898b8,54e00005 -34898bc,1473821 -34898c0,10000002 -34898c4,24070001 -34898c8,24070001 -34898cc,1473821 -34898d0,24f40001 -34898d4,3c028041 -34898d8,2442a098 -34898dc,94430004 -34898e0,740018 -34898e4,2012 -34898e8,3c038041 -34898ec,2463a078 -34898f0,94660004 -34898f4,862021 -34898f8,497c2 -34898fc,2449021 -3489900,129043 -3489904,129023 -3489908,265200a0 -348990c,94420006 -3489910,44820000 -3489918,46800021 -348991c,3c028041 -3489920,d4469ef0 -3489924,46260002 -3489928,3c028041 -348992c,d4429ef8 -3489930,46201001 -3489934,3c028041 -3489938,d4449f00 -348993c,46240000 -3489940,4620000d -3489944,44060000 -3489948,94620006 -348994c,44820000 -3489954,46800021 -3489958,46260002 -348995c,46201081 -3489960,3c028041 -3489964,d4409f08 -3489968,46201080 -348996c,46241080 -3489970,4620100d -3489974,44110000 -3489978,24e20009 -348997c,210c2 -3489980,210c0 -3489984,3a2e823 -3489988,27a40020 -348998c,941021 -3489990,19400015 -3489994,a0400000 -3489998,2549ffff -348999c,894821 -34899a0,806025 -34899a4,3c0b6666 -34899a8,256b6667 -34899ac,10b0018 -34899b0,1810 -34899b4,31883 -34899b8,817c3 -34899bc,621823 -34899c0,31080 -34899c4,431021 -34899c8,21040 -34899cc,1021023 -34899d0,24420030 -34899d4,a1220000 -34899d8,604025 -34899dc,1201025 -34899e0,144cfff2 -34899e4,2529ffff -34899e8,8a1021 -34899ec,2403002f -34899f0,a0430000 -34899f4,147102a -34899f8,10400012 -34899fc,873821 -3489a00,8a5021 -3489a04,3c086666 -3489a08,25086667 -3489a0c,a80018 -3489a10,1810 -3489a14,31883 -3489a18,517c3 -3489a1c,621823 -3489a20,31080 -3489a24,431021 -3489a28,21040 -3489a2c,a21023 -3489a30,24420030 -3489a34,a0e20000 -3489a38,24e7ffff -3489a3c,14eafff3 -3489a40,602825 -3489a44,8e020008 -3489a48,24430008 -3489a4c,ae030008 -3489a50,3c03de00 -3489a54,ac430000 -3489a58,3c038041 -3489a5c,2463a0e8 -3489a60,ac430004 -3489a64,8e020008 -3489a68,24430008 -3489a6c,ae030008 -3489a70,3c03e700 -3489a74,ac430000 -3489a78,ac400004 -3489a7c,8e020008 -3489a80,24430008 -3489a84,ae030008 -3489a88,3c03fc11 -3489a8c,34639623 -3489a90,ac430000 -3489a94,3c03ff2f -3489a98,3463ffff -3489a9c,ac430004 -3489aa0,8e030008 -3489aa4,24620008 -3489aa8,ae020008 -3489aac,3c16fa00 -3489ab0,ac760000 -3489ab4,3c02dad3 -3489ab8,24420b00 -3489abc,2621025 -3489ac0,ac620004 -3489ac4,c102519 -3489ac8,2402825 -3489acc,3c028041 -3489ad0,9442a09c -3489ad4,540018 -3489ad8,a012 -3489adc,292a021 -3489ae0,8e020008 -3489ae4,24430008 -3489ae8,ae030008 -3489aec,ac560000 -3489af0,3c03f4ec -3489af4,24633000 -3489af8,2639825 -3489afc,ac530004 -3489b00,3c028041 -3489b04,8c46b218 -3489b08,63042 -3489b0c,24070001 -3489b10,30c6000f -3489b14,3c128041 -3489b18,2645a078 -3489b1c,c101ba6 -3489b20,2002025 -3489b24,2645a078 -3489b28,94a20006 -3489b2c,afa20018 -3489b30,94a20004 -3489b34,afa20014 -3489b38,afb10010 -3489b3c,2803825 -3489b40,3025 -3489b44,c101c0e -3489b48,2002025 -3489b4c,c102543 -3489b50,2002025 -3489b54,8e020008 -3489b58,24430008 -3489b5c,ae030008 -3489b60,3c03e900 -3489b64,ac430000 -3489b68,ac400004 -3489b6c,8e020008 -3489b70,24430008 -3489b74,ae030008 -3489b78,3c03df00 -3489b7c,ac430000 -3489b80,ac400004 -3489b84,10000002 -3489b88,2a0e825 -3489b8c,2a0e825 -3489b90,3c0e825 -3489b94,8fbf0044 -3489b98,8fbe0040 -3489b9c,8fb6003c -3489ba0,8fb50038 -3489ba4,8fb40034 -3489ba8,8fb30030 -3489bac,8fb2002c -3489bb0,8fb10028 -3489bb4,8fb00024 -3489bb8,3e00008 -3489bbc,27bd0048 -3489bc0,3c028040 -3489bc4,a040307c -3489bc8,3c028040 -3489bcc,3e00008 -3489bd0,ac403080 -3489bd4,3c038041 -3489bd8,3c028050 -3489bdc,24420000 -3489be0,3e00008 -3489be4,ac62b21c -3489be8,3082000f -3489bec,10400009 -3489bf0,3c038041 -3489bf4,417c3 -3489bf8,21702 -3489bfc,821821 -3489c00,3063000f -3489c04,431023 -3489c08,24420010 -3489c0c,822021 -3489c10,3c038041 -3489c14,8c62b21c -3489c18,442021 -3489c1c,3e00008 -3489c20,ac64b21c -3489c24,27bdffe8 -3489c28,afbf0014 -3489c2c,afb00010 -3489c30,808025 -3489c34,c1026fa -3489c38,8c840008 -3489c3c,402025 -3489c40,ae020000 -3489c44,8e060008 -3489c48,3c028000 -3489c4c,24420df0 -3489c50,40f809 -3489c54,8e050004 -3489c58,8fbf0014 -3489c5c,8fb00010 -3489c60,3e00008 -3489c64,27bd0018 -3489c68,33c2 -3489c6c,664399c4 -3489c70,cc45ffc6 -3489c74,ff47ffc8 -3489c78,ff49e0ca -3489c7c,c24ba3cc -3489c80,854d660d -3489c84,440f2200 -3489c88,85d1a352 -3489c8c,c2d3e045 -3489c90,1010101 -3489c94,1010101 -3489c98,1010101 -3489c9c,1010101 -3489ca0,1010101 -3489cbc,1010000 -3489cc4,1010101 -3489cc8,1000101 -3489ccc,10101 -3489cd0,10000 -3489cd4,2b242525 -3489cd8,26262626 -3489cdc,27272727 -3489ce0,27272727 -3489ce4,500080d -3489ce8,1051508 -3489cec,d01052a -3489cf0,80d0127 -3489cf4,f080b01 -3489cf8,4d510b02 -3489d00,97ff6350 -3489d04,45ff5028 -3489d08,57456397 -3489d0c,ff5e45ff -3489d10,9f006545 -3489d14,ff63ff6c -3489d18,45fff063 -3489d1c,7345ffff -3489d20,ff503aff -3489d24,ffff573a -3489d28,ffffff5e -3489d2c,3affffff -3489d30,653affff -3489d34,ff6c3aff -3489d38,ffff733a -3489d3c,5a0c00 -3489d40,720c0096 -3489d44,c009618 -3489d48,1652a00 -3489d4c,4e2a005a -3489d50,2a000000 -3489d54,c004e00 -3489d58,c015a00 -3489d5c,c026600 -3489d60,c037200 -3489d64,c047e00 -3489d68,c058a00 -3489d6c,c064e0c -3489d70,75a0c -3489d74,c09660c -3489d78,a720c -3489d7c,c0c7e0c -3489d80,c0d8a0c -3489d84,c0e4e18 -3489d88,c0f5a18 -3489d8c,c106618 -3489d90,c117218 -3489d94,c127e18 -3489d98,c138a18 -3489d9c,ffff -3489da0,ffff -3489da4,ffff -3489da8,ffff -3489dac,ffff -3489db0,ffff -3489db4,ffff -3489db8,ffff -3489dbc,ffff -3489dc0,ffff -3489dc4,ffff -3489dc8,ffff -3489dcc,ffff -3489dd0,ffff -3489dd4,c3b7e2a -3489dd8,c3c8a2a -3489ddc,c3d962a -3489de0,ffff -3489de4,c3e7e36 -3489de8,b3f8b37 -3489dec,b409737 -3489df0,ffff -3489df4,c417e42 -3489df8,c428a42 -3489dfc,c439642 -3489e00,ffff -3489e04,c447e4f -3489e08,c458a4f -3489e0c,c46964f -3489e10,ffff -3489e14,c149600 -3489e18,ffff -3489e1c,2c061b31 -3489e20,2c072931 -3489e24,2c083731 -3489e28,2a096f51 -3489e2c,2c0a722a -3489e30,ffff -3489e34,2c00370a -3489e38,2c01371a -3489e3c,2c022922 -3489e40,2c031b1a -3489e44,2c041b0a -3489e48,2c052902 -3489e4c,ffff -3489e50,ffff -3489e54,8040a0b8 -3489e58,8040a0a8 -3489e5c,8040a038 -3489e60,c8ff6482 -3489e64,82ffff64 -3489e68,64ff5aff -3489e6c,bd1400 -3489e70,aa0200 -3489e74,bd1300 -3489e78,15c6300 -3489e7c,de2f00 -3489e80,e01010e0 -3489e84,e01010e0 -3489e88,1010e0e0 -3489e8c,1010e0e0 -3489e90,10e0e010 -3489e94,10000000 -3489e98,4d510000 -3489e9c,4e6f726d -3489ea0,616c0000 -3489ea4,bdcccccd -3489ea8,3dcccccd -3489eac,43510000 -3489eb0,41100000 -3489eb4,4f000000 -3489eb8,42080000 -3489ebc,c20c0000 -3489ec0,420c0000 -3489ec4,3f800000 -3489ec8,3f000000 -3489ecc,41c80000 -3489ed0,3fa00000 -3489ed4,40000000 -3489ed8,40200000 -3489edc,3f800000 -3489ee0,4f000000 -3489ee8,41f00000 -3489ef0,3ff80000 -3489ef8,406e0000 -3489f00,3ff00000 -3489f08,40080000 -3489f10,80409c68 -3489f14,10203 -3489f18,4050607 -3489f1c,ffffffff -3489f20,ffff0000 -3489f24,ff00ff -3489f28,3c000064 -3489f2c,ffff8200 -3489f30,c832ffc8 -3489f34,c8000000 -3489f38,104465 -3489f3c,6b750000 -3489f44,110446f -3489f48,646f6e67 -3489f4c,6f000000 -3489f50,2104a61 -3489f54,62750000 -3489f5c,3d0466f -3489f60,72657374 -3489f68,4d04669 -3489f6c,72650000 -3489f74,5d05761 -3489f78,74657200 -3489f80,7d05368 -3489f84,61646f77 -3489f8c,6d05370 -3489f90,69726974 -3489f98,890426f -3489f9c,74570000 -3489fa4,9104963 -3489fa8,65000000 -3489fb0,ca04765 -3489fb4,7275646f -3489fbc,b804754 -3489fc0,47000000 -3489fc8,dc04761 -3489fcc,6e6f6e00 -3489fd4,2 -3489fdc,3f800000 -3489fe8,1 -3489fec,30006 -3489ff0,70009 -3489ff4,b000e -3489ff8,f0010 -3489ffc,110019 -348a000,1a002b -348a004,2c002e -348a008,300032 -348a00c,35003c -348a010,400041 -348a014,460051 -348a018,540109 -348a01c,10b010c -348a020,10e010f -348a024,1100113 -348a02c,100010 -348a030,a0301 -348a034,1000000 -348a03c,100010 -348a040,20002 -348a044,2000000 -348a04c,80008 -348a050,a0301 -348a054,1000000 -348a05c,100010 -348a060,30301 -348a064,1000000 -348a06c,100018 -348a070,10301 -348a074,1000000 -348a07c,100010 -348a080,100301 -348a084,1000000 -348a08c,200020 -348a090,10302 -348a094,2000000 -348a09c,8000e -348a0a0,5f0301 -348a0a4,1000000 -348a0ac,180018 -348a0b0,140003 -348a0b4,4000000 -348a0bc,200020 -348a0c0,5a0003 -348a0c4,4000000 -348a0cc,100010 -348a0d0,60301 -348a0d4,1000000 -348a0dc,100010 -348a0e0,30003 -348a0e4,4000000 -348a0e8,e7000000 -348a0f0,d9000000 -348a0f8,ed000000 -348a0fc,5003c0 -348a100,ef002cf0 -348a104,504244 -348a108,df000000 -348a124,4d8e0032 -348a128,ce2001 -348a12c,80407d1c -348a130,804077ac -348a134,ffffffff -348a138,4d8c0034 -348a13c,bb1201 -348a140,80407b54 -348a144,804077ac -348a148,ffffffff -348a14c,4d090033 -348a150,d92801 -348a154,80407b54 -348a158,804077ac -348a15c,ffffffff -348a160,53030031 -348a164,e93500 -348a168,80407b54 -348a16c,804077ac -348a170,ffffffff -348a174,53060030 -348a178,e73300 -348a17c,80407b54 -348a180,804077ac -348a184,ffffffff -348a188,530e0035 -348a18c,e83400 -348a190,80407b54 -348a194,804077ac -348a198,ffffffff -348a19c,4d000037 -348a1a0,c71b01 -348a1a4,80407b54 -348a1a8,804077ac -348a1ac,ffffffff -348a1b0,530a0036 -348a1b4,dd2d00 -348a1b8,80407b54 -348a1bc,804077ac -348a1c0,ffffffff -348a1c4,530b004f -348a1c8,dd2e00 -348a1cc,80407b54 -348a1d0,804077ac -348a1d4,ffffffff -348a1d8,530f0039 -348a1dc,ea3600 -348a1e0,80407b54 -348a1e4,804077ac -348a1e8,ffffffff -348a1ec,53230069 -348a1f0,ef3b00 -348a1f4,80407b54 -348a1f8,80407a10 -348a1fc,ffffffff -348a200,5308003a -348a204,de2f00 -348a208,80407b54 -348a20c,804077ac -348a210,ffffffff -348a214,53110038 -348a218,f64100 -348a21c,80407b54 -348a220,804077ac -348a224,ffffffff -348a228,532f0002 -348a22c,1095e00 -348a230,80407b54 -348a234,804077ac -348a238,ffffffff -348a23c,53140042 -348a240,c60100 -348a244,80407b54 -348a248,804077ac -348a24c,ffffffff -348a250,53150043 -348a254,eb3800 -348a258,80407b54 -348a25c,804077ac -348a260,ffffffff -348a264,53160044 -348a268,eb3700 -348a26c,80407b54 -348a270,804077ac -348a274,ffffffff -348a278,53170045 -348a27c,eb3900 -348a280,80407b54 -348a284,804077ac -348a288,ffffffff -348a28c,53180046 -348a290,c60100 -348a294,80407b54 -348a298,804077ac -348a29c,ffffffff -348a2a0,531a0098 -348a2a4,df3000 -348a2a8,80407b54 -348a2ac,804077ac -348a2b0,ffffffff -348a2b4,531b0099 -348a2b8,10b4500 -348a2bc,80407d5c -348a2c0,804077ac -348a2c4,ffffffff -348a2c8,53100048 -348a2cc,f33e01 -348a2d0,80407b54 -348a2d4,804077ac -348a2d8,ffffffff -348a2dc,53250010 -348a2e0,1364f00 -348a2e4,80407b54 -348a2e8,804077ac -348a2ec,ffffffff -348a2f0,53260011 -348a2f4,1353200 -348a2f8,80407b54 -348a2fc,804077ac -348a300,ffffffff -348a304,5322000b -348a308,1094400 -348a30c,80407b54 -348a310,804077ac -348a314,ffffffff -348a318,53240012 -348a31c,1343100 -348a320,80407b54 -348a324,804077ac -348a328,ffffffff -348a32c,53270013 -348a330,1375000 -348a334,80407b54 -348a338,804077ac -348a33c,ffffffff -348a340,532b0017 -348a344,1385100 -348a348,80407b54 -348a34c,804077ac -348a350,ffffffff -348a354,532d9001 -348a358,da2900 -348a35c,80407b54 -348a360,804077ac -348a364,ffffffff -348a368,532e000b -348a36c,1094400 -348a370,80407b54 -348a374,804077ac -348a378,ffffffff -348a37c,53300003 -348a380,1415400 -348a384,80407b54 -348a388,804077ac -348a38c,ffffffff -348a390,53310004 -348a394,1405300 -348a398,80407b54 -348a39c,804077ac -348a3a0,ffffffff -348a3a4,53320005 -348a3a8,f54000 -348a3ac,80407b54 -348a3b0,804077ac -348a3b4,ffffffff -348a3b8,53330008 -348a3bc,1435600 -348a3c0,80407b54 -348a3c4,804077ac -348a3c8,ffffffff -348a3cc,53340009 -348a3d0,1465700 -348a3d4,80407b54 -348a3d8,804077ac -348a3dc,ffffffff -348a3e0,5335000d -348a3e4,1495a00 -348a3e8,80407b54 -348a3ec,804077ac -348a3f0,ffffffff -348a3f4,5336000e -348a3f8,13f5200 -348a3fc,80407b54 -348a400,804077ac -348a404,ffffffff -348a408,5337000a -348a40c,1425500 -348a410,80407b54 -348a414,804077ac -348a418,ffffffff -348a41c,533b00a4 -348a420,18d7400 -348a424,80407b54 -348a428,804077ac -348a42c,ffffffff -348a430,533d004b -348a434,f84300 -348a438,80407b54 -348a43c,804077ac -348a440,ffffffff -348a444,533e004c -348a448,cb1d01 -348a44c,80407b54 -348a450,804077ac -348a454,ffffffff -348a458,533f004d -348a45c,dc2c01 -348a460,80407b54 -348a464,804077ac -348a468,ffffffff -348a46c,5340004e -348a470,ee3a00 -348a474,80407b54 -348a478,804077ac -348a47c,ffffffff -348a480,53420050 -348a484,f23c00 -348a488,80407b54 -348a48c,804077ac -348a490,ffffffff -348a494,53430051 -348a498,f23d00 -348a49c,80407b54 -348a4a0,804077ac -348a4a4,ffffffff -348a4a8,53450053 -348a4ac,1184700 -348a4b0,80407b54 -348a4b4,804077ac -348a4b8,ffffffff -348a4bc,53460054 -348a4c0,1575f00 -348a4c4,80407b54 -348a4c8,804077ac -348a4cc,ffffffff -348a4d0,534b0056 -348a4d4,be1600 -348a4d8,80407b54 -348a4dc,804077ac -348a4e0,ffffffff -348a4e4,534c0057 -348a4e8,be1700 -348a4ec,80407b54 -348a4f0,804077ac -348a4f4,ffffffff -348a4f8,534d0058 -348a4fc,bf1800 -348a500,80407b54 -348a504,804077ac -348a508,ffffffff -348a50c,534e0059 -348a510,bf1900 -348a514,80407b54 -348a518,804077ac -348a51c,ffffffff -348a520,534f005a -348a524,bf1a00 -348a528,80407b54 -348a52c,804077ac -348a530,ffffffff -348a534,5351005b -348a538,12d4900 -348a53c,80407b54 -348a540,804077ac -348a544,ffffffff -348a548,5352005c -348a54c,12d4a00 -348a550,80407b54 -348a554,804077ac -348a558,ffffffff -348a55c,535300cd -348a560,db2a00 -348a564,80407b54 -348a568,804077ac -348a56c,ffffffff -348a570,535400ce -348a574,db2b00 -348a578,80407b54 -348a57c,804077ac -348a580,ffffffff -348a584,536f0068 -348a588,c82100 -348a58c,80407b54 -348a590,804077ac -348a594,ffffffff -348a598,5370007b -348a59c,d72400 -348a5a0,80407b54 -348a5a4,804077ac -348a5a8,ffffffff -348a5ac,5341004a -348a5b0,10e4600 -348a5b4,80407b54 -348a5b8,8040798c -348a5bc,ffffffff -348a5c0,4d5800dc -348a5c4,1194801 -348a5c8,80407d38 -348a5cc,804077ac -348a5d0,ffffffff -348a5d4,3d7200c6 -348a5d8,bd1301 -348a5dc,80407b54 -348a5e0,804077b4 -348a5e4,ffffffff -348a5e8,3e7a00c2 -348a5ec,bd1401 -348a5f0,80407b54 -348a5f4,804077b4 -348a5f8,ffffffff -348a5fc,537400c7 -348a600,b90a02 -348a604,80407b54 -348a608,804077ac -348a60c,ffffffff -348a610,53750067 -348a614,b80b01 -348a618,80407b54 -348a61c,804077ac -348a620,ffffffff -348a624,53760066 -348a628,c81c01 -348a62c,80407b54 -348a630,804077ac -348a634,ffffffff -348a638,53770060 -348a63c,aa0203 -348a640,80407b54 -348a644,804077ac -348a648,ffffffff -348a64c,53780052 -348a650,cd1e01 -348a654,80407b54 -348a658,804077ac -348a65c,ffffffff -348a660,53790052 -348a664,cd1f01 -348a668,80407b54 -348a66c,804077ac -348a670,ffffffff -348a674,5356005e -348a678,d12200 -348a67c,80407b54 -348a680,804079e4 -348a684,1ffff -348a688,5357005f -348a68c,d12300 -348a690,80407b54 -348a694,804079e4 -348a698,2ffff -348a69c,5321009a -348a6a0,da2900 -348a6a4,80407b54 -348a6a8,804077ac -348a6ac,ffffffff -348a6b0,4d830055 -348a6b4,b70901 -348a6b8,80407b54 -348a6bc,804077ac -348a6c0,ffffffff -348a6c4,4d9200e6 -348a6c8,d82501 -348a6cc,80407d00 -348a6d0,804077ac -348a6d4,ffffffff -348a6d8,4d9300e6 -348a6dc,d82601 -348a6e0,80407d00 -348a6e4,804077ac -348a6e8,ffffffff -348a6ec,4d9400e6 -348a6f0,d82701 -348a6f4,80407d00 -348a6f8,804077ac -348a6fc,ffffffff -348a700,4d84006f -348a704,17f6d01 -348a708,80407b54 -348a70c,804077ac -348a710,ffffffff -348a714,4d8500cc -348a718,17f6e01 -348a71c,80407b54 -348a720,804077ac -348a724,ffffffff -348a728,4d8600f0 -348a72c,17f6f01 -348a730,80407b54 -348a734,804077ac -348a738,ffffffff -348a73c,3d7200c6 -348a740,bd1301 -348a744,80407b54 -348a748,804077b4 -348a74c,ffffffff -348a750,53820098 -348a754,df3000 -348a758,80407b54 -348a75c,804077ac -348a760,ffffffff -348a764,53280014 -348a768,1505b00 -348a76c,80407b54 -348a770,804077ac -348a774,ffffffff -348a778,53290015 -348a77c,1515c00 -348a780,80407b54 -348a784,804077ac -348a788,ffffffff -348a78c,532a0016 -348a790,1525d00 -348a794,80407b54 -348a798,804077ac -348a79c,ffffffff -348a7a0,53500079 -348a7a4,1475800 -348a7a8,80407b54 -348a7ac,804077ac -348a7b0,ffffffff -348a7b4,4d8700f1 -348a7b8,17f7101 -348a7bc,80407b54 -348a7c0,804077ac -348a7c4,ffffffff -348a7c8,4d8800f2 -348a7cc,17f7201 -348a7d0,80407b54 -348a7d4,804077ac -348a7d8,ffffffff -348a7dc,533d000c -348a7e0,f84300 -348a7e4,80407b54 -348a7e8,804078b4 -348a7ec,ffffffff -348a7f0,53040070 -348a7f4,1586000 -348a7f8,80407b54 -348a7fc,804077ac -348a800,ffffffff -348a804,530c0071 -348a808,1586100 -348a80c,80407b54 -348a810,804077ac -348a814,ffffffff -348a818,53120072 -348a81c,1586200 -348a820,80407b54 -348a824,804077ac -348a828,ffffffff -348a82c,5b7100b4 -348a830,15c6301 -348a834,80407b54 -348a838,804077ac -348a83c,ffffffff -348a840,530500ad -348a844,15d6400 -348a848,80407b54 -348a84c,804077ac -348a850,ffffffff -348a854,530d00ae -348a858,15d6500 -348a85c,80407b54 -348a860,804077ac -348a864,ffffffff -348a868,531300af -348a86c,15d6600 -348a870,80407b54 -348a874,804077ac -348a878,ffffffff -348a87c,53470007 -348a880,17b6c00 -348a884,80407b54 -348a888,804077ac -348a88c,ffffffff -348a890,53480007 -348a894,17b6c00 -348a898,80407b54 -348a89c,804077ac -348a8a0,ffffffff -348a8a4,4d8a0037 -348a8a8,c71b01 -348a8ac,80407b54 -348a8b0,804077ac -348a8b4,ffffffff -348a8b8,4d8b0037 -348a8bc,c71b01 -348a8c0,80407b54 -348a8c4,804077ac -348a8c8,ffffffff -348a8cc,4d8c0034 -348a8d0,bb1201 -348a8d4,80407b54 -348a8d8,804077ac -348a8dc,ffffffff -348a8e0,4d8d0034 -348a8e4,bb1201 -348a8e8,80407b54 -348a8ec,804077ac -348a8f0,ffffffff -348a8f4,4d020032 -348a8f8,ce2001 -348a8fc,80407d1c -348a900,804077ac -348a904,ffffffff -348a908,4d8f0032 -348a90c,ce2001 -348a910,80407d1c -348a914,804077ac -348a918,ffffffff -348a91c,4d900032 -348a920,ce2001 -348a924,80407d1c -348a928,804077ac -348a92c,ffffffff -348a930,4d910032 -348a934,ce2001 -348a938,80407d1c -348a93c,804077ac -348a940,ffffffff -348a944,4d9500dc -348a948,1194801 -348a94c,80407d38 -348a950,804077ac -348a954,ffffffff -348a958,4d960033 -348a95c,d92801 -348a960,80407b54 -348a964,804077ac -348a968,ffffffff -348a96c,4d970033 -348a970,d92801 -348a974,80407b54 -348a978,804077ac -348a97c,ffffffff -348a980,53190047 -348a984,f43f00 -348a988,80407b54 -348a98c,804077ac -348a990,ffffffff -348a994,531d007a -348a998,1746800 -348a99c,80407b54 -348a9a0,804077ac -348a9a4,ffffffff -348a9a8,531c005d -348a9ac,1736700 -348a9b0,80407b54 -348a9b4,804077ac -348a9b8,ffffffff -348a9bc,53200097 -348a9c0,1766a00 -348a9c4,80407b54 -348a9c8,804077ac -348a9cc,ffffffff -348a9d0,531e00f9 -348a9d4,1767000 -348a9d8,80407b54 -348a9dc,804077ac -348a9e0,ffffffff -348a9e4,537700f3 -348a9e8,aa0201 -348a9ec,80407b54 -348a9f0,804077ac -348a9f4,ffffffff -348a9f8,4d8400f4 -348a9fc,17f6d01 -348aa00,80407b54 -348aa04,804077ac -348aa08,ffffffff -348aa0c,4d8500f5 -348aa10,17f6e01 -348aa14,80407b54 -348aa18,804077ac -348aa1c,ffffffff -348aa20,4d8600f6 -348aa24,17f6f01 -348aa28,80407b54 -348aa2c,804077ac -348aa30,ffffffff -348aa34,4d8700f7 -348aa38,17f7101 -348aa3c,80407b54 -348aa40,804077ac -348aa44,ffffffff -348aa48,537a00fa -348aa4c,bd1401 -348aa50,80407b54 -348aa54,804077b4 -348aa58,ffffffff -348aa5c,53980090 -348aa60,c71b01 -348aa64,80407b54 -348aa68,804077ac -348aa6c,ffffffff -348aa70,53990091 -348aa74,c71b01 -348aa78,80407b54 -348aa7c,804077ac -348aa80,ffffffff -348aa84,539a00a7 -348aa88,bb1201 -348aa8c,80407b54 -348aa90,804077ac -348aa94,ffffffff -348aa98,539b00a8 -348aa9c,bb1201 -348aaa0,80407b54 -348aaa4,804077ac -348aaa8,ffffffff -348aaac,5349006c -348aab0,17b7300 -348aab4,80407b54 -348aab8,804077ac -348aabc,ffffffff -348aac0,53419002 -348aac8,80407b54 -348aacc,804079b0 -348aad0,ffffffff -348ab10,ffffffff -348ab14,dd2d00 -348ab18,80407b5c -348ab1c,804077ac -348ab20,ffffffff -348ab24,ffffffff -348ab28,1475800 -348ab2c,80407b70 -348ab30,804077ac -348ab34,ffffffff -348ab38,ffffffff -348ab3c,bf1800 -348ab40,80407b9c -348ab44,804077ac -348ab48,ffffffff -348ab4c,ffffffff -348ab50,e93500 -348ab54,80407bc8 -348ab58,804077ac -348ab5c,ffffffff -348ab60,ffffffff -348ab64,e73300 -348ab68,80407bf0 -348ab6c,804077ac -348ab70,ffffffff -348ab74,ffffffff -348ab78,d12200 -348ab7c,80407c20 -348ab80,804077ac -348ab84,ffffffff -348ab88,ffffffff -348ab8c,db2a00 -348ab90,80407c50 -348ab94,804077ac -348ab98,ffffffff -348ab9c,ffffffff -348aba0,bb1201 -348aba4,80407c68 -348aba8,804077ac -348abac,ffffffff -348abb0,ffffffff -348abb4,c71b01 -348abb8,80407c84 -348abbc,804077ac -348abc0,ffffffff -348abc4,ffffffff -348abc8,d92800 -348abcc,80407cb0 -348abd0,804077ac -348abd4,ffffffff -348abd8,ffffffff -348abdc,cd1e00 -348abe0,80407ca0 -348abe4,804077ac -348abe8,ffffffff -348abec,ffffffff -348abf0,10e4600 -348abf4,80407ce0 -348abf8,804077ac -348abfc,ffffffff -348ac00,53410043 -348ac04,c60100 -348ac08,80407b54 -348ac0c,804078c0 -348ac10,15ffff -348ac14,53410044 -348ac18,c60100 -348ac1c,80407b54 -348ac20,804078c0 -348ac24,16ffff -348ac28,53410045 -348ac2c,c60100 -348ac30,80407b54 -348ac34,804078c0 -348ac38,17ffff -348ac3c,53410046 -348ac40,1776b00 -348ac44,80407b54 -348ac48,804078c0 -348ac4c,18ffff -348ac50,53410047 -348ac54,f43f00 -348ac58,80407b54 -348ac5c,804078c0 -348ac60,19ffff -348ac64,5341005d -348ac68,1736700 -348ac6c,80407b54 -348ac70,804078c0 -348ac74,1cffff -348ac78,5341007a -348ac7c,1746800 -348ac80,80407b54 -348ac84,804078c0 -348ac88,1dffff -348ac8c,534100f9 -348ac90,1767000 -348ac94,80407b54 -348ac98,804078c0 -348ac9c,1effff -348aca0,53410097 -348aca4,1766a00 -348aca8,80407b54 -348acac,804078c0 -348acb0,20ffff -348acb4,53410006 -348acb8,b90a02 -348acbc,80407b54 -348acc0,804078f8 -348acc4,10003 -348acc8,5341001c -348accc,b90a02 -348acd0,80407b54 -348acd4,804078f8 -348acd8,10004 -348acdc,5341001d -348ace0,b90a02 -348ace4,80407b54 -348ace8,804078f8 -348acec,10005 -348acf0,5341001e -348acf4,b90a02 -348acf8,80407b54 -348acfc,804078f8 -348ad00,10006 -348ad04,5341002a -348ad08,b90a02 -348ad0c,80407b54 -348ad10,804078f8 -348ad14,10007 -348ad18,53410061 -348ad1c,b90a02 -348ad20,80407b54 -348ad24,804078f8 -348ad28,1000a -348ad2c,53410062 -348ad30,b80b01 -348ad34,80407b54 -348ad38,804078f8 -348ad3c,20000 -348ad40,53410063 -348ad44,b80b01 -348ad48,80407b54 -348ad4c,804078f8 -348ad50,20001 -348ad54,53410064 -348ad58,b80b01 -348ad5c,80407b54 -348ad60,804078f8 -348ad64,20002 -348ad68,53410065 -348ad6c,b80b01 -348ad70,80407b54 -348ad74,804078f8 -348ad78,20003 -348ad7c,5341007c -348ad80,b80b01 -348ad84,80407b54 -348ad88,804078f8 -348ad8c,20004 -348ad90,5341007d -348ad94,b80b01 -348ad98,80407b54 -348ad9c,804078f8 -348ada0,20005 -348ada4,5341007e -348ada8,b80b01 -348adac,80407b54 -348adb0,804078f8 -348adb4,20006 -348adb8,5341007f -348adbc,b80b01 -348adc0,80407b54 -348adc4,804078f8 -348adc8,20007 -348adcc,534100a2 -348add0,b80b01 -348add4,80407b54 -348add8,804078f8 -348addc,20008 -348ade0,53410087 -348ade4,b80b01 -348ade8,80407b54 -348adec,804078f8 -348adf0,20009 -348adf4,53410088 -348adf8,c81c01 -348adfc,80407b54 -348ae00,804078f8 -348ae04,40000 -348ae08,53410089 -348ae0c,c81c01 -348ae10,80407b54 -348ae14,804078f8 -348ae18,40001 -348ae1c,5341008a -348ae20,c81c01 -348ae24,80407b54 -348ae28,804078f8 -348ae2c,40002 -348ae30,5341008b -348ae34,c81c01 -348ae38,80407b54 -348ae3c,804078f8 -348ae40,40003 -348ae44,5341008c -348ae48,c81c01 -348ae4c,80407b54 -348ae50,804078f8 -348ae54,40004 -348ae58,5341008e -348ae5c,c81c01 -348ae60,80407b54 -348ae64,804078f8 -348ae68,40005 -348ae6c,5341008f -348ae70,c81c01 -348ae74,80407b54 -348ae78,804078f8 -348ae7c,40006 -348ae80,534100a3 -348ae84,c81c01 -348ae88,80407b54 -348ae8c,804078f8 -348ae90,40007 -348ae94,534100a5 -348ae98,c81c01 -348ae9c,80407b54 -348aea0,804078f8 -348aea4,40008 -348aea8,53410092 -348aeac,c81c01 -348aeb0,80407b54 -348aeb4,804078f8 -348aeb8,40009 -348aebc,53410093 -348aec0,aa0203 -348aec4,80407b54 -348aec8,8040790c -348aecc,3ffff -348aed0,53410094 -348aed4,aa0203 -348aed8,80407b54 -348aedc,8040790c -348aee0,4ffff -348aee4,53410095 -348aee8,aa0203 -348aeec,80407b54 -348aef0,8040790c -348aef4,5ffff -348aef8,534100a6 -348aefc,aa0203 -348af00,80407b54 -348af04,8040790c -348af08,6ffff -348af0c,534100a9 -348af10,aa0203 -348af14,80407b54 -348af18,8040790c -348af1c,7ffff -348af20,5341009b -348af24,aa0203 -348af28,80407b54 -348af2c,8040790c -348af30,8ffff -348af34,5341009f -348af38,aa0203 -348af3c,80407b54 -348af40,8040790c -348af44,bffff -348af48,534100a0 -348af4c,aa0203 -348af50,80407b54 -348af54,8040790c -348af58,cffff -348af5c,534100a1 -348af60,aa0203 -348af64,80407b54 -348af68,8040790c -348af6c,dffff -348af70,534100e9 -348af74,1941300 -348af78,80407b54 -348af7c,80407930 -348af80,ffffffff -348af84,534100e4 -348af88,cd1e00 -348af8c,80407b54 -348af90,8040794c -348af94,ffffffff -348af98,534100e8 -348af9c,cd1f00 -348afa0,80407b54 -348afa4,80407968 -348afa8,ffffffff -348afac,53410073 -348afb0,b60300 -348afb4,80407b54 -348afb8,80407998 -348afbc,6ffff -348afc0,53410074 -348afc4,b60400 -348afc8,80407b54 -348afcc,80407998 -348afd0,7ffff -348afd4,53410075 -348afd8,b60500 -348afdc,80407b54 -348afe0,80407998 -348afe4,8ffff -348afe8,53410076 -348afec,b60600 -348aff0,80407b54 -348aff4,80407998 -348aff8,9ffff -348affc,53410077 -348b000,b60700 -348b004,80407b54 -348b008,80407998 -348b00c,affff -348b010,53410078 -348b014,b60800 -348b018,80407b54 -348b01c,80407998 -348b020,bffff -348b024,534100d4 -348b028,b60400 -348b02c,80407b54 -348b030,80407998 -348b034,cffff -348b038,534100d2 -348b03c,b60600 -348b040,80407b54 -348b044,80407998 -348b048,dffff -348b04c,534100d1 -348b050,b60300 -348b054,80407b54 -348b058,80407998 -348b05c,effff -348b060,534100d3 -348b064,b60800 -348b068,80407b54 -348b06c,80407998 -348b070,fffff -348b074,534100d5 -348b078,b60500 -348b07c,80407b54 -348b080,80407998 -348b084,10ffff -348b088,534100d6 -348b08c,b60700 -348b090,80407b54 -348b094,80407998 -348b098,11ffff -348b09c,534100f8 -348b0a0,d12300 -348b0a4,80407b54 -348b0a8,8040787c -348b0ac,3ffff -348b0b0,53149099 -348b0b4,10b4500 -348b0b8,80407b54 -348b0bc,804077ac -348b0c0,ffffffff -348b0c4,53419048 -348b0c8,f33e00 -348b0cc,80407b54 -348b0d0,804079cc -348b0d4,ffffffff -348b0d8,53419003 -348b0dc,1933500 -348b0e0,80407b54 -348b0e4,804077c0 -348b0e8,ffffffff -348b0ec,53419097 -348b0f0,ef3b00 -348b0f4,80407b54 -348b0f8,804077ac -348b0fc,ffffffff -348b100,4d419098 -348b104,ef3b01 -348b108,80407b54 -348b10c,804077ac -348b110,ffffffff -348b118,1 -348b11c,1 -348b120,d -348b124,41200000 -348b128,41200000 -348b12c,8040a0b8 -348b130,8040a0a8 -348b138,df000000 -348b140,80112f1a -348b144,80112f14 -348b148,80112f0e -348b14c,80112f08 -348b150,8011320a -348b154,80113204 -348b158,801131fe -348b15c,801131f8 -348b160,801131f2 -348b164,801131ec -348b168,801131e6 -348b16c,801131e0 -348b170,8012be1e -348b174,8012be20 -348b178,8012be1c -348b17c,8012be12 -348b180,8012be14 -348b184,8012be10 -348b188,801c7672 -348b18c,801c767a -348b190,801c7950 -348b194,8011bd50 -348b198,8011bd38 -348b19c,801d8b9e -348b1a0,801d8b92 -348b1a4,c80000 -348b1ac,ff0046 -348b1b0,32ffff -348c2f8,db000 -348c2fc,db000 -348c300,db000 -348c304,cb000 -348c308,cb000 -348c30c,ca000 -348c314,db000 -348c318,db000 -348c330,e8ac00 -348c334,e8ac00 -348c338,e8ac00 -348c33c,e8ac00 -348c364,d77d0 -348c368,2e3ab0 -348c36c,7d0c90 -348c370,8ffffffd -348c374,c96e00 -348c378,2e4ac00 -348c37c,effffff4 -348c380,ab0e500 -348c384,c95e000 -348c388,e59c000 -348c3a0,79000 -348c3a4,5ceeb40 -348c3a8,cc8a990 -348c3ac,da79000 -348c3b0,8ecb400 -348c3b4,4adda0 -348c3b8,797e2 -348c3bc,c88aae0 -348c3c0,6ceed70 -348c3c4,79000 -348c3c8,79000 -348c3d8,6dea0000 -348c3dc,c94d6000 -348c3e0,c94d6033 -348c3e4,6deb6bc6 -348c3e8,8cb600 -348c3ec,7ca4cec4 -348c3f0,3109c3bb -348c3f4,9c3bb -348c3f8,2ced4 -348c410,4cefb00 -348c414,ad50000 -348c418,8e30000 -348c41c,9ec0000 -348c420,7e4db0ab -348c424,bb05e8aa -348c428,bc008ed6 -348c42c,7e936ed0 -348c430,8ded9ea -348c448,ca000 -348c44c,ca000 -348c450,ca000 -348c454,ca000 -348c478,c900 -348c47c,7e200 -348c480,cb000 -348c484,e8000 -348c488,6f3000 -348c48c,8e0000 -348c490,8e0000 -348c494,6f4000 -348c498,e8000 -348c49c,cb000 -348c4a0,7e200 -348c4a4,c900 -348c4b0,bb0000 -348c4b4,5e4000 -348c4b8,ca000 -348c4bc,ad000 -348c4c0,7e100 -348c4c4,6f400 -348c4c8,6f400 -348c4cc,7e100 -348c4d0,ad000 -348c4d4,ca000 -348c4d8,5e4000 -348c4dc,bb0000 -348c4f0,a8000 -348c4f4,c8a8ab0 -348c4f8,3beda10 -348c4fc,3beda10 -348c500,c8a8ab0 -348c504,a8000 -348c52c,ca000 -348c530,ca000 -348c534,ca000 -348c538,affffff8 -348c53c,ca000 -348c540,ca000 -348c544,ca000 -348c57c,dd000 -348c580,ec000 -348c584,4f8000 -348c588,9d0000 -348c5ac,dffb00 -348c5ec,ec000 -348c5f0,ec000 -348c608,bc0 -348c60c,4e60 -348c610,bc00 -348c614,3e800 -348c618,ad000 -348c61c,1e9000 -348c620,9e2000 -348c624,da0000 -348c628,7e30000 -348c62c,cb00000 -348c630,6e500000 -348c640,3ceeb00 -348c644,bd57e90 -348c648,e900bd0 -348c64c,5f7009e0 -348c650,6f6cb9e0 -348c654,5f7009e0 -348c658,e900bd0 -348c65c,bd57e90 -348c660,3ceeb00 -348c678,affe000 -348c67c,8e000 -348c680,8e000 -348c684,8e000 -348c688,8e000 -348c68c,8e000 -348c690,8e000 -348c694,8e000 -348c698,8ffffe0 -348c6b0,8deea00 -348c6b4,c837e90 -348c6b8,cc0 -348c6bc,2ea0 -348c6c0,bd20 -348c6c4,bd400 -348c6c8,bd4000 -348c6cc,bd40000 -348c6d0,2fffffd0 -348c6e8,7ceea00 -348c6ec,c837e90 -348c6f0,cb0 -348c6f4,27e90 -348c6f8,bffb00 -348c6fc,27da0 -348c700,ad0 -348c704,5c627db0 -348c708,9deeb30 -348c720,2de00 -348c724,bde00 -348c728,7d9e00 -348c72c,2d79e00 -348c730,bb09e00 -348c734,6e409e00 -348c738,9ffffff7 -348c73c,9e00 -348c740,9e00 -348c758,cffff50 -348c75c,ca00000 -348c760,ca00000 -348c764,ceeea00 -348c768,38e90 -348c76c,bc0 -348c770,bc0 -348c774,5c638e90 -348c778,9deda00 -348c790,aeec30 -348c794,ae83980 -348c798,e900000 -348c79c,4faeec40 -348c7a0,6fd55dc0 -348c7a4,5f9009e0 -348c7a8,e9009e0 -348c7ac,cd55dc0 -348c7b0,3ceec40 -348c7c8,5fffffd0 -348c7cc,da0 -348c7d0,7e40 -348c7d4,cc00 -348c7d8,4e800 -348c7dc,ad000 -348c7e0,da000 -348c7e4,8e4000 -348c7e8,cc0000 -348c800,5ceec30 -348c804,dc45db0 -348c808,e900bd0 -348c80c,bc45d90 -348c810,4dffc20 -348c814,1db45cc0 -348c818,5f6009e0 -348c81c,2eb35cd0 -348c820,7deec50 -348c838,6deeb00 -348c83c,db37e90 -348c840,5f500bd0 -348c844,5f500be0 -348c848,db37ee0 -348c84c,6dedbe0 -348c850,bc0 -348c854,9749e70 -348c858,5ded800 -348c878,ec000 -348c87c,ec000 -348c88c,ec000 -348c890,ec000 -348c8b0,ec000 -348c8b4,ec000 -348c8c4,dd000 -348c8c8,ec000 -348c8cc,4f8000 -348c8d0,9d0000 -348c8e8,29c8 -348c8ec,7bed93 -348c8f0,8dda4000 -348c8f4,8dda4000 -348c8f8,7bec93 -348c8fc,29c8 -348c924,affffff8 -348c930,affffff8 -348c958,ac810000 -348c95c,4adeb600 -348c960,6add6 -348c964,6add6 -348c968,4adeb600 -348c96c,ac810000 -348c988,4beec30 -348c98c,9a46ea0 -348c990,1da0 -348c994,2cd30 -348c998,cc100 -348c99c,e9000 -348c9a4,e9000 -348c9a8,e9000 -348c9c0,1aeed70 -348c9c4,cd739e4 -348c9c8,7e2000c9 -348c9cc,ba0aeeca -348c9d0,d76e64da -348c9d4,d69c00aa -348c9d8,d76e64da -348c9dc,ba0aeeca -348c9e0,6e400000 -348c9e4,ad83000 -348c9e8,8dee90 -348c9f8,3ed000 -348c9fc,9de600 -348ca00,cbcb00 -348ca04,3e8ad00 -348ca08,8e26f60 -348ca0c,cc00ea0 -348ca10,2effffd0 -348ca14,8e5008f5 -348ca18,cd0001ea -348ca30,effec40 -348ca34,e905dc0 -348ca38,e900ae0 -348ca3c,e905dc0 -348ca40,efffd50 -348ca44,e904bd2 -348ca48,e9005f6 -348ca4c,e904be3 -348ca50,effed80 -348ca68,9ded80 -348ca6c,8e936b0 -348ca70,db00000 -348ca74,3f900000 -348ca78,5f700000 -348ca7c,1e900000 -348ca80,db00000 -348ca84,8e947b0 -348ca88,9ded80 -348caa0,5ffed800 -348caa4,5f65ae80 -348caa8,5f600cd0 -348caac,5f6009e0 -348cab0,5f6009f0 -348cab4,5f6009e0 -348cab8,5f600cd0 -348cabc,5f65ae80 -348cac0,5ffed800 -348cad8,dffffe0 -348cadc,db00000 -348cae0,db00000 -348cae4,db00000 -348cae8,dffffc0 -348caec,db00000 -348caf0,db00000 -348caf4,db00000 -348caf8,dfffff0 -348cb10,bfffff4 -348cb14,bd00000 -348cb18,bd00000 -348cb1c,bd00000 -348cb20,bffffc0 -348cb24,bd00000 -348cb28,bd00000 -348cb2c,bd00000 -348cb30,bd00000 -348cb48,1aeed60 -348cb4c,be738a0 -348cb50,4e900000 -348cb54,8f400000 -348cb58,9f10bff2 -348cb5c,7f4007f2 -348cb60,4e9007f2 -348cb64,be739f2 -348cb68,1beed90 -348cb80,5f6009e0 -348cb84,5f6009e0 -348cb88,5f6009e0 -348cb8c,5f6009e0 -348cb90,5fffffe0 -348cb94,5f6009e0 -348cb98,5f6009e0 -348cb9c,5f6009e0 +348939c,44050000 +34893a0,3c068000 +34893a4,a62825 +34893a8,30a700ff +34893ac,3c068041 +34893b0,24c6a1c0 +34893b4,32840 +34893b8,a32821 +34893bc,c52821 +34893c0,90a50002 +34893c4,44850000 +34893cc,46800020 +34893d0,46040002 +34893d4,42840 +34893d8,a42821 +34893dc,c53021 +34893e0,90c50002 +34893e4,44853000 +34893ec,468031a0 +34893f0,46023182 +34893f4,46060000 +34893f8,3c058041 +34893fc,c4a6a220 +3489400,4600303e +3489408,45030005 +348940c,46060001 +3489410,4600000d +3489414,44050000 +3489418,10000006 +348941c,30a600ff +3489420,4600000d +3489424,44050000 +3489428,3c068000 +348942c,a62825 +3489430,30a600ff +3489434,32840 +3489438,a31821 +348943c,3c088041 +3489440,2508a1c0 +3489444,681821 +3489448,90650000 +348944c,44850000 +3489454,46800020 +3489458,46040002 +348945c,41840 +3489460,641821 +3489464,681821 +3489468,90630000 +348946c,44832000 +3489474,46802120 +3489478,46022082 +348947c,46020000 +3489480,3c038041 +3489484,c462a220 +3489488,4600103e +3489490,45030005 +3489494,46020001 +3489498,4600000d +348949c,44030000 +34894a0,10000006 +34894a4,a0430000 +34894a8,4600000d +34894ac,44030000 +34894b0,3c048000 +34894b4,641825 +34894b8,a0430000 +34894bc,a0470001 +34894c0,3e00008 +34894c4,a0460002 +34894c8,3c028011 +34894cc,3442a5d0 +34894d0,24030140 +34894d4,a4431424 +34894d8,90440032 +34894dc,41840 +34894e0,641821 +34894e4,31900 +34894e8,3e00008 +34894ec,a0430033 +34894f0,24a20002 +34894f4,24a50082 +34894f8,24065700 +34894fc,24070004 +3489500,9443fffe +3489504,50660008 +3489508,24420004 +348950c,50600006 +3489510,24420004 +3489514,94430000 +3489518,2c630004 +348951c,54600001 +3489520,a4470000 +3489524,24420004 +3489528,5445fff6 +348952c,9443fffe +3489530,3e00008 +3489538,27bdffe8 +348953c,afbf0014 +3489540,c10273a +3489544,24040400 +3489548,3c038041 +348954c,ac62b58c +3489550,3c038041 +3489554,ac62b590 +3489558,8fbf0014 +348955c,3e00008 +3489560,27bd0018 +3489564,80820000 +3489568,10400026 +348956c,24870001 +3489570,3c038041 +3489574,8c68b58c +3489578,25080400 +348957c,3c038041 +3489580,8c63b590 +3489584,5825 +3489588,3c0aff00 +348958c,254a0fff +3489590,30c60fff +3489594,240df000 +3489598,3c098041 +348959c,2529a418 +34895a0,240c0001 +34895a4,68202b +34895a8,54800005 +34895ac,a0620000 +34895b0,11600014 +34895b4,3c028041 +34895b8,3e00008 +34895bc,ac43b590 +34895c0,30a40fff +34895c4,42300 +34895c8,8c620000 +34895cc,4a1024 +34895d0,441025 +34895d4,4d1024 +34895d8,461025 +34895dc,ac620000 +34895e0,24630004 +34895e4,95220004 +34895e8,a22821 +34895ec,24e70001 +34895f0,80e2ffff +34895f4,1440ffeb +34895f8,1805825 +34895fc,3c028041 +3489600,ac43b590 +3489604,3e00008 +348960c,27bdffb8 +3489610,afbf0044 +3489614,afbe0040 +3489618,afb7003c +348961c,afb60038 +3489620,afb50034 +3489624,afb40030 +3489628,afb3002c +348962c,afb20028 +3489630,afb10024 +3489634,afb00020 +3489638,80a825 +348963c,b025 +3489640,9025 +3489644,3c138041 +3489648,2673a418 +348964c,3c178041 +3489650,3c148041 +3489654,3c1e38e3 +3489658,24070012 +348965c,2c03025 +3489660,2602825 +3489664,c101bd7 +3489668,2a02025 +348966c,8ef0b58c +3489670,8e82b590 +3489674,202102b +3489678,50400026 +348967c,26520001 +3489680,37d18e39 +3489684,82020000 +3489688,2002825 +348968c,2442ffe0 +3489690,510018 +3489694,1810 +3489698,31883 +348969c,227c3 +34896a0,641823 +34896a4,14720016 +34896a8,26100004 +34896ac,8ca70000 +34896b0,73b02 +34896b4,510018 +34896b8,1810 +34896bc,31883 +34896c0,641823 +34896c4,330c0 +34896c8,c33021 +34896cc,63040 +34896d0,96630006 +34896d4,afa30018 +34896d8,96630004 +34896dc,afa30014 +34896e0,8ca30000 +34896e4,30630fff +34896e8,afa30010 +34896ec,30e70fff +34896f0,463023 +34896f4,2602825 +34896f8,c101c3f +34896fc,2a02025 +3489700,8e82b590 +3489704,202102b +3489708,5440ffdf +348970c,82020000 +3489710,26520001 +3489714,24020006 +3489718,1642ffcf +348971c,26d60012 +3489720,3c028041 +3489724,8c43b58c +3489728,3c028041 +348972c,ac43b590 +3489730,8fbf0044 +3489734,8fbe0040 +3489738,8fb7003c +348973c,8fb60038 +3489740,8fb50034 +3489744,8fb40030 +3489748,8fb3002c +348974c,8fb20028 +3489750,8fb10024 +3489754,8fb00020 +3489758,3e00008 +348975c,27bd0048 +3489760,3c028041 +3489764,24030001 +3489768,ac43b598 +348976c,3c038041 +3489770,8c62b59c +3489774,2c440006 +3489778,50800001 +348977c,24020005 +3489780,3e00008 +3489784,ac62b59c +3489788,27bdffb8 +348978c,afbf0044 +3489790,afbe0040 +3489794,afb6003c +3489798,afb50038 +348979c,afb40034 +34897a0,afb30030 +34897a4,afb2002c +34897a8,afb10028 +34897ac,afb00024 +34897b0,3a0f025 +34897b4,3c028041 +34897b8,9442b594 +34897bc,10400133 +34897c0,3a0a825 +34897c4,3c02801d +34897c8,3442aa30 +34897cc,8c42066c +34897d0,3c033000 +34897d4,24630483 +34897d8,431024 +34897dc,1440012b +34897e0,808025 +34897e4,3c02801c +34897e8,344284a0 +34897ec,8c430008 +34897f0,3c02800f +34897f4,8c4213ec +34897f8,54620125 +34897fc,2a0e825 +3489800,3c028011 +3489804,3442a5d0 +3489808,8c47135c +348980c,14e0011f +3489810,3c02800e +3489814,3442f1b0 +3489818,8c420000 +348981c,30420020 +3489820,1440011a +3489824,3c028041 +3489828,8c43b598 +348982c,24020001 +3489830,1062000a +3489834,3c02801c +3489838,344284a0 +348983c,3c030001 +3489840,431021 +3489844,94430934 +3489848,24020006 +348984c,54620110 +3489850,2a0e825 +3489854,10000009 +3489858,3c038041 +348985c,344284a0 +3489860,3c030001 +3489864,431021 +3489868,94430934 +348986c,24020006 +3489870,14620007 +3489874,3c028041 +3489878,3c038041 +348987c,8c62b59c +3489880,3042001f +3489884,ac62b59c +3489888,10000022 +348988c,241300ff +3489890,8c42b59c +3489894,2c430006 +3489898,1060000a +348989c,2c43006a +34898a0,29a00 +34898a4,2629823 +34898a8,3c02cccc +34898ac,3442cccd +34898b0,2620019 +34898b4,9810 +34898b8,139882 +34898bc,10000015 +34898c0,327300ff +34898c4,14600013 +34898c8,241300ff +34898cc,2c4300ba +34898d0,1060000b +34898d4,21a00 +34898d8,621023 +34898dc,24429769 +34898e0,3c03cccc +34898e4,3463cccd +34898e8,430019 +34898ec,1010 +34898f0,29982 +34898f4,139827 +34898f8,10000006 +34898fc,327300ff +3489900,3c028041 +3489904,ac40b598 +3489908,3c028041 +348990c,100000df +3489910,ac40b59c +3489914,3c038041 +3489918,8c62b59c +348991c,24420001 +3489920,ac62b59c +3489924,3c028011 +3489928,3442a5d0 +348992c,8c4808c4 +3489930,19000011 +3489934,1001025 +3489938,e05025 +348993c,3c056666 +3489940,24a56667 +3489944,254a0001 +3489948,401825 +348994c,450018 +3489950,2010 +3489954,42083 +3489958,217c3 +348995c,2863000a +3489960,1060fff8 +3489964,821023 +3489968,15400005 +348996c,3c028041 +3489970,10000002 +3489974,240a0001 +3489978,240a0001 +348997c,3c028041 +3489980,9445b532 +3489984,18a00010 +3489988,a01025 +348998c,3c066666 +3489990,24c66667 +3489994,24e70001 +3489998,401825 +348999c,460018 +34899a0,2010 +34899a4,42083 +34899a8,217c3 +34899ac,2863000a +34899b0,1060fff8 +34899b4,821023 +34899b8,54e00005 +34899bc,1473821 +34899c0,10000002 +34899c4,24070001 +34899c8,24070001 +34899cc,1473821 +34899d0,24f40001 +34899d4,3c028041 +34899d8,2442a418 +34899dc,94430004 +34899e0,740018 +34899e4,2012 +34899e8,3c038041 +34899ec,2463a3f8 +34899f0,94660004 +34899f4,862021 +34899f8,497c2 +34899fc,2449021 +3489a00,129043 +3489a04,129023 +3489a08,265200a0 +3489a0c,94420006 +3489a10,44820000 +3489a18,46800021 +3489a1c,3c028041 +3489a20,d446a230 +3489a24,46260002 +3489a28,3c028041 +3489a2c,d442a238 +3489a30,46201001 +3489a34,3c028041 +3489a38,d444a240 +3489a3c,46240000 +3489a40,4620000d +3489a44,44060000 +3489a48,94620006 +3489a4c,44820000 +3489a54,46800021 +3489a58,46260002 +3489a5c,46201081 +3489a60,3c028041 +3489a64,d440a248 +3489a68,46201080 +3489a6c,46241080 +3489a70,4620100d +3489a74,44110000 +3489a78,24e20009 +3489a7c,210c2 +3489a80,210c0 +3489a84,3a2e823 +3489a88,27a40020 +3489a8c,941021 +3489a90,19400015 +3489a94,a0400000 +3489a98,2549ffff +3489a9c,894821 +3489aa0,806025 +3489aa4,3c0b6666 +3489aa8,256b6667 +3489aac,10b0018 +3489ab0,1810 +3489ab4,31883 +3489ab8,817c3 +3489abc,621823 +3489ac0,31080 +3489ac4,431021 +3489ac8,21040 +3489acc,1021023 +3489ad0,24420030 +3489ad4,a1220000 +3489ad8,604025 +3489adc,1201025 +3489ae0,144cfff2 +3489ae4,2529ffff +3489ae8,8a1021 +3489aec,2403002f +3489af0,a0430000 +3489af4,147102a +3489af8,10400012 +3489afc,873821 +3489b00,8a5021 +3489b04,3c086666 +3489b08,25086667 +3489b0c,a80018 +3489b10,1810 +3489b14,31883 +3489b18,517c3 +3489b1c,621823 +3489b20,31080 +3489b24,431021 +3489b28,21040 +3489b2c,a21023 +3489b30,24420030 +3489b34,a0e20000 +3489b38,24e7ffff +3489b3c,14eafff3 +3489b40,602825 +3489b44,8e020008 +3489b48,24430008 +3489b4c,ae030008 +3489b50,3c03de00 +3489b54,ac430000 +3489b58,3c038041 +3489b5c,2463a468 +3489b60,ac430004 +3489b64,8e020008 +3489b68,24430008 +3489b6c,ae030008 +3489b70,3c03e700 +3489b74,ac430000 +3489b78,ac400004 +3489b7c,8e020008 +3489b80,24430008 +3489b84,ae030008 +3489b88,3c03fc11 +3489b8c,34639623 +3489b90,ac430000 +3489b94,3c03ff2f +3489b98,3463ffff +3489b9c,ac430004 +3489ba0,8e030008 +3489ba4,24620008 +3489ba8,ae020008 +3489bac,3c16fa00 +3489bb0,ac760000 +3489bb4,3c02dad3 +3489bb8,24420b00 +3489bbc,2621025 +3489bc0,ac620004 +3489bc4,c102559 +3489bc8,2402825 +3489bcc,3c028041 +3489bd0,9442a41c +3489bd4,540018 +3489bd8,a012 +3489bdc,292a021 +3489be0,8e020008 +3489be4,24430008 +3489be8,ae030008 +3489bec,ac560000 +3489bf0,3c03f4ec +3489bf4,24633000 +3489bf8,2639825 +3489bfc,ac530004 +3489c00,3c028041 +3489c04,8c46b59c +3489c08,63042 +3489c0c,24070001 +3489c10,30c6000f +3489c14,3c128041 +3489c18,2645a3f8 +3489c1c,c101bd7 +3489c20,2002025 +3489c24,2645a3f8 +3489c28,94a20006 +3489c2c,afa20018 +3489c30,94a20004 +3489c34,afa20014 +3489c38,afb10010 +3489c3c,2803825 +3489c40,3025 +3489c44,c101c3f +3489c48,2002025 +3489c4c,c102583 +3489c50,2002025 +3489c54,8e020008 +3489c58,24430008 +3489c5c,ae030008 +3489c60,3c03e900 +3489c64,ac430000 +3489c68,ac400004 +3489c6c,8e020008 +3489c70,24430008 +3489c74,ae030008 +3489c78,3c03df00 +3489c7c,ac430000 +3489c80,ac400004 +3489c84,10000002 +3489c88,2a0e825 +3489c8c,2a0e825 +3489c90,3c0e825 +3489c94,8fbf0044 +3489c98,8fbe0040 +3489c9c,8fb6003c +3489ca0,8fb50038 +3489ca4,8fb40034 +3489ca8,8fb30030 +3489cac,8fb2002c +3489cb0,8fb10028 +3489cb4,8fb00024 +3489cb8,3e00008 +3489cbc,27bd0048 +3489cc0,3c028040 +3489cc4,a0403054 +3489cc8,3c028040 +3489ccc,3e00008 +3489cd0,ac403058 +3489cd4,3c038041 +3489cd8,3c028050 +3489cdc,24420000 +3489ce0,3e00008 +3489ce4,ac62b5a0 +3489ce8,3082000f +3489cec,10400009 +3489cf0,3c038041 +3489cf4,417c3 +3489cf8,21702 +3489cfc,821821 +3489d00,3063000f +3489d04,431023 +3489d08,24420010 +3489d0c,822021 +3489d10,3c038041 +3489d14,8c62b5a0 +3489d18,442021 +3489d1c,3e00008 +3489d20,ac64b5a0 +3489d24,27bdffe8 +3489d28,afbf0014 +3489d2c,afb00010 +3489d30,808025 +3489d34,c10273a +3489d38,8c840008 +3489d3c,402025 +3489d40,ae020000 +3489d44,8e060008 +3489d48,3c028000 +3489d4c,24420df0 +3489d50,40f809 +3489d54,8e050004 +3489d58,8fbf0014 +3489d5c,8fb00010 +3489d60,3e00008 +3489d64,27bd0018 +3489d68,3c02800f +3489d6c,a0401640 +3489d70,3c028041 +3489d74,a040b5a4 +3489d78,3c028011 +3489d7c,3442a5d0 +3489d80,8c420004 +3489d84,14400086 +3489d88,3c028011 +3489d8c,3442a5d0 +3489d90,8c421360 +3489d94,2c420004 +3489d98,10400081 +3489d9c,3c028011 +3489da0,3442a5d0 +3489da4,8c420000 +3489da8,240301fd +3489dac,14430005 +3489db0,3c038011 +3489db4,3c02800f +3489db8,24030001 +3489dbc,3e00008 +3489dc0,a0431640 +3489dc4,3463a5d0 +3489dc8,94630ed6 +3489dcc,30630100 +3489dd0,1460000a +3489dd4,3c038011 +3489dd8,24030157 +3489ddc,10430003 +3489de0,240301f9 +3489de4,14430005 +3489de8,3c038011 +3489dec,3c02800f +3489df0,24030002 +3489df4,3e00008 +3489df8,a0431640 +3489dfc,3463a5d0 +3489e00,94630edc +3489e04,30640400 +3489e08,54800016 +3489e0c,3c028011 +3489e10,240404da +3489e14,10440005 +3489e18,2404ffbf +3489e1c,441024 +3489e20,2404019d +3489e24,14440005 +3489e28,3c02801c +3489e2c,3c02800f +3489e30,24030003 +3489e34,3e00008 +3489e38,a0431640 +3489e3c,344284a0 +3489e40,944200a4 +3489e44,2442ffa8 +3489e48,2c420002 +3489e4c,10400005 +3489e50,3c028011 +3489e54,3c02800f +3489e58,24030003 +3489e5c,3e00008 +3489e60,a0431640 +3489e64,3442a5d0 +3489e68,8c4200a4 +3489e6c,30420007 +3489e70,24040007 +3489e74,5444001f +3489e78,30630200 +3489e7c,3c028011 +3489e80,3442a5d0 +3489e84,8c42037c +3489e88,30420002 +3489e8c,54400019 +3489e90,30630200 +3489e94,3c02801c +3489e98,344284a0 +3489e9c,944200a4 +3489ea0,2442ffae +3489ea4,2c420002 +3489ea8,50400012 +3489eac,30630200 +3489eb0,3c028041 +3489eb4,24040002 +3489eb8,a044b5a4 +3489ebc,3c028011 +3489ec0,3442a5d0 +3489ec4,8c420000 +3489ec8,24040191 +3489ecc,10440008 +3489ed0,24040205 +3489ed4,10440006 +3489ed8,240400db +3489edc,10440004 +3489ee0,3c02800f +3489ee4,24030005 +3489ee8,3e00008 +3489eec,a0431640 +3489ef0,30630200 +3489ef4,1460002a +3489ef8,3c02801c +3489efc,344284a0 +3489f00,3c030001 +3489f04,431021 +3489f08,84431e1a +3489f0c,240204d6 +3489f10,14620005 +3489f14,3c02801c +3489f18,3c02800f +3489f1c,24030002 +3489f20,3e00008 +3489f24,a0431640 +3489f28,344284a0 +3489f2c,944200a4 +3489f30,2c430054 +3489f34,50600006 +3489f38,2442ffa0 +3489f3c,2c420052 +3489f40,14400017 +3489f44,3c028041 +3489f48,10000006 +3489f4c,9042b5a4 +3489f50,3042ffff +3489f54,2c420002 +3489f58,10400011 +3489f5c,3c028041 +3489f60,9042b5a4 +3489f64,14400005 +3489f68,3c028011 +3489f6c,3c028041 +3489f70,24030001 +3489f74,a043b5a4 +3489f78,3c028011 +3489f7c,3442a5d0 +3489f80,8c420000 +3489f84,240300db +3489f88,10430005 +3489f8c,24030195 +3489f90,10430003 +3489f94,3c02800f +3489f98,24030002 +3489f9c,a0431640 +3489fa0,3e00008 +3489fa8,33c2 +3489fac,664399c4 +3489fb0,cc45ffc6 +3489fb4,ff47ffc8 +3489fb8,ff49e0ca +3489fbc,c24ba3cc +3489fc0,854d660d +3489fc4,440f2200 +3489fc8,85d1a352 +3489fcc,c2d3e045 +3489fd0,1010101 +3489fd4,1010101 +3489fd8,1010101 +3489fdc,1010101 +3489fe0,1010101 +3489ffc,1010000 +348a004,1010101 +348a008,1000101 +348a00c,10101 +348a010,10000 +348a014,2b242525 +348a018,26262626 +348a01c,27272727 +348a020,27272727 +348a024,500080d +348a028,1051508 +348a02c,d01052a +348a030,80d0127 +348a034,f080b01 +348a038,4d510b02 +348a040,97ff6350 +348a044,45ff5028 +348a048,57456397 +348a04c,ff5e45ff +348a050,9f006545 +348a054,ff63ff6c +348a058,45fff063 +348a05c,7345ffff +348a060,ff503aff +348a064,ffff573a +348a068,ffffff5e +348a06c,3affffff +348a070,653affff +348a074,ff6c3aff +348a078,ffff733a +348a07c,5a0c00 +348a080,720c0096 +348a084,c009618 +348a088,1652a00 +348a08c,4e2a005a +348a090,2a000000 +348a094,c004e00 +348a098,c015a00 +348a09c,c026600 +348a0a0,c037200 +348a0a4,c047e00 +348a0a8,c058a00 +348a0ac,c064e0c +348a0b0,75a0c +348a0b4,c09660c +348a0b8,a720c +348a0bc,c0c7e0c +348a0c0,c0d8a0c +348a0c4,c0e4e18 +348a0c8,c0f5a18 +348a0cc,c106618 +348a0d0,c117218 +348a0d4,c127e18 +348a0d8,c138a18 +348a0dc,ffff +348a0e0,ffff +348a0e4,ffff +348a0e8,ffff +348a0ec,ffff +348a0f0,ffff +348a0f4,ffff +348a0f8,ffff +348a0fc,ffff +348a100,ffff +348a104,ffff +348a108,ffff +348a10c,ffff +348a110,ffff +348a114,c3b7e2a +348a118,c3c8a2a +348a11c,c3d962a +348a120,ffff +348a124,c3e7e36 +348a128,b3f8b37 +348a12c,b409737 +348a130,ffff +348a134,c417e42 +348a138,c428a42 +348a13c,c439642 +348a140,ffff +348a144,c447e4f +348a148,c458a4f +348a14c,c46964f +348a150,ffff +348a154,c149600 +348a158,ffff +348a15c,2c061b31 +348a160,2c072931 +348a164,2c083731 +348a168,2a096f51 +348a16c,2c0a722a +348a170,ffff +348a174,2c00370a +348a178,2c01371a +348a17c,2c022922 +348a180,2c031b1a +348a184,2c041b0a +348a188,2c052902 +348a18c,ffff +348a190,ffff +348a194,8040a438 +348a198,8040a428 +348a19c,8040a3b8 +348a1a0,c8ff6482 +348a1a4,82ffff64 +348a1a8,64ff5aff +348a1ac,bd1400 +348a1b0,aa0200 +348a1b4,bd1300 +348a1b8,15c6300 +348a1bc,de2f00 +348a1c0,e01010e0 +348a1c4,e01010e0 +348a1c8,1010e0e0 +348a1cc,1010e0e0 +348a1d0,10e0e010 +348a1d4,10000000 +348a1d8,4d510000 +348a1dc,4e6f726d +348a1e0,616c0000 +348a1e4,bdcccccd +348a1e8,3dcccccd +348a1ec,43510000 +348a1f0,41100000 +348a1f4,4f000000 +348a1f8,42080000 +348a1fc,c20c0000 +348a200,420c0000 +348a204,3f800000 +348a208,3f000000 +348a20c,41c80000 +348a210,3fa00000 +348a214,40000000 +348a218,40200000 +348a21c,3f800000 +348a220,4f000000 +348a228,41f00000 +348a230,3ff80000 +348a238,406e0000 +348a240,3ff00000 +348a248,40080000 +348a250,80409fa8 +348a254,10203 +348a258,4050607 +348a25c,ffffffff +348a260,ffff0000 +348a264,ff00ff +348a268,3c000064 +348a26c,ffff8200 +348a270,c832ffc8 +348a274,c8000000 +348a278,104465 +348a27c,6b750000 +348a284,110446f +348a288,646f6e67 +348a28c,6f000000 +348a290,2104a61 +348a294,62750000 +348a29c,3d0466f +348a2a0,72657374 +348a2a8,4d04669 +348a2ac,72650000 +348a2b4,5d05761 +348a2b8,74657200 +348a2c0,7d05368 +348a2c4,61646f77 +348a2cc,6d05370 +348a2d0,69726974 +348a2d8,890426f +348a2dc,74570000 +348a2e4,9104963 +348a2e8,65000000 +348a2f0,ca04869 +348a2f4,64656f75 +348a2f8,74000000 +348a2fc,b804754 +348a300,47000000 +348a308,dc04761 +348a30c,6e6f6e00 +348a314,2 +348a31c,3f800000 +348a328,1 +348a32c,30006 +348a330,70009 +348a334,b000e +348a338,f0010 +348a33c,110019 +348a340,1a002b +348a344,2c002e +348a348,300032 +348a34c,35003c +348a350,400041 +348a354,460051 +348a358,540109 +348a35c,10b010c +348a360,10e010f +348a364,1100113 +348a36c,1 +348a370,1 +348a374,2 +348a378,1 +348a37c,2 +348a380,2 +348a384,3 +348a388,1 +348a38c,2 +348a390,2 +348a394,3 +348a398,2 +348a39c,3 +348a3a0,3 +348a3a4,4 +348a3ac,100010 +348a3b0,a0301 +348a3b4,1000000 +348a3bc,100010 +348a3c0,20002 +348a3c4,2000000 +348a3cc,80008 +348a3d0,a0301 +348a3d4,1000000 +348a3dc,100010 +348a3e0,30301 +348a3e4,1000000 +348a3ec,100018 +348a3f0,10301 +348a3f4,1000000 +348a3fc,100010 +348a400,100301 +348a404,1000000 +348a40c,200020 +348a410,10302 +348a414,2000000 +348a41c,8000e +348a420,5f0301 +348a424,1000000 +348a42c,180018 +348a430,140003 +348a434,4000000 +348a43c,200020 +348a440,5a0003 +348a444,4000000 +348a44c,100010 +348a450,60301 +348a454,1000000 +348a45c,100010 +348a460,30003 +348a464,4000000 +348a468,e7000000 +348a470,d9000000 +348a478,ed000000 +348a47c,5003c0 +348a480,ef002cf0 +348a484,504244 +348a488,df000000 +348a4a4,4d8e0032 +348a4a8,ce2001 +348a4ac,80407de0 +348a4b0,80407870 +348a4b4,ffffffff +348a4b8,4d8c0034 +348a4bc,bb1201 +348a4c0,80407c18 +348a4c4,80407870 +348a4c8,ffffffff +348a4cc,4d090033 +348a4d0,d92801 +348a4d4,80407c18 +348a4d8,80407870 +348a4dc,ffffffff +348a4e0,53030031 +348a4e4,e93500 +348a4e8,80407c18 +348a4ec,80407870 +348a4f0,ffffffff +348a4f4,53060030 +348a4f8,e73300 +348a4fc,80407c18 +348a500,80407870 +348a504,ffffffff +348a508,530e0035 +348a50c,e83400 +348a510,80407c18 +348a514,80407870 +348a518,ffffffff +348a51c,4d000037 +348a520,c71b01 +348a524,80407c18 +348a528,80407870 +348a52c,ffffffff +348a530,530a0036 +348a534,dd2d00 +348a538,80407c18 +348a53c,80407870 +348a540,ffffffff +348a544,530b004f +348a548,dd2e00 +348a54c,80407c18 +348a550,80407870 +348a554,ffffffff +348a558,530f0039 +348a55c,ea3600 +348a560,80407c18 +348a564,80407870 +348a568,ffffffff +348a56c,53230069 +348a570,ef3b00 +348a574,80407c18 +348a578,80407ad4 +348a57c,ffffffff +348a580,5308003a +348a584,de2f00 +348a588,80407c18 +348a58c,80407870 +348a590,ffffffff +348a594,53110038 +348a598,f64100 +348a59c,80407c18 +348a5a0,80407870 +348a5a4,ffffffff +348a5a8,532f0002 +348a5ac,1095e00 +348a5b0,80407c18 +348a5b4,80407870 +348a5b8,ffffffff +348a5bc,53140042 +348a5c0,c60100 +348a5c4,80407c18 +348a5c8,80407870 +348a5cc,ffffffff +348a5d0,53150043 +348a5d4,eb3800 +348a5d8,80407c18 +348a5dc,80407870 +348a5e0,ffffffff +348a5e4,53160044 +348a5e8,eb3700 +348a5ec,80407c18 +348a5f0,80407870 +348a5f4,ffffffff +348a5f8,53170045 +348a5fc,eb3900 +348a600,80407c18 +348a604,80407870 +348a608,ffffffff +348a60c,53180046 +348a610,c60100 +348a614,80407c18 +348a618,80407870 +348a61c,ffffffff +348a620,531a0098 +348a624,df3000 +348a628,80407c18 +348a62c,80407870 +348a630,ffffffff +348a634,531b0099 +348a638,10b4500 +348a63c,80407e20 +348a640,80407870 +348a644,ffffffff +348a648,53100048 +348a64c,f33e01 +348a650,80407c18 +348a654,80407870 +348a658,ffffffff +348a65c,53250010 +348a660,1364f00 +348a664,80407c18 +348a668,80407870 +348a66c,ffffffff +348a670,53260011 +348a674,1353200 +348a678,80407c18 +348a67c,80407870 +348a680,ffffffff +348a684,5322000b +348a688,1094400 +348a68c,80407c18 +348a690,80407870 +348a694,ffffffff +348a698,53240012 +348a69c,1343100 +348a6a0,80407c18 +348a6a4,80407870 +348a6a8,ffffffff +348a6ac,53270013 +348a6b0,1375000 +348a6b4,80407c18 +348a6b8,80407870 +348a6bc,ffffffff +348a6c0,532b0017 +348a6c4,1385100 +348a6c8,80407c18 +348a6cc,80407870 +348a6d0,ffffffff +348a6d4,532d9001 +348a6d8,da2900 +348a6dc,80407c18 +348a6e0,80407870 +348a6e4,ffffffff +348a6e8,532e000b +348a6ec,1094400 +348a6f0,80407c18 +348a6f4,80407870 +348a6f8,ffffffff +348a6fc,53300003 +348a700,1415400 +348a704,80407c18 +348a708,80407870 +348a70c,ffffffff +348a710,53310004 +348a714,1405300 +348a718,80407c18 +348a71c,80407870 +348a720,ffffffff +348a724,53320005 +348a728,f54000 +348a72c,80407c18 +348a730,80407870 +348a734,ffffffff +348a738,53330008 +348a73c,1435600 +348a740,80407c18 +348a744,80407870 +348a748,ffffffff +348a74c,53340009 +348a750,1465700 +348a754,80407c18 +348a758,80407870 +348a75c,ffffffff +348a760,5335000d +348a764,1495a00 +348a768,80407c18 +348a76c,80407870 +348a770,ffffffff +348a774,5336000e +348a778,13f5200 +348a77c,80407c18 +348a780,80407870 +348a784,ffffffff +348a788,5337000a +348a78c,1425500 +348a790,80407c18 +348a794,80407870 +348a798,ffffffff +348a79c,533b00a4 +348a7a0,18d7400 +348a7a4,80407c18 +348a7a8,80407870 +348a7ac,ffffffff +348a7b0,533d004b +348a7b4,f84300 +348a7b8,80407c18 +348a7bc,80407870 +348a7c0,ffffffff +348a7c4,533e004c +348a7c8,cb1d01 +348a7cc,80407c18 +348a7d0,80407870 +348a7d4,ffffffff +348a7d8,533f004d +348a7dc,dc2c01 +348a7e0,80407c18 +348a7e4,80407870 +348a7e8,ffffffff +348a7ec,5340004e +348a7f0,ee3a00 +348a7f4,80407c18 +348a7f8,80407870 +348a7fc,ffffffff +348a800,53420050 +348a804,f23c00 +348a808,80407c18 +348a80c,80407870 +348a810,ffffffff +348a814,53430051 +348a818,f23d00 +348a81c,80407c18 +348a820,80407870 +348a824,ffffffff +348a828,53450053 +348a82c,1184700 +348a830,80407c18 +348a834,80407870 +348a838,ffffffff +348a83c,53460054 +348a840,1575f00 +348a844,80407c18 +348a848,80407870 +348a84c,ffffffff +348a850,534b0056 +348a854,be1600 +348a858,80407c18 +348a85c,80407870 +348a860,ffffffff +348a864,534c0057 +348a868,be1700 +348a86c,80407c18 +348a870,80407870 +348a874,ffffffff +348a878,534d0058 +348a87c,bf1800 +348a880,80407c18 +348a884,80407870 +348a888,ffffffff +348a88c,534e0059 +348a890,bf1900 +348a894,80407c18 +348a898,80407870 +348a89c,ffffffff +348a8a0,534f005a +348a8a4,bf1a00 +348a8a8,80407c18 +348a8ac,80407870 +348a8b0,ffffffff +348a8b4,5351005b +348a8b8,12d4900 +348a8bc,80407c18 +348a8c0,80407870 +348a8c4,ffffffff +348a8c8,5352005c +348a8cc,12d4a00 +348a8d0,80407c18 +348a8d4,80407870 +348a8d8,ffffffff +348a8dc,535300cd +348a8e0,db2a00 +348a8e4,80407c18 +348a8e8,80407870 +348a8ec,ffffffff +348a8f0,535400ce +348a8f4,db2b00 +348a8f8,80407c18 +348a8fc,80407870 +348a900,ffffffff +348a904,536f0068 +348a908,c82100 +348a90c,80407c18 +348a910,80407870 +348a914,ffffffff +348a918,5370007b +348a91c,d72400 +348a920,80407c18 +348a924,80407870 +348a928,ffffffff +348a92c,5341004a +348a930,10e4600 +348a934,80407c18 +348a938,80407a50 +348a93c,ffffffff +348a940,4d5800dc +348a944,1194801 +348a948,80407dfc +348a94c,80407870 +348a950,ffffffff +348a954,3d7200c6 +348a958,bd1301 +348a95c,80407c18 +348a960,80407878 +348a964,ffffffff +348a968,3e7a00c2 +348a96c,bd1401 +348a970,80407c18 +348a974,80407878 +348a978,ffffffff +348a97c,537400c7 +348a980,b90a02 +348a984,80407c18 +348a988,80407870 +348a98c,ffffffff +348a990,53750067 +348a994,b80b01 +348a998,80407c18 +348a99c,80407870 +348a9a0,ffffffff +348a9a4,53760066 +348a9a8,c81c01 +348a9ac,80407c18 +348a9b0,80407870 +348a9b4,ffffffff +348a9b8,53770060 +348a9bc,aa0203 +348a9c0,80407c18 +348a9c4,80407870 +348a9c8,ffffffff +348a9cc,53780052 +348a9d0,cd1e01 +348a9d4,80407c18 +348a9d8,80407870 +348a9dc,ffffffff +348a9e0,53790052 +348a9e4,cd1f01 +348a9e8,80407c18 +348a9ec,80407870 +348a9f0,ffffffff +348a9f4,5356005e +348a9f8,d12200 +348a9fc,80407c18 +348aa00,80407aa8 +348aa04,1ffff +348aa08,5357005f +348aa0c,d12300 +348aa10,80407c18 +348aa14,80407aa8 +348aa18,2ffff +348aa1c,5321009a +348aa20,da2900 +348aa24,80407c18 +348aa28,80407870 +348aa2c,ffffffff +348aa30,4d830055 +348aa34,b70901 +348aa38,80407c18 +348aa3c,80407870 +348aa40,ffffffff +348aa44,4d9200e6 +348aa48,d82501 +348aa4c,80407dc4 +348aa50,80407870 +348aa54,ffffffff +348aa58,4d9300e6 +348aa5c,d82601 +348aa60,80407dc4 +348aa64,80407870 +348aa68,ffffffff +348aa6c,4d9400e6 +348aa70,d82701 +348aa74,80407dc4 +348aa78,80407870 +348aa7c,ffffffff +348aa80,4d84006f +348aa84,17f6d01 +348aa88,80407c18 +348aa8c,80407870 +348aa90,ffffffff +348aa94,4d8500cc +348aa98,17f6e01 +348aa9c,80407c18 +348aaa0,80407870 +348aaa4,ffffffff +348aaa8,4d8600f0 +348aaac,17f6f01 +348aab0,80407c18 +348aab4,80407870 +348aab8,ffffffff +348aabc,3d7200c6 +348aac0,bd1301 +348aac4,80407c18 +348aac8,80407878 +348aacc,ffffffff +348aad0,53820098 +348aad4,df3000 +348aad8,80407c18 +348aadc,80407870 +348aae0,ffffffff +348aae4,53280014 +348aae8,1505b00 +348aaec,80407c18 +348aaf0,80407870 +348aaf4,ffffffff +348aaf8,53290015 +348aafc,1515c00 +348ab00,80407c18 +348ab04,80407870 +348ab08,ffffffff +348ab0c,532a0016 +348ab10,1525d00 +348ab14,80407c18 +348ab18,80407870 +348ab1c,ffffffff +348ab20,53500079 +348ab24,1475800 +348ab28,80407c18 +348ab2c,80407870 +348ab30,ffffffff +348ab34,4d8700f1 +348ab38,17f7101 +348ab3c,80407c18 +348ab40,80407870 +348ab44,ffffffff +348ab48,4d8800f2 +348ab4c,17f7201 +348ab50,80407c18 +348ab54,80407870 +348ab58,ffffffff +348ab5c,533d000c +348ab60,f84300 +348ab64,80407c18 +348ab68,80407978 +348ab6c,ffffffff +348ab70,53040070 +348ab74,1586000 +348ab78,80407c18 +348ab7c,80407870 +348ab80,ffffffff +348ab84,530c0071 +348ab88,1586100 +348ab8c,80407c18 +348ab90,80407870 +348ab94,ffffffff +348ab98,53120072 +348ab9c,1586200 +348aba0,80407c18 +348aba4,80407870 +348aba8,ffffffff +348abac,5b7100b4 +348abb0,15c6301 +348abb4,80407c18 +348abb8,80407870 +348abbc,ffffffff +348abc0,530500ad +348abc4,15d6400 +348abc8,80407c18 +348abcc,80407870 +348abd0,ffffffff +348abd4,530d00ae +348abd8,15d6500 +348abdc,80407c18 +348abe0,80407870 +348abe4,ffffffff +348abe8,531300af +348abec,15d6600 +348abf0,80407c18 +348abf4,80407870 +348abf8,ffffffff +348abfc,53470007 +348ac00,17b6c00 +348ac04,80407c18 +348ac08,80407870 +348ac0c,ffffffff +348ac10,53480007 +348ac14,17b6c00 +348ac18,80407c18 +348ac1c,80407870 +348ac20,ffffffff +348ac24,4d8a0037 +348ac28,c71b01 +348ac2c,80407c18 +348ac30,80407870 +348ac34,ffffffff +348ac38,4d8b0037 +348ac3c,c71b01 +348ac40,80407c18 +348ac44,80407870 +348ac48,ffffffff +348ac4c,4d8c0034 +348ac50,bb1201 +348ac54,80407c18 +348ac58,80407870 +348ac5c,ffffffff +348ac60,4d8d0034 +348ac64,bb1201 +348ac68,80407c18 +348ac6c,80407870 +348ac70,ffffffff +348ac74,4d020032 +348ac78,ce2001 +348ac7c,80407de0 +348ac80,80407870 +348ac84,ffffffff +348ac88,4d8f0032 +348ac8c,ce2001 +348ac90,80407de0 +348ac94,80407870 +348ac98,ffffffff +348ac9c,4d900032 +348aca0,ce2001 +348aca4,80407de0 +348aca8,80407870 +348acac,ffffffff +348acb0,4d910032 +348acb4,ce2001 +348acb8,80407de0 +348acbc,80407870 +348acc0,ffffffff +348acc4,4d9500dc +348acc8,1194801 +348accc,80407dfc +348acd0,80407870 +348acd4,ffffffff +348acd8,4d960033 +348acdc,d92801 +348ace0,80407c18 +348ace4,80407870 +348ace8,ffffffff +348acec,4d970033 +348acf0,d92801 +348acf4,80407c18 +348acf8,80407870 +348acfc,ffffffff +348ad00,53190047 +348ad04,f43f00 +348ad08,80407c18 +348ad0c,80407870 +348ad10,ffffffff +348ad14,531d007a +348ad18,1746800 +348ad1c,80407c18 +348ad20,80407870 +348ad24,ffffffff +348ad28,531c005d +348ad2c,1736700 +348ad30,80407c18 +348ad34,80407870 +348ad38,ffffffff +348ad3c,53200097 +348ad40,1766a00 +348ad44,80407c18 +348ad48,80407870 +348ad4c,ffffffff +348ad50,531e00f9 +348ad54,1767000 +348ad58,80407c18 +348ad5c,80407870 +348ad60,ffffffff +348ad64,537700f3 +348ad68,aa0201 +348ad6c,80407c18 +348ad70,80407870 +348ad74,ffffffff +348ad78,4d8400f4 +348ad7c,17f6d01 +348ad80,80407c18 +348ad84,80407870 +348ad88,ffffffff +348ad8c,4d8500f5 +348ad90,17f6e01 +348ad94,80407c18 +348ad98,80407870 +348ad9c,ffffffff +348ada0,4d8600f6 +348ada4,17f6f01 +348ada8,80407c18 +348adac,80407870 +348adb0,ffffffff +348adb4,4d8700f7 +348adb8,17f7101 +348adbc,80407c18 +348adc0,80407870 +348adc4,ffffffff +348adc8,537a00fa +348adcc,bd1401 +348add0,80407c18 +348add4,80407878 +348add8,ffffffff +348addc,53980090 +348ade0,c71b01 +348ade4,80407c18 +348ade8,80407870 +348adec,ffffffff +348adf0,53990091 +348adf4,c71b01 +348adf8,80407c18 +348adfc,80407870 +348ae00,ffffffff +348ae04,539a00a7 +348ae08,bb1201 +348ae0c,80407c18 +348ae10,80407870 +348ae14,ffffffff +348ae18,539b00a8 +348ae1c,bb1201 +348ae20,80407c18 +348ae24,80407870 +348ae28,ffffffff +348ae2c,5349006c +348ae30,17b7300 +348ae34,80407c18 +348ae38,80407870 +348ae3c,ffffffff +348ae40,53419002 +348ae48,80407c18 +348ae4c,80407a74 +348ae50,ffffffff +348ae90,ffffffff +348ae94,dd2d00 +348ae98,80407c20 +348ae9c,80407870 +348aea0,ffffffff +348aea4,ffffffff +348aea8,1475800 +348aeac,80407c34 +348aeb0,80407870 +348aeb4,ffffffff +348aeb8,ffffffff +348aebc,bf1800 +348aec0,80407c60 +348aec4,80407870 +348aec8,ffffffff +348aecc,ffffffff +348aed0,e93500 +348aed4,80407c8c +348aed8,80407870 +348aedc,ffffffff +348aee0,ffffffff +348aee4,e73300 +348aee8,80407cb4 +348aeec,80407870 +348aef0,ffffffff +348aef4,ffffffff +348aef8,d12200 +348aefc,80407ce4 +348af00,80407870 +348af04,ffffffff +348af08,ffffffff +348af0c,db2a00 +348af10,80407d14 +348af14,80407870 +348af18,ffffffff +348af1c,ffffffff +348af20,bb1201 +348af24,80407d2c +348af28,80407870 +348af2c,ffffffff +348af30,ffffffff +348af34,c71b01 +348af38,80407d48 +348af3c,80407870 +348af40,ffffffff +348af44,ffffffff +348af48,d92800 +348af4c,80407d74 +348af50,80407870 +348af54,ffffffff +348af58,ffffffff +348af5c,cd1e00 +348af60,80407d64 +348af64,80407870 +348af68,ffffffff +348af6c,ffffffff +348af70,10e4600 +348af74,80407da4 +348af78,80407870 +348af7c,ffffffff +348af80,53410043 +348af84,c60100 +348af88,80407c18 +348af8c,80407984 +348af90,15ffff +348af94,53410044 +348af98,c60100 +348af9c,80407c18 +348afa0,80407984 +348afa4,16ffff +348afa8,53410045 +348afac,c60100 +348afb0,80407c18 +348afb4,80407984 +348afb8,17ffff +348afbc,53410046 +348afc0,1776b00 +348afc4,80407c18 +348afc8,80407984 +348afcc,18ffff +348afd0,53410047 +348afd4,f43f00 +348afd8,80407c18 +348afdc,80407984 +348afe0,19ffff +348afe4,5341005d +348afe8,1736700 +348afec,80407c18 +348aff0,80407984 +348aff4,1cffff +348aff8,5341007a +348affc,1746800 +348b000,80407c18 +348b004,80407984 +348b008,1dffff +348b00c,534100f9 +348b010,1767000 +348b014,80407c18 +348b018,80407984 +348b01c,1effff +348b020,53410097 +348b024,1766a00 +348b028,80407c18 +348b02c,80407984 +348b030,20ffff +348b034,53410006 +348b038,b90a02 +348b03c,80407c18 +348b040,804079bc +348b044,10003 +348b048,5341001c +348b04c,b90a02 +348b050,80407c18 +348b054,804079bc +348b058,10004 +348b05c,5341001d +348b060,b90a02 +348b064,80407c18 +348b068,804079bc +348b06c,10005 +348b070,5341001e +348b074,b90a02 +348b078,80407c18 +348b07c,804079bc +348b080,10006 +348b084,5341002a +348b088,b90a02 +348b08c,80407c18 +348b090,804079bc +348b094,10007 +348b098,53410061 +348b09c,b90a02 +348b0a0,80407c18 +348b0a4,804079bc +348b0a8,1000a +348b0ac,53410062 +348b0b0,b80b01 +348b0b4,80407c18 +348b0b8,804079bc +348b0bc,20000 +348b0c0,53410063 +348b0c4,b80b01 +348b0c8,80407c18 +348b0cc,804079bc +348b0d0,20001 +348b0d4,53410064 +348b0d8,b80b01 +348b0dc,80407c18 +348b0e0,804079bc +348b0e4,20002 +348b0e8,53410065 +348b0ec,b80b01 +348b0f0,80407c18 +348b0f4,804079bc +348b0f8,20003 +348b0fc,5341007c +348b100,b80b01 +348b104,80407c18 +348b108,804079bc +348b10c,20004 +348b110,5341007d +348b114,b80b01 +348b118,80407c18 +348b11c,804079bc +348b120,20005 +348b124,5341007e +348b128,b80b01 +348b12c,80407c18 +348b130,804079bc +348b134,20006 +348b138,5341007f +348b13c,b80b01 +348b140,80407c18 +348b144,804079bc +348b148,20007 +348b14c,534100a2 +348b150,b80b01 +348b154,80407c18 +348b158,804079bc +348b15c,20008 +348b160,53410087 +348b164,b80b01 +348b168,80407c18 +348b16c,804079bc +348b170,20009 +348b174,53410088 +348b178,c81c01 +348b17c,80407c18 +348b180,804079bc +348b184,40000 +348b188,53410089 +348b18c,c81c01 +348b190,80407c18 +348b194,804079bc +348b198,40001 +348b19c,5341008a +348b1a0,c81c01 +348b1a4,80407c18 +348b1a8,804079bc +348b1ac,40002 +348b1b0,5341008b +348b1b4,c81c01 +348b1b8,80407c18 +348b1bc,804079bc +348b1c0,40003 +348b1c4,5341008c +348b1c8,c81c01 +348b1cc,80407c18 +348b1d0,804079bc +348b1d4,40004 +348b1d8,5341008e +348b1dc,c81c01 +348b1e0,80407c18 +348b1e4,804079bc +348b1e8,40005 +348b1ec,5341008f +348b1f0,c81c01 +348b1f4,80407c18 +348b1f8,804079bc +348b1fc,40006 +348b200,534100a3 +348b204,c81c01 +348b208,80407c18 +348b20c,804079bc +348b210,40007 +348b214,534100a5 +348b218,c81c01 +348b21c,80407c18 +348b220,804079bc +348b224,40008 +348b228,53410092 +348b22c,c81c01 +348b230,80407c18 +348b234,804079bc +348b238,40009 +348b23c,53410093 +348b240,aa0203 +348b244,80407c18 +348b248,804079d0 +348b24c,3ffff +348b250,53410094 +348b254,aa0203 +348b258,80407c18 +348b25c,804079d0 +348b260,4ffff +348b264,53410095 +348b268,aa0203 +348b26c,80407c18 +348b270,804079d0 +348b274,5ffff +348b278,534100a6 +348b27c,aa0203 +348b280,80407c18 +348b284,804079d0 +348b288,6ffff +348b28c,534100a9 +348b290,aa0203 +348b294,80407c18 +348b298,804079d0 +348b29c,7ffff +348b2a0,5341009b +348b2a4,aa0203 +348b2a8,80407c18 +348b2ac,804079d0 +348b2b0,8ffff +348b2b4,5341009f +348b2b8,aa0203 +348b2bc,80407c18 +348b2c0,804079d0 +348b2c4,bffff +348b2c8,534100a0 +348b2cc,aa0203 +348b2d0,80407c18 +348b2d4,804079d0 +348b2d8,cffff +348b2dc,534100a1 +348b2e0,aa0203 +348b2e4,80407c18 +348b2e8,804079d0 +348b2ec,dffff +348b2f0,534100e9 +348b2f4,1941300 +348b2f8,80407c18 +348b2fc,804079f4 +348b300,ffffffff +348b304,534100e4 +348b308,cd1e00 +348b30c,80407c18 +348b310,80407a10 +348b314,ffffffff +348b318,534100e8 +348b31c,cd1f00 +348b320,80407c18 +348b324,80407a2c +348b328,ffffffff +348b32c,53410073 +348b330,b60300 +348b334,80407c18 +348b338,80407a5c +348b33c,6ffff +348b340,53410074 +348b344,b60400 +348b348,80407c18 +348b34c,80407a5c +348b350,7ffff +348b354,53410075 +348b358,b60500 +348b35c,80407c18 +348b360,80407a5c +348b364,8ffff +348b368,53410076 +348b36c,b60600 +348b370,80407c18 +348b374,80407a5c +348b378,9ffff +348b37c,53410077 +348b380,b60700 +348b384,80407c18 +348b388,80407a5c +348b38c,affff +348b390,53410078 +348b394,b60800 +348b398,80407c18 +348b39c,80407a5c +348b3a0,bffff +348b3a4,534100d4 +348b3a8,b60400 +348b3ac,80407c18 +348b3b0,80407a5c +348b3b4,cffff +348b3b8,534100d2 +348b3bc,b60600 +348b3c0,80407c18 +348b3c4,80407a5c +348b3c8,dffff +348b3cc,534100d1 +348b3d0,b60300 +348b3d4,80407c18 +348b3d8,80407a5c +348b3dc,effff +348b3e0,534100d3 +348b3e4,b60800 +348b3e8,80407c18 +348b3ec,80407a5c +348b3f0,fffff +348b3f4,534100d5 +348b3f8,b60500 +348b3fc,80407c18 +348b400,80407a5c +348b404,10ffff +348b408,534100d6 +348b40c,b60700 +348b410,80407c18 +348b414,80407a5c +348b418,11ffff +348b41c,534100f8 +348b420,d12300 +348b424,80407c18 +348b428,80407940 +348b42c,3ffff +348b430,53149099 +348b434,10b4500 +348b438,80407c18 +348b43c,80407870 +348b440,ffffffff +348b444,53419048 +348b448,f33e00 +348b44c,80407c18 +348b450,80407a90 +348b454,ffffffff +348b458,53419003 +348b45c,1933500 +348b460,80407c18 +348b464,80407884 +348b468,ffffffff +348b46c,53419097 +348b470,ef3b00 +348b474,80407c18 +348b478,80407870 +348b47c,ffffffff +348b480,4d419098 +348b484,ef3b01 +348b488,80407c18 +348b48c,80407870 +348b490,ffffffff +348b498,1 +348b49c,1 +348b4a0,d +348b4a4,41200000 +348b4a8,41200000 +348b4ac,8040a438 +348b4b0,8040a428 +348b4b8,df000000 +348b4c0,80112f1a +348b4c4,80112f14 +348b4c8,80112f0e +348b4cc,80112f08 +348b4d0,8011320a +348b4d4,80113204 +348b4d8,801131fe +348b4dc,801131f8 +348b4e0,801131f2 +348b4e4,801131ec +348b4e8,801131e6 +348b4ec,801131e0 +348b4f0,8012be1e +348b4f4,8012be20 +348b4f8,8012be1c +348b4fc,8012be12 +348b500,8012be14 +348b504,8012be10 +348b508,801c7672 +348b50c,801c767a +348b510,801c7950 +348b514,8011bd50 +348b518,8011bd38 +348b51c,801d8b9e +348b520,801d8b92 +348b524,c80000 +348b52c,ff0046 +348b530,32ffff +348c680,db000 +348c684,db000 +348c688,db000 +348c68c,cb000 +348c690,cb000 +348c694,ca000 +348c69c,db000 +348c6a0,db000 +348c6b8,e8ac00 +348c6bc,e8ac00 +348c6c0,e8ac00 +348c6c4,e8ac00 +348c6ec,d77d0 +348c6f0,2e3ab0 +348c6f4,7d0c90 +348c6f8,8ffffffd +348c6fc,c96e00 +348c700,2e4ac00 +348c704,effffff4 +348c708,ab0e500 +348c70c,c95e000 +348c710,e59c000 +348c728,79000 +348c72c,5ceeb40 +348c730,cc8a990 +348c734,da79000 +348c738,8ecb400 +348c73c,4adda0 +348c740,797e2 +348c744,c88aae0 +348c748,6ceed70 +348c74c,79000 +348c750,79000 +348c760,6dea0000 +348c764,c94d6000 +348c768,c94d6033 +348c76c,6deb6bc6 +348c770,8cb600 +348c774,7ca4cec4 +348c778,3109c3bb +348c77c,9c3bb +348c780,2ced4 +348c798,4cefb00 +348c79c,ad50000 +348c7a0,8e30000 +348c7a4,9ec0000 +348c7a8,7e4db0ab +348c7ac,bb05e8aa +348c7b0,bc008ed6 +348c7b4,7e936ed0 +348c7b8,8ded9ea +348c7d0,ca000 +348c7d4,ca000 +348c7d8,ca000 +348c7dc,ca000 +348c800,c900 +348c804,7e200 +348c808,cb000 +348c80c,e8000 +348c810,6f3000 +348c814,8e0000 +348c818,8e0000 +348c81c,6f4000 +348c820,e8000 +348c824,cb000 +348c828,7e200 +348c82c,c900 +348c838,bb0000 +348c83c,5e4000 +348c840,ca000 +348c844,ad000 +348c848,7e100 +348c84c,6f400 +348c850,6f400 +348c854,7e100 +348c858,ad000 +348c85c,ca000 +348c860,5e4000 +348c864,bb0000 +348c878,a8000 +348c87c,c8a8ab0 +348c880,3beda10 +348c884,3beda10 +348c888,c8a8ab0 +348c88c,a8000 +348c8b4,ca000 +348c8b8,ca000 +348c8bc,ca000 +348c8c0,affffff8 +348c8c4,ca000 +348c8c8,ca000 +348c8cc,ca000 +348c904,dd000 +348c908,ec000 +348c90c,4f8000 +348c910,9d0000 +348c934,dffb00 +348c974,ec000 +348c978,ec000 +348c990,bc0 +348c994,4e60 +348c998,bc00 +348c99c,3e800 +348c9a0,ad000 +348c9a4,1e9000 +348c9a8,9e2000 +348c9ac,da0000 +348c9b0,7e30000 +348c9b4,cb00000 +348c9b8,6e500000 +348c9c8,3ceeb00 +348c9cc,bd57e90 +348c9d0,e900bd0 +348c9d4,5f7009e0 +348c9d8,6f6cb9e0 +348c9dc,5f7009e0 +348c9e0,e900bd0 +348c9e4,bd57e90 +348c9e8,3ceeb00 +348ca00,affe000 +348ca04,8e000 +348ca08,8e000 +348ca0c,8e000 +348ca10,8e000 +348ca14,8e000 +348ca18,8e000 +348ca1c,8e000 +348ca20,8ffffe0 +348ca38,8deea00 +348ca3c,c837e90 +348ca40,cc0 +348ca44,2ea0 +348ca48,bd20 +348ca4c,bd400 +348ca50,bd4000 +348ca54,bd40000 +348ca58,2fffffd0 +348ca70,7ceea00 +348ca74,c837e90 +348ca78,cb0 +348ca7c,27e90 +348ca80,bffb00 +348ca84,27da0 +348ca88,ad0 +348ca8c,5c627db0 +348ca90,9deeb30 +348caa8,2de00 +348caac,bde00 +348cab0,7d9e00 +348cab4,2d79e00 +348cab8,bb09e00 +348cabc,6e409e00 +348cac0,9ffffff7 +348cac4,9e00 +348cac8,9e00 +348cae0,cffff50 +348cae4,ca00000 +348cae8,ca00000 +348caec,ceeea00 +348caf0,38e90 +348caf4,bc0 +348caf8,bc0 +348cafc,5c638e90 +348cb00,9deda00 +348cb18,aeec30 +348cb1c,ae83980 +348cb20,e900000 +348cb24,4faeec40 +348cb28,6fd55dc0 +348cb2c,5f9009e0 +348cb30,e9009e0 +348cb34,cd55dc0 +348cb38,3ceec40 +348cb50,5fffffd0 +348cb54,da0 +348cb58,7e40 +348cb5c,cc00 +348cb60,4e800 +348cb64,ad000 +348cb68,da000 +348cb6c,8e4000 +348cb70,cc0000 +348cb88,5ceec30 +348cb8c,dc45db0 +348cb90,e900bd0 +348cb94,bc45d90 +348cb98,4dffc20 +348cb9c,1db45cc0 348cba0,5f6009e0 -348cbb8,dffffb0 -348cbbc,db000 -348cbc0,db000 -348cbc4,db000 -348cbc8,db000 -348cbcc,db000 -348cbd0,db000 -348cbd4,db000 -348cbd8,dffffb0 -348cbf0,cfff40 -348cbf4,7f40 -348cbf8,7f40 -348cbfc,7f40 -348cc00,7f40 -348cc04,7f30 -348cc08,75009e00 -348cc0c,8d64dc00 -348cc10,2beec500 -348cc28,5f6009e7 -348cc2c,5f609e70 -348cc30,5f69e700 -348cc34,5fbe8000 -348cc38,5fedb000 -348cc3c,5f87e800 -348cc40,5f60ae40 -348cc44,5f601dc0 -348cc48,5f6006ea -348cc60,cc00000 -348cc64,cc00000 -348cc68,cc00000 -348cc6c,cc00000 -348cc70,cc00000 -348cc74,cc00000 -348cc78,cc00000 -348cc7c,cc00000 -348cc80,cfffff7 -348cc98,afa00cf8 -348cc9c,aed02ee8 -348cca0,add59be8 -348cca4,adaac8e8 -348cca8,ad5de1e8 -348ccac,ad0db0e8 -348ccb0,ad0000e8 -348ccb4,ad0000e8 -348ccb8,ad0000e8 -348ccd0,5fc008e0 -348ccd4,5fe608e0 -348ccd8,5fcb08e0 -348ccdc,5f7e48e0 -348cce0,5f5ca8e0 -348cce4,5f57e8e0 -348cce8,5f50dce0 -348ccec,5f509ee0 -348ccf0,5f502ee0 -348cd08,4ceeb20 -348cd0c,cd56ea0 -348cd10,3e800ae0 -348cd14,7f5008f2 -348cd18,7f4008f4 -348cd1c,7f5008f2 -348cd20,3e800ae0 -348cd24,cd56eb0 -348cd28,4ceeb20 -348cd40,dffed60 -348cd44,db05ce2 -348cd48,db006f6 -348cd4c,db006f6 -348cd50,db05ce2 -348cd54,dffed60 -348cd58,db00000 -348cd5c,db00000 -348cd60,db00000 -348cd78,4ceeb20 -348cd7c,cd56ea0 -348cd80,3e800ae0 -348cd84,7f5008f2 -348cd88,7f4008f4 -348cd8c,7f5008f1 -348cd90,3e800ad0 -348cd94,cd56ea0 -348cd98,4cefc20 -348cd9c,ae50 -348cda0,c80 -348cdb0,5ffeeb20 -348cdb4,5f717eb0 -348cdb8,5f700cd0 -348cdbc,5f716ea0 -348cdc0,5fffea00 -348cdc4,5f72ae40 -348cdc8,5f700db0 -348cdcc,5f7008e5 -348cdd0,5f7000db -348cde8,6ceeb30 -348cdec,dc45a90 -348cdf0,4f600000 -348cdf4,ec60000 -348cdf8,5ceeb40 -348cdfc,6cc0 -348ce00,8e0 -348ce04,c735cd0 -348ce08,8deec50 -348ce20,cffffffb -348ce24,db000 -348ce28,db000 -348ce2c,db000 -348ce30,db000 -348ce34,db000 -348ce38,db000 -348ce3c,db000 -348ce40,db000 -348ce58,4f7009e0 -348ce5c,4f7009e0 -348ce60,4f7009e0 -348ce64,4f7009e0 -348ce68,4f7009e0 -348ce6c,3f7009e0 -348ce70,2e700ad0 -348ce74,dc45dc0 -348ce78,5ceec40 -348ce90,ad0003e8 -348ce94,6f5008e3 -348ce98,e900bc0 -348ce9c,bc00d90 -348cea0,8e15e40 -348cea4,2e7ad00 -348cea8,cbca00 -348ceac,9de600 -348ceb0,3ed000 -348cec8,e80000ad -348cecc,da0000cb -348ced0,cb0000da -348ced4,ac0ec0e8 -348ced8,8d6de1e5 -348cedc,6e9bd8e0 -348cee0,1ec8acd0 -348cee4,de37ec0 -348cee8,cd00ea0 -348cf00,6e7007e7 -348cf04,ad21db0 -348cf08,2daad20 -348cf0c,7ee700 -348cf10,3ee200 -348cf14,bdda00 -348cf18,7e67e60 -348cf1c,3ea00bd0 -348cf20,bd2004e9 -348cf38,ae2005e8 -348cf3c,2da00cc0 -348cf40,7e57e50 -348cf44,ccda00 -348cf48,4ed200 +348cba4,2eb35cd0 +348cba8,7deec50 +348cbc0,6deeb00 +348cbc4,db37e90 +348cbc8,5f500bd0 +348cbcc,5f500be0 +348cbd0,db37ee0 +348cbd4,6dedbe0 +348cbd8,bc0 +348cbdc,9749e70 +348cbe0,5ded800 +348cc00,ec000 +348cc04,ec000 +348cc14,ec000 +348cc18,ec000 +348cc38,ec000 +348cc3c,ec000 +348cc4c,dd000 +348cc50,ec000 +348cc54,4f8000 +348cc58,9d0000 +348cc70,29c8 +348cc74,7bed93 +348cc78,8dda4000 +348cc7c,8dda4000 +348cc80,7bec93 +348cc84,29c8 +348ccac,affffff8 +348ccb8,affffff8 +348cce0,ac810000 +348cce4,4adeb600 +348cce8,6add6 +348ccec,6add6 +348ccf0,4adeb600 +348ccf4,ac810000 +348cd10,4beec30 +348cd14,9a46ea0 +348cd18,1da0 +348cd1c,2cd30 +348cd20,cc100 +348cd24,e9000 +348cd2c,e9000 +348cd30,e9000 +348cd48,1aeed70 +348cd4c,cd739e4 +348cd50,7e2000c9 +348cd54,ba0aeeca +348cd58,d76e64da +348cd5c,d69c00aa +348cd60,d76e64da +348cd64,ba0aeeca +348cd68,6e400000 +348cd6c,ad83000 +348cd70,8dee90 +348cd80,3ed000 +348cd84,9de600 +348cd88,cbcb00 +348cd8c,3e8ad00 +348cd90,8e26f60 +348cd94,cc00ea0 +348cd98,2effffd0 +348cd9c,8e5008f5 +348cda0,cd0001ea +348cdb8,effec40 +348cdbc,e905dc0 +348cdc0,e900ae0 +348cdc4,e905dc0 +348cdc8,efffd50 +348cdcc,e904bd2 +348cdd0,e9005f6 +348cdd4,e904be3 +348cdd8,effed80 +348cdf0,9ded80 +348cdf4,8e936b0 +348cdf8,db00000 +348cdfc,3f900000 +348ce00,5f700000 +348ce04,1e900000 +348ce08,db00000 +348ce0c,8e947b0 +348ce10,9ded80 +348ce28,5ffed800 +348ce2c,5f65ae80 +348ce30,5f600cd0 +348ce34,5f6009e0 +348ce38,5f6009f0 +348ce3c,5f6009e0 +348ce40,5f600cd0 +348ce44,5f65ae80 +348ce48,5ffed800 +348ce60,dffffe0 +348ce64,db00000 +348ce68,db00000 +348ce6c,db00000 +348ce70,dffffc0 +348ce74,db00000 +348ce78,db00000 +348ce7c,db00000 +348ce80,dfffff0 +348ce98,bfffff4 +348ce9c,bd00000 +348cea0,bd00000 +348cea4,bd00000 +348cea8,bffffc0 +348ceac,bd00000 +348ceb0,bd00000 +348ceb4,bd00000 +348ceb8,bd00000 +348ced0,1aeed60 +348ced4,be738a0 +348ced8,4e900000 +348cedc,8f400000 +348cee0,9f10bff2 +348cee4,7f4007f2 +348cee8,4e9007f2 +348ceec,be739f2 +348cef0,1beed90 +348cf08,5f6009e0 +348cf0c,5f6009e0 +348cf10,5f6009e0 +348cf14,5f6009e0 +348cf18,5fffffe0 +348cf1c,5f6009e0 +348cf20,5f6009e0 +348cf24,5f6009e0 +348cf28,5f6009e0 +348cf40,dffffb0 +348cf44,db000 +348cf48,db000 348cf4c,db000 348cf50,db000 348cf54,db000 348cf58,db000 -348cf70,efffff8 -348cf74,bd3 -348cf78,7e70 -348cf7c,3ea00 -348cf80,bd100 -348cf84,8e5000 -348cf88,4e90000 -348cf8c,cc00000 -348cf90,1ffffffa -348cfa0,4ffc00 -348cfa4,4f5000 -348cfa8,4f5000 -348cfac,4f5000 -348cfb0,4f5000 -348cfb4,4f5000 -348cfb8,4f5000 -348cfbc,4f5000 -348cfc0,4f5000 -348cfc4,4f5000 -348cfc8,4f5000 -348cfcc,4ffc00 -348cfe0,6e500000 -348cfe4,cb00000 -348cfe8,7e30000 -348cfec,da0000 -348cff0,9e2000 -348cff4,1e9000 -348cff8,ad000 -348cffc,3e800 -348d000,bc00 -348d004,4e60 -348d008,bc0 -348d010,dfe000 -348d014,8e000 -348d018,8e000 -348d01c,8e000 -348d020,8e000 -348d024,8e000 -348d028,8e000 -348d02c,8e000 -348d030,8e000 -348d034,8e000 -348d038,8e000 -348d03c,dfe000 -348d050,5ed200 -348d054,dcdb00 -348d058,ad25e80 -348d05c,7e5007e5 -348d0b4,fffffffd -348d0bc,2ca0000 -348d0c0,2c9000 -348d100,5ceeb10 -348d104,b936da0 -348d108,bc0 -348d10c,8deffc0 -348d110,3e930bd0 -348d114,4f827ed0 -348d118,aeedbd0 -348d128,d900000 -348d12c,d900000 -348d130,d900000 -348d134,d900000 -348d138,dbdec40 -348d13c,de65dc0 -348d140,db008e0 -348d144,da007f2 -348d148,db008e0 -348d14c,de64db0 -348d150,dbdec40 -348d170,8ded70 -348d174,7e936a0 -348d178,cc00000 -348d17c,db00000 -348d180,cc00000 -348d184,7e936a0 -348d188,8ded70 -348d198,bc0 -348d19c,bc0 -348d1a0,bc0 -348d1a4,bc0 -348d1a8,5dedcc0 -348d1ac,dc48ec0 -348d1b0,5f600cc0 -348d1b4,7f300bc0 -348d1b8,5f600cc0 -348d1bc,dc48ec0 -348d1c0,5dedcc0 -348d1e0,3beec30 -348d1e4,cd54cc0 -348d1e8,4f6007e0 -348d1ec,6ffffff3 -348d1f0,4f500000 -348d1f4,cc538c0 -348d1f8,3beec60 -348d208,5ded0 -348d20c,cb200 -348d210,d9000 -348d214,e8000 -348d218,dffffd0 -348d21c,e8000 -348d220,e8000 -348d224,e8000 -348d228,e8000 -348d22c,e8000 -348d230,e8000 -348d250,5dedcc0 -348d254,dc48ec0 -348d258,5f600cc0 -348d25c,7f300bc0 -348d260,5f600cc0 -348d264,dc48ec0 -348d268,5dedcb0 -348d26c,ca0 -348d270,9947e60 -348d274,4cee900 -348d278,da00000 -348d27c,da00000 -348d280,da00000 -348d284,da00000 -348d288,dbded40 -348d28c,de65da0 -348d290,db00bc0 -348d294,da00bc0 -348d298,da00bc0 -348d29c,da00bc0 -348d2a0,da00bc0 -348d2b0,bc000 -348d2c0,9ffc000 -348d2c4,bc000 -348d2c8,bc000 -348d2cc,bc000 -348d2d0,bc000 -348d2d4,bc000 -348d2d8,effffe0 -348d2e8,7e000 -348d2f8,7ffe000 -348d2fc,7e000 -348d300,7e000 -348d304,7e000 -348d308,7e000 -348d30c,7e000 -348d310,7e000 -348d314,7e000 -348d318,1bd000 -348d31c,dfe7000 -348d320,bc00000 -348d324,bc00000 -348d328,bc00000 -348d32c,bc00000 -348d330,bc03dc2 -348d334,bc3db00 -348d338,bddc000 -348d33c,bfce500 -348d340,bd0cd10 -348d344,bc03db0 -348d348,bc007e8 -348d358,eff4000 -348d35c,5f4000 -348d360,5f4000 -348d364,5f4000 -348d368,5f4000 -348d36c,5f4000 -348d370,5f4000 -348d374,5f4000 -348d378,4f5000 -348d37c,ea000 -348d380,8efb0 -348d3a0,8dddaec0 -348d3a4,8e4dc5e4 -348d3a8,8d0cb0e6 -348d3ac,8d0ba0e7 -348d3b0,8d0ba0e7 -348d3b4,8d0ba0e7 -348d3b8,8d0ba0e7 -348d3d8,dbded40 -348d3dc,de65da0 -348d3e0,db00bc0 -348d3e4,da00bc0 -348d3e8,da00bc0 -348d3ec,da00bc0 -348d3f0,da00bc0 -348d410,4ceeb20 -348d414,cd56da0 -348d418,1e700ad0 -348d41c,5f6008e0 -348d420,1e700ad0 -348d424,cd46db0 -348d428,4ceeb20 -348d448,dbdec30 -348d44c,de65db0 -348d450,db009e0 -348d454,da007e0 -348d458,db008e0 -348d45c,de65db0 -348d460,dbeec40 -348d464,d900000 -348d468,d900000 -348d46c,d900000 -348d480,4cedcc0 -348d484,cc47ec0 -348d488,1e700cc0 -348d48c,5f600bc0 -348d490,2e700cc0 -348d494,cc47ec0 -348d498,5cedbc0 -348d49c,ac0 -348d4a0,ac0 -348d4a4,ac0 -348d4b8,ccdef9 -348d4bc,ce8300 -348d4c0,cb0000 -348d4c4,ca0000 -348d4c8,ca0000 -348d4cc,ca0000 -348d4d0,ca0000 -348d4f0,4ceea10 -348d4f4,bd45b60 -348d4f8,bd40000 -348d4fc,3bddb20 -348d500,4da0 -348d504,b945ea0 -348d508,5ceeb20 -348d520,8e0000 -348d524,8e0000 -348d528,6fffffb0 -348d52c,8e0000 -348d530,8e0000 -348d534,8e0000 -348d538,8e0000 -348d53c,6e7000 -348d540,befb0 -348d560,da00bc0 -348d564,da00bc0 -348d568,da00bc0 -348d56c,da00bc0 -348d570,da00bc0 -348d574,bd47ec0 -348d578,5dedbc0 -348d598,6e3007e3 -348d59c,d900bc0 -348d5a0,ad01e80 -348d5a4,5e48e20 -348d5a8,dacb00 -348d5ac,9de700 -348d5b0,3ee000 -348d5d0,e80000ac -348d5d4,ca0000ca -348d5d8,ac0db0e7 -348d5dc,6e3dd5e2 -348d5e0,eabcad0 -348d5e4,ce79eb0 -348d5e8,ae15f80 -348d608,3da00bc0 -348d60c,6e69e40 -348d610,9ee700 -348d614,2ed000 -348d618,ccda00 -348d61c,9e46e70 -348d620,6e7009e4 -348d640,6e5005e5 -348d644,da00bd0 -348d648,9e00e90 -348d64c,3e78e30 -348d650,cccc00 -348d654,7ee700 -348d658,de000 -348d65c,da000 -348d660,8e5000 -348d664,dea0000 -348d678,bffffc0 -348d67c,5e70 -348d680,3d900 -348d684,cb000 -348d688,bd2000 -348d68c,9e40000 -348d690,dffffc0 -348d6a0,6dea0 -348d6a4,bd300 -348d6a8,cb000 -348d6ac,cb000 -348d6b0,5ea000 -348d6b4,bfd2000 -348d6b8,7e9000 -348d6bc,db000 -348d6c0,cb000 -348d6c4,cb000 -348d6c8,bd400 -348d6cc,5dea0 -348d6d8,ca000 -348d6dc,ca000 -348d6e0,ca000 -348d6e4,ca000 -348d6e8,ca000 -348d6ec,ca000 -348d6f0,ca000 -348d6f4,ca000 -348d6f8,ca000 -348d6fc,ca000 -348d700,ca000 -348d704,ca000 -348d708,ca000 -348d710,bed3000 -348d714,4e9000 -348d718,da000 -348d71c,ca000 -348d720,bc400 -348d724,5efa0 -348d728,bd500 -348d72c,cb000 -348d730,da000 -348d734,da000 -348d738,5e8000 -348d73c,bec2000 -348d760,5ded83a7 -348d764,9838dec3 -348d7d8,7f024429 -348d7dc,3c334133 -348d7e0,41334633 -348d7e4,44297f02 -348d814,5409 -348d818,4dc548ff -348d81c,41ff43ff -348d820,47ff49ff -348d824,43ff20c5 -348d828,c0000 -348d854,3f75 -348d858,49ff33ff -348d85c,28ff2dff -348d860,33ff39ff -348d864,3cff00ff -348d868,770000 -348d894,329d -348d898,37ff1bff -348d89c,21ff28ff -348d8a0,2fff35ff -348d8a4,3cff00ff -348d8a8,9d0000 -348d8d4,329e -348d8d8,35ff21ff -348d8dc,28ff06ff -348d8e0,9ff3cff -348d8e4,42ff00ff -348d8e8,9e0000 -348d914,359e -348d918,39ff27ff -348d91c,2eff00ff -348d920,2ff42ff -348d924,48ff00ff -348d928,9e0000 -348d954,3a9e -348d958,3eff2eff -348d95c,35ff00ff -348d960,dff48ff -348d964,4dff00ff -348d968,9e0000 -348d994,3e9e -348d998,42ff35ff -348d99c,3bff1bff -348d9a0,27ff4dff -348d9a4,53ff00ff -348d9a8,9e0000 -348d9d4,439e -348d9d8,47ff3bff -348d9dc,41ff47ff -348d9e0,4dff52ff -348d9e4,58ff00ff -348d9e8,9e0000 -348da14,4d9e -348da18,4dff41ff -348da1c,47ff4dff -348da20,52ff57ff -348da24,5cff00ff -348da28,9e0000 -348da44,3f04474f -348da48,3e663e66 -348da4c,43664666 -348da50,48664d66 -348da54,57665bc5 -348da58,53ff47ff -348da5c,4dff52ff -348da60,57ff5cff -348da64,60ff0eff -348da68,19c56666 -348da6c,66666466 -348da70,61665f66 -348da74,5c665a66 -348da78,504f3f04 -348da80,6605 -348da84,4ec34bff -348da88,41ff41ff -348da8c,45ff48ff -348da90,4cff4fff -348da94,55ff59ff -348da98,4fff4dff -348da9c,52ff57ff -348daa0,5cff60ff -348daa4,64ff61ff -348daa8,67ff66ff -348daac,64ff62ff -348dab0,60ff5dff -348dab4,5bff57ff -348dab8,49ff0ec3 -348dabc,50000 -348dac0,3958 -348dac4,44ff31ff -348dac8,20ff25ff -348dacc,2bff31ff -348dad0,38ff3eff -348dad4,44ff49ff -348dad8,4dff52ff -348dadc,57ff5cff -348dae0,60ff64ff -348dae4,68ff67ff -348dae8,64ff60ff -348daec,5cff58ff -348daf0,53ff4eff -348daf4,48ff43ff -348daf8,32ff00ff -348dafc,580000 -348db00,2f71 -348db04,36ff1dff -348db08,1fff26ff -348db0c,2dff34ff -348db10,3aff41ff -348db14,47ff4cff -348db18,52ff57ff -348db1c,5cff60ff -348db20,64ff68ff -348db24,67ff64ff -348db28,60ff5bff -348db2c,57ff51ff -348db30,4cff46ff -348db34,40ff3aff -348db38,27ff00ff -348db3c,710000 -348db40,2f71 -348db44,36ff21ff -348db48,16ff00ff -348db4c,ff00ff -348db50,2cff47ff -348db54,4cff52ff -348db58,57ff5cff -348db5c,60ff64ff -348db60,67ff67ff -348db64,64ff60ff -348db68,5bff57ff -348db6c,52ff0dff -348db70,ff00ff -348db74,aff33ff -348db78,21ff00ff -348db7c,710000 -348db80,3371 -348db84,3aff28ff -348db88,22ff0fff -348db8c,13ff19ff -348db90,39ff4cff -348db94,52ff57ff -348db98,5bff60ff -348db9c,64ff67ff -348dba0,67ff64ff -348dba4,60ff5cff -348dba8,57ff52ff -348dbac,4cff1dff -348dbb0,12ff14ff -348dbb4,19ff2dff -348dbb8,1bff00ff -348dbbc,710000 -348dbc0,3871 -348dbc4,3dff2fff -348dbc8,33ff3aff -348dbcc,40ff46ff -348dbd0,4cff51ff -348dbd4,57ff5bff -348dbd8,60ff64ff -348dbdc,67ff68ff -348dbe0,64ff60ff -348dbe4,5cff57ff -348dbe8,52ff4cff -348dbec,47ff41ff -348dbf0,3aff34ff -348dbf4,2dff26ff -348dbf8,12ff00ff -348dbfc,710000 -348dc00,3569 -348dc04,37ff33ff -348dc08,3aff40ff -348dc0c,46ff4cff -348dc10,51ff57ff -348dc14,5bff60ff -348dc18,64ff67ff -348dc1c,68ff64ff -348dc20,60ff5cff -348dc24,57ff52ff -348dc28,4dff47ff -348dc2c,41ff3aff -348dc30,34ff2dff -348dc34,26ff1fff -348dc38,6ff00ff -348dc3c,690000 -348dc40,1e21 -348dc44,2f600ff -348dc48,ff00ff -348dc4c,ff00ff -348dc50,ff00ff -348dc54,2ff1eff -348dc58,60ff68ff -348dc5c,64ff60ff -348dc60,5cff57ff -348dc64,52ff2cff -348dc68,6ff00ff -348dc6c,ff00ff -348dc70,ff00ff -348dc74,ff00ff -348dc78,ff00f6 -348dc7c,210000 -348dc84,3b00ae -348dc88,cc00cc -348dc8c,cc00cc -348dc90,cc00cc -348dc94,cc03ec -348dc98,62ff64ff -348dc9c,60ff5cff -348dca0,57ff52ff -348dca4,4dff00ff -348dca8,ec00cc -348dcac,cc00cc -348dcb0,cc00cc -348dcb4,cc00cc -348dcb8,ae003b -348dcd4,5f9e -348dcd8,65ff60ff -348dcdc,5cff57ff -348dce0,52ff4dff -348dce4,47ff00ff -348dce8,9e0000 -348dd14,659e -348dd18,63ff5cff -348dd1c,57ff52ff -348dd20,4dff47ff -348dd24,41ff00ff -348dd28,9e0000 -348dd54,649e -348dd58,61ff58ff -348dd5c,53ff35ff -348dd60,31ff41ff -348dd64,3bff00ff -348dd68,9e0000 -348dd94,609e -348dd98,5eff53ff -348dd9c,4dff00ff -348dda0,ff3bff -348dda4,35ff00ff -348dda8,9e0000 -348ddd4,5d9e -348ddd8,5bff4dff -348dddc,48ff00ff -348dde0,6ff35ff -348dde4,2eff00ff -348dde8,9e0000 -348de14,5a9e -348de18,57ff48ff -348de1c,42ff03ff -348de20,cff2eff -348de24,28ff00ff -348de28,9e0000 -348de54,559e -348de58,53ff42ff -348de5c,3cff2dff -348de60,28ff28ff -348de64,1fff00ff -348de68,9e0000 -348de94,4b91 -348de98,44ff33ff -348de9c,35ff2fff -348dea0,28ff1fff -348dea4,7ff00ff -348dea8,900000 -348ded4,1229 -348ded8,f700ff -348dedc,ff00ff -348dee0,ff00ff -348dee4,ff00f8 -348dee8,2e0000 -348df18,30008c -348df1c,990099 -348df20,990099 -348df24,8c0030 -348df80,f0f0f0f0 -348df84,f0f0f0f0 -348df88,f0f0f0f0 -348df8c,f0f0f0f0 -348df90,f0f0f0f0 -348df94,f0f0f0f0 -348df98,dff0f0f0 -348df9c,f0f0f0f0 -348dfa0,f0f0f0f0 -348dfa4,f0f0f0df -348dfa8,dff0f0f0 -348dfac,f0f0f0f0 -348dfb0,f0f0f0f0 -348dfb4,f0f0f0df -348dfb8,dfcff0f0 -348dfbc,f0f0f0f0 -348dfc0,f0f0f0f0 -348dfc4,f0f0cfcf -348dfc8,cfcff0f0 -348dfcc,f0f0f0f0 -348dfd0,f0f0f0f0 -348dfd4,f0f0cfcf -348dfd8,cfcfcff0 -348dfdc,f0f0f0f0 -348dfe0,f0f0f0f0 -348dfe4,f0cfcfcf -348dfe8,cfcfcff0 -348dfec,f0f0f0f0 -348dff0,f0f0f0f0 -348dff4,f0cfcfcf -348dff8,cfcfcfcf -348dffc,f0f0f0f0 -348e000,f0f0f0f0 -348e004,cfcfcfcf -348e008,cfbfbfbf -348e00c,f0f0f0f0 -348e010,f0f0f0f0 -348e014,bfbfbfbf -348e018,bfbfbfbf -348e01c,f0f0f0f0 -348e020,f0f0f0bf -348e024,bfbfbfbf -348e028,bfbfbfbf -348e02c,bff0f0f0 -348e030,f0f0f0bf -348e034,bfbff0f0 -348e038,f0f0f0f0 -348e03c,f0f0f0f0 -348e040,f0f0f0f0 -348e044,f0f0f0f0 -348e048,f0f0f0f0 -348e04c,f0f0f0f0 -348e050,f0f0f0f0 -348e054,f0f0f0f0 -348e058,f0f0f0f0 -348e05c,f0f0f0f0 -348e060,f0f0f0f0 -348e064,f0f0f0f0 -348e068,f0f0f0f0 -348e06c,f0f0f0f0 -348e070,f0f0f0f0 -348e074,f0f0f0f0 -348e078,f0f0f0f0 -348e07c,f0f0f0f0 -348e080,f0f0f0f0 -348e084,f0f0f0f0 -348e088,f0f0f0f0 -348e08c,f0f0f0f0 -348e090,f0f0f0f0 -348e094,f0f0f0cf -348e098,cff0f0f0 -348e09c,f0f0f0f0 -348e0a0,f0f0f0f0 -348e0a4,f0f0f0cf -348e0a8,cfcff0f0 -348e0ac,f0f0f0f0 -348e0b0,f0f0f0f0 -348e0b4,f0f0bfcf -348e0b8,cfcff0f0 -348e0bc,f0f0f0f0 -348e0c0,f0f0f0f0 -348e0c4,f0f0bfcf -348e0c8,cfcff0f0 -348e0cc,f0f0f0f0 -348e0d0,f0f0f0f0 -348e0d4,f0bfcfbf -348e0d8,bfbfbff0 -348e0dc,f0f0f0f0 -348e0e0,f0f0f0f0 -348e0e4,f0bfbfbf -348e0e8,bfbfbff0 -348e0ec,f0f0f0f0 -348e0f0,f0f0f0f0 -348e0f4,bfbfbfbf -348e0f8,bfbfbfbf -348e0fc,f0f0f0f0 -348e100,f0f0f0f0 -348e104,bfbfbfbf -348e108,bfbfbfbf -348e10c,f0f0f0f0 -348e110,f0f0f0f0 -348e114,bfbfbfbf -348e118,bfbfbfaf -348e11c,f0f0f0f0 -348e120,f0f0f0af -348e124,bfbfbfbf -348e128,afafaff0 -348e12c,f0f0f0f0 -348e130,f0f0f0bf -348e134,bfbfaff0 -348e138,f0f0f0f0 -348e13c,f0f0f0f0 -348e140,f0f0f0f0 -348e144,f0f0f0f0 -348e148,f0f0f0f0 -348e14c,f0f0f0f0 -348e150,f0f0f0f0 -348e154,f0f0f0f0 -348e158,f0f0f0f0 -348e15c,f0f0f0f0 -348e160,f0f0f0f0 -348e164,f0f0f0f0 -348e168,f0f0f0f0 -348e16c,f0f0f0f0 -348e170,f0f0f0f0 -348e174,f0f0f0f0 -348e178,f0f0f0f0 -348e17c,f0f0f0f0 -348e180,f0f0f0f0 -348e184,f0f0f0f0 -348e188,f0f0f0f0 -348e18c,f0f0f0f0 -348e190,f0f0f0f0 -348e194,f0f0f0ef -348e198,eff0f0f0 -348e19c,f0f0f0f0 -348e1a0,f0f0f0f0 -348e1a4,f0f0f0ef -348e1a8,bfbff0f0 -348e1ac,f0f0f0f0 -348e1b0,f0f0f0f0 -348e1b4,f0f0dfdf -348e1b8,bfbff0f0 -348e1bc,f0f0f0f0 -348e1c0,f0f0f0f0 -348e1c4,f0f0dfbf -348e1c8,afaff0f0 -348e1cc,f0f0f0f0 -348e1d0,f0f0f0f0 -348e1d4,f0dfdfaf -348e1d8,afafaff0 -348e1dc,f0f0f0f0 -348e1e0,f0f0f0f0 -348e1e4,f0dfafaf -348e1e8,afafaff0 -348e1ec,f0f0f0f0 -348e1f0,f0f0f0f0 -348e1f4,dfdfafaf -348e1f8,afafaff0 -348e1fc,f0f0f0f0 -348e200,f0f0f0f0 -348e204,dfdfafaf -348e208,afafaf9f -348e20c,f0f0f0f0 -348e210,f0f0f0f0 -348e214,cfafafaf -348e218,afaf9f9f -348e21c,f0f0f0f0 -348e220,f0f0f0cf -348e224,cfafafaf -348e228,9f9ff0f0 -348e22c,f0f0f0f0 -348e230,f0f0f0cf -348e234,afafaf9f -348e238,f0f0f0f0 -348e23c,f0f0f0f0 -348e240,f0f0f0cf -348e244,aff0f0f0 -348e248,f0f0f0f0 -348e24c,f0f0f0f0 -348e250,f0f0f0f0 -348e254,f0f0f0f0 -348e258,f0f0f0f0 -348e25c,f0f0f0f0 -348e260,f0f0f0f0 -348e264,f0f0f0f0 -348e268,f0f0f0f0 -348e26c,f0f0f0f0 -348e270,f0f0f0f0 -348e274,f0f0f0f0 -348e278,f0f0f0f0 -348e27c,f0f0f0f0 -348e280,f0f0f0f0 -348e284,f0f0f0f0 -348e288,f0f0f0f0 -348e28c,f0f0f0f0 -348e290,f0f0f0f0 -348e294,f0f0f0ff -348e298,ff9ff0f0 -348e29c,f0f0f0f0 -348e2a0,f0f0f0f0 -348e2a4,f0f0ffff -348e2a8,ff9ff0f0 -348e2ac,f0f0f0f0 -348e2b0,f0f0f0f0 -348e2b4,f0f0ffff -348e2b8,9f9ff0f0 -348e2bc,f0f0f0f0 -348e2c0,f0f0f0f0 -348e2c4,f0f0ffff -348e2c8,9f9ff0f0 -348e2cc,f0f0f0f0 -348e2d0,f0f0f0f0 -348e2d4,f0efef9f -348e2d8,9f9f9ff0 -348e2dc,f0f0f0f0 -348e2e0,f0f0f0f0 -348e2e4,f0efef9f -348e2e8,9f9f8ff0 -348e2ec,f0f0f0f0 -348e2f0,f0f0f0f0 -348e2f4,f0efef9f -348e2f8,9f8f8ff0 -348e2fc,f0f0f0f0 -348e300,f0f0f0f0 -348e304,efef9f9f -348e308,8f8f8ff0 +348cf5c,db000 +348cf60,dffffb0 +348cf78,cfff40 +348cf7c,7f40 +348cf80,7f40 +348cf84,7f40 +348cf88,7f40 +348cf8c,7f30 +348cf90,75009e00 +348cf94,8d64dc00 +348cf98,2beec500 +348cfb0,5f6009e7 +348cfb4,5f609e70 +348cfb8,5f69e700 +348cfbc,5fbe8000 +348cfc0,5fedb000 +348cfc4,5f87e800 +348cfc8,5f60ae40 +348cfcc,5f601dc0 +348cfd0,5f6006ea +348cfe8,cc00000 +348cfec,cc00000 +348cff0,cc00000 +348cff4,cc00000 +348cff8,cc00000 +348cffc,cc00000 +348d000,cc00000 +348d004,cc00000 +348d008,cfffff7 +348d020,afa00cf8 +348d024,aed02ee8 +348d028,add59be8 +348d02c,adaac8e8 +348d030,ad5de1e8 +348d034,ad0db0e8 +348d038,ad0000e8 +348d03c,ad0000e8 +348d040,ad0000e8 +348d058,5fc008e0 +348d05c,5fe608e0 +348d060,5fcb08e0 +348d064,5f7e48e0 +348d068,5f5ca8e0 +348d06c,5f57e8e0 +348d070,5f50dce0 +348d074,5f509ee0 +348d078,5f502ee0 +348d090,4ceeb20 +348d094,cd56ea0 +348d098,3e800ae0 +348d09c,7f5008f2 +348d0a0,7f4008f4 +348d0a4,7f5008f2 +348d0a8,3e800ae0 +348d0ac,cd56eb0 +348d0b0,4ceeb20 +348d0c8,dffed60 +348d0cc,db05ce2 +348d0d0,db006f6 +348d0d4,db006f6 +348d0d8,db05ce2 +348d0dc,dffed60 +348d0e0,db00000 +348d0e4,db00000 +348d0e8,db00000 +348d100,4ceeb20 +348d104,cd56ea0 +348d108,3e800ae0 +348d10c,7f5008f2 +348d110,7f4008f4 +348d114,7f5008f1 +348d118,3e800ad0 +348d11c,cd56ea0 +348d120,4cefc20 +348d124,ae50 +348d128,c80 +348d138,5ffeeb20 +348d13c,5f717eb0 +348d140,5f700cd0 +348d144,5f716ea0 +348d148,5fffea00 +348d14c,5f72ae40 +348d150,5f700db0 +348d154,5f7008e5 +348d158,5f7000db +348d170,6ceeb30 +348d174,dc45a90 +348d178,4f600000 +348d17c,ec60000 +348d180,5ceeb40 +348d184,6cc0 +348d188,8e0 +348d18c,c735cd0 +348d190,8deec50 +348d1a8,cffffffb +348d1ac,db000 +348d1b0,db000 +348d1b4,db000 +348d1b8,db000 +348d1bc,db000 +348d1c0,db000 +348d1c4,db000 +348d1c8,db000 +348d1e0,4f7009e0 +348d1e4,4f7009e0 +348d1e8,4f7009e0 +348d1ec,4f7009e0 +348d1f0,4f7009e0 +348d1f4,3f7009e0 +348d1f8,2e700ad0 +348d1fc,dc45dc0 +348d200,5ceec40 +348d218,ad0003e8 +348d21c,6f5008e3 +348d220,e900bc0 +348d224,bc00d90 +348d228,8e15e40 +348d22c,2e7ad00 +348d230,cbca00 +348d234,9de600 +348d238,3ed000 +348d250,e80000ad +348d254,da0000cb +348d258,cb0000da +348d25c,ac0ec0e8 +348d260,8d6de1e5 +348d264,6e9bd8e0 +348d268,1ec8acd0 +348d26c,de37ec0 +348d270,cd00ea0 +348d288,6e7007e7 +348d28c,ad21db0 +348d290,2daad20 +348d294,7ee700 +348d298,3ee200 +348d29c,bdda00 +348d2a0,7e67e60 +348d2a4,3ea00bd0 +348d2a8,bd2004e9 +348d2c0,ae2005e8 +348d2c4,2da00cc0 +348d2c8,7e57e50 +348d2cc,ccda00 +348d2d0,4ed200 +348d2d4,db000 +348d2d8,db000 +348d2dc,db000 +348d2e0,db000 +348d2f8,efffff8 +348d2fc,bd3 +348d300,7e70 +348d304,3ea00 +348d308,bd100 +348d30c,8e5000 +348d310,4e90000 +348d314,cc00000 +348d318,1ffffffa +348d328,4ffc00 +348d32c,4f5000 +348d330,4f5000 +348d334,4f5000 +348d338,4f5000 +348d33c,4f5000 +348d340,4f5000 +348d344,4f5000 +348d348,4f5000 +348d34c,4f5000 +348d350,4f5000 +348d354,4ffc00 +348d368,6e500000 +348d36c,cb00000 +348d370,7e30000 +348d374,da0000 +348d378,9e2000 +348d37c,1e9000 +348d380,ad000 +348d384,3e800 +348d388,bc00 +348d38c,4e60 +348d390,bc0 +348d398,dfe000 +348d39c,8e000 +348d3a0,8e000 +348d3a4,8e000 +348d3a8,8e000 +348d3ac,8e000 +348d3b0,8e000 +348d3b4,8e000 +348d3b8,8e000 +348d3bc,8e000 +348d3c0,8e000 +348d3c4,dfe000 +348d3d8,5ed200 +348d3dc,dcdb00 +348d3e0,ad25e80 +348d3e4,7e5007e5 +348d43c,fffffffd +348d444,2ca0000 +348d448,2c9000 +348d488,5ceeb10 +348d48c,b936da0 +348d490,bc0 +348d494,8deffc0 +348d498,3e930bd0 +348d49c,4f827ed0 +348d4a0,aeedbd0 +348d4b0,d900000 +348d4b4,d900000 +348d4b8,d900000 +348d4bc,d900000 +348d4c0,dbdec40 +348d4c4,de65dc0 +348d4c8,db008e0 +348d4cc,da007f2 +348d4d0,db008e0 +348d4d4,de64db0 +348d4d8,dbdec40 +348d4f8,8ded70 +348d4fc,7e936a0 +348d500,cc00000 +348d504,db00000 +348d508,cc00000 +348d50c,7e936a0 +348d510,8ded70 +348d520,bc0 +348d524,bc0 +348d528,bc0 +348d52c,bc0 +348d530,5dedcc0 +348d534,dc48ec0 +348d538,5f600cc0 +348d53c,7f300bc0 +348d540,5f600cc0 +348d544,dc48ec0 +348d548,5dedcc0 +348d568,3beec30 +348d56c,cd54cc0 +348d570,4f6007e0 +348d574,6ffffff3 +348d578,4f500000 +348d57c,cc538c0 +348d580,3beec60 +348d590,5ded0 +348d594,cb200 +348d598,d9000 +348d59c,e8000 +348d5a0,dffffd0 +348d5a4,e8000 +348d5a8,e8000 +348d5ac,e8000 +348d5b0,e8000 +348d5b4,e8000 +348d5b8,e8000 +348d5d8,5dedcc0 +348d5dc,dc48ec0 +348d5e0,5f600cc0 +348d5e4,7f300bc0 +348d5e8,5f600cc0 +348d5ec,dc48ec0 +348d5f0,5dedcb0 +348d5f4,ca0 +348d5f8,9947e60 +348d5fc,4cee900 +348d600,da00000 +348d604,da00000 +348d608,da00000 +348d60c,da00000 +348d610,dbded40 +348d614,de65da0 +348d618,db00bc0 +348d61c,da00bc0 +348d620,da00bc0 +348d624,da00bc0 +348d628,da00bc0 +348d638,bc000 +348d648,9ffc000 +348d64c,bc000 +348d650,bc000 +348d654,bc000 +348d658,bc000 +348d65c,bc000 +348d660,effffe0 +348d670,7e000 +348d680,7ffe000 +348d684,7e000 +348d688,7e000 +348d68c,7e000 +348d690,7e000 +348d694,7e000 +348d698,7e000 +348d69c,7e000 +348d6a0,1bd000 +348d6a4,dfe7000 +348d6a8,bc00000 +348d6ac,bc00000 +348d6b0,bc00000 +348d6b4,bc00000 +348d6b8,bc03dc2 +348d6bc,bc3db00 +348d6c0,bddc000 +348d6c4,bfce500 +348d6c8,bd0cd10 +348d6cc,bc03db0 +348d6d0,bc007e8 +348d6e0,eff4000 +348d6e4,5f4000 +348d6e8,5f4000 +348d6ec,5f4000 +348d6f0,5f4000 +348d6f4,5f4000 +348d6f8,5f4000 +348d6fc,5f4000 +348d700,4f5000 +348d704,ea000 +348d708,8efb0 +348d728,8dddaec0 +348d72c,8e4dc5e4 +348d730,8d0cb0e6 +348d734,8d0ba0e7 +348d738,8d0ba0e7 +348d73c,8d0ba0e7 +348d740,8d0ba0e7 +348d760,dbded40 +348d764,de65da0 +348d768,db00bc0 +348d76c,da00bc0 +348d770,da00bc0 +348d774,da00bc0 +348d778,da00bc0 +348d798,4ceeb20 +348d79c,cd56da0 +348d7a0,1e700ad0 +348d7a4,5f6008e0 +348d7a8,1e700ad0 +348d7ac,cd46db0 +348d7b0,4ceeb20 +348d7d0,dbdec30 +348d7d4,de65db0 +348d7d8,db009e0 +348d7dc,da007e0 +348d7e0,db008e0 +348d7e4,de65db0 +348d7e8,dbeec40 +348d7ec,d900000 +348d7f0,d900000 +348d7f4,d900000 +348d808,4cedcc0 +348d80c,cc47ec0 +348d810,1e700cc0 +348d814,5f600bc0 +348d818,2e700cc0 +348d81c,cc47ec0 +348d820,5cedbc0 +348d824,ac0 +348d828,ac0 +348d82c,ac0 +348d840,ccdef9 +348d844,ce8300 +348d848,cb0000 +348d84c,ca0000 +348d850,ca0000 +348d854,ca0000 +348d858,ca0000 +348d878,4ceea10 +348d87c,bd45b60 +348d880,bd40000 +348d884,3bddb20 +348d888,4da0 +348d88c,b945ea0 +348d890,5ceeb20 +348d8a8,8e0000 +348d8ac,8e0000 +348d8b0,6fffffb0 +348d8b4,8e0000 +348d8b8,8e0000 +348d8bc,8e0000 +348d8c0,8e0000 +348d8c4,6e7000 +348d8c8,befb0 +348d8e8,da00bc0 +348d8ec,da00bc0 +348d8f0,da00bc0 +348d8f4,da00bc0 +348d8f8,da00bc0 +348d8fc,bd47ec0 +348d900,5dedbc0 +348d920,6e3007e3 +348d924,d900bc0 +348d928,ad01e80 +348d92c,5e48e20 +348d930,dacb00 +348d934,9de700 +348d938,3ee000 +348d958,e80000ac +348d95c,ca0000ca +348d960,ac0db0e7 +348d964,6e3dd5e2 +348d968,eabcad0 +348d96c,ce79eb0 +348d970,ae15f80 +348d990,3da00bc0 +348d994,6e69e40 +348d998,9ee700 +348d99c,2ed000 +348d9a0,ccda00 +348d9a4,9e46e70 +348d9a8,6e7009e4 +348d9c8,6e5005e5 +348d9cc,da00bd0 +348d9d0,9e00e90 +348d9d4,3e78e30 +348d9d8,cccc00 +348d9dc,7ee700 +348d9e0,de000 +348d9e4,da000 +348d9e8,8e5000 +348d9ec,dea0000 +348da00,bffffc0 +348da04,5e70 +348da08,3d900 +348da0c,cb000 +348da10,bd2000 +348da14,9e40000 +348da18,dffffc0 +348da28,6dea0 +348da2c,bd300 +348da30,cb000 +348da34,cb000 +348da38,5ea000 +348da3c,bfd2000 +348da40,7e9000 +348da44,db000 +348da48,cb000 +348da4c,cb000 +348da50,bd400 +348da54,5dea0 +348da60,ca000 +348da64,ca000 +348da68,ca000 +348da6c,ca000 +348da70,ca000 +348da74,ca000 +348da78,ca000 +348da7c,ca000 +348da80,ca000 +348da84,ca000 +348da88,ca000 +348da8c,ca000 +348da90,ca000 +348da98,bed3000 +348da9c,4e9000 +348daa0,da000 +348daa4,ca000 +348daa8,bc400 +348daac,5efa0 +348dab0,bd500 +348dab4,cb000 +348dab8,da000 +348dabc,da000 +348dac0,5e8000 +348dac4,bec2000 +348dae8,5ded83a7 +348daec,9838dec3 +348db60,7f024429 +348db64,3c334133 +348db68,41334633 +348db6c,44297f02 +348db9c,5409 +348dba0,4dc548ff +348dba4,41ff43ff +348dba8,47ff49ff +348dbac,43ff20c5 +348dbb0,c0000 +348dbdc,3f75 +348dbe0,49ff33ff +348dbe4,28ff2dff +348dbe8,33ff39ff +348dbec,3cff00ff +348dbf0,770000 +348dc1c,329d +348dc20,37ff1bff +348dc24,21ff28ff +348dc28,2fff35ff +348dc2c,3cff00ff +348dc30,9d0000 +348dc5c,329e +348dc60,35ff21ff +348dc64,28ff06ff +348dc68,9ff3cff +348dc6c,42ff00ff +348dc70,9e0000 +348dc9c,359e +348dca0,39ff27ff +348dca4,2eff00ff +348dca8,2ff42ff +348dcac,48ff00ff +348dcb0,9e0000 +348dcdc,3a9e +348dce0,3eff2eff +348dce4,35ff00ff +348dce8,dff48ff +348dcec,4dff00ff +348dcf0,9e0000 +348dd1c,3e9e +348dd20,42ff35ff +348dd24,3bff1bff +348dd28,27ff4dff +348dd2c,53ff00ff +348dd30,9e0000 +348dd5c,439e +348dd60,47ff3bff +348dd64,41ff47ff +348dd68,4dff52ff +348dd6c,58ff00ff +348dd70,9e0000 +348dd9c,4d9e +348dda0,4dff41ff +348dda4,47ff4dff +348dda8,52ff57ff +348ddac,5cff00ff +348ddb0,9e0000 +348ddcc,3f04474f +348ddd0,3e663e66 +348ddd4,43664666 +348ddd8,48664d66 +348dddc,57665bc5 +348dde0,53ff47ff +348dde4,4dff52ff +348dde8,57ff5cff +348ddec,60ff0eff +348ddf0,19c56666 +348ddf4,66666466 +348ddf8,61665f66 +348ddfc,5c665a66 +348de00,504f3f04 +348de08,6605 +348de0c,4ec34bff +348de10,41ff41ff +348de14,45ff48ff +348de18,4cff4fff +348de1c,55ff59ff +348de20,4fff4dff +348de24,52ff57ff +348de28,5cff60ff +348de2c,64ff61ff +348de30,67ff66ff +348de34,64ff62ff +348de38,60ff5dff +348de3c,5bff57ff +348de40,49ff0ec3 +348de44,50000 +348de48,3958 +348de4c,44ff31ff +348de50,20ff25ff +348de54,2bff31ff +348de58,38ff3eff +348de5c,44ff49ff +348de60,4dff52ff +348de64,57ff5cff +348de68,60ff64ff +348de6c,68ff67ff +348de70,64ff60ff +348de74,5cff58ff +348de78,53ff4eff +348de7c,48ff43ff +348de80,32ff00ff +348de84,580000 +348de88,2f71 +348de8c,36ff1dff +348de90,1fff26ff +348de94,2dff34ff +348de98,3aff41ff +348de9c,47ff4cff +348dea0,52ff57ff +348dea4,5cff60ff +348dea8,64ff68ff +348deac,67ff64ff +348deb0,60ff5bff +348deb4,57ff51ff +348deb8,4cff46ff +348debc,40ff3aff +348dec0,27ff00ff +348dec4,710000 +348dec8,2f71 +348decc,36ff21ff +348ded0,16ff00ff +348ded4,ff00ff +348ded8,2cff47ff +348dedc,4cff52ff +348dee0,57ff5cff +348dee4,60ff64ff +348dee8,67ff67ff +348deec,64ff60ff +348def0,5bff57ff +348def4,52ff0dff +348def8,ff00ff +348defc,aff33ff +348df00,21ff00ff +348df04,710000 +348df08,3371 +348df0c,3aff28ff +348df10,22ff0fff +348df14,13ff19ff +348df18,39ff4cff +348df1c,52ff57ff +348df20,5bff60ff +348df24,64ff67ff +348df28,67ff64ff +348df2c,60ff5cff +348df30,57ff52ff +348df34,4cff1dff +348df38,12ff14ff +348df3c,19ff2dff +348df40,1bff00ff +348df44,710000 +348df48,3871 +348df4c,3dff2fff +348df50,33ff3aff +348df54,40ff46ff +348df58,4cff51ff +348df5c,57ff5bff +348df60,60ff64ff +348df64,67ff68ff +348df68,64ff60ff +348df6c,5cff57ff +348df70,52ff4cff +348df74,47ff41ff +348df78,3aff34ff +348df7c,2dff26ff +348df80,12ff00ff +348df84,710000 +348df88,3569 +348df8c,37ff33ff +348df90,3aff40ff +348df94,46ff4cff +348df98,51ff57ff +348df9c,5bff60ff +348dfa0,64ff67ff +348dfa4,68ff64ff +348dfa8,60ff5cff +348dfac,57ff52ff +348dfb0,4dff47ff +348dfb4,41ff3aff +348dfb8,34ff2dff +348dfbc,26ff1fff +348dfc0,6ff00ff +348dfc4,690000 +348dfc8,1e21 +348dfcc,2f600ff +348dfd0,ff00ff +348dfd4,ff00ff +348dfd8,ff00ff +348dfdc,2ff1eff +348dfe0,60ff68ff +348dfe4,64ff60ff +348dfe8,5cff57ff +348dfec,52ff2cff +348dff0,6ff00ff +348dff4,ff00ff +348dff8,ff00ff +348dffc,ff00ff +348e000,ff00f6 +348e004,210000 +348e00c,3b00ae +348e010,cc00cc +348e014,cc00cc +348e018,cc00cc +348e01c,cc03ec +348e020,62ff64ff +348e024,60ff5cff +348e028,57ff52ff +348e02c,4dff00ff +348e030,ec00cc +348e034,cc00cc +348e038,cc00cc +348e03c,cc00cc +348e040,ae003b +348e05c,5f9e +348e060,65ff60ff +348e064,5cff57ff +348e068,52ff4dff +348e06c,47ff00ff +348e070,9e0000 +348e09c,659e +348e0a0,63ff5cff +348e0a4,57ff52ff +348e0a8,4dff47ff +348e0ac,41ff00ff +348e0b0,9e0000 +348e0dc,649e +348e0e0,61ff58ff +348e0e4,53ff35ff +348e0e8,31ff41ff +348e0ec,3bff00ff +348e0f0,9e0000 +348e11c,609e +348e120,5eff53ff +348e124,4dff00ff +348e128,ff3bff +348e12c,35ff00ff +348e130,9e0000 +348e15c,5d9e +348e160,5bff4dff +348e164,48ff00ff +348e168,6ff35ff +348e16c,2eff00ff +348e170,9e0000 +348e19c,5a9e +348e1a0,57ff48ff +348e1a4,42ff03ff +348e1a8,cff2eff +348e1ac,28ff00ff +348e1b0,9e0000 +348e1dc,559e +348e1e0,53ff42ff +348e1e4,3cff2dff +348e1e8,28ff28ff +348e1ec,1fff00ff +348e1f0,9e0000 +348e21c,4b91 +348e220,44ff33ff +348e224,35ff2fff +348e228,28ff1fff +348e22c,7ff00ff +348e230,900000 +348e25c,1229 +348e260,f700ff +348e264,ff00ff +348e268,ff00ff +348e26c,ff00f8 +348e270,2e0000 +348e2a0,30008c +348e2a4,990099 +348e2a8,990099 +348e2ac,8c0030 +348e308,f0f0f0f0 348e30c,f0f0f0f0 348e310,f0f0f0f0 -348e314,efef9f8f -348e318,8f8f8ff0 +348e314,f0f0f0f0 +348e318,f0f0f0f0 348e31c,f0f0f0f0 -348e320,f0f0f0ef -348e324,efef8f8f -348e328,8f8ff0f0 -348e32c,f0f0f0f0 -348e330,f0f0f0ef -348e334,ef8f8f8f +348e320,dff0f0f0 +348e324,f0f0f0f0 +348e328,f0f0f0f0 +348e32c,f0f0f0df +348e330,dff0f0f0 +348e334,f0f0f0f0 348e338,f0f0f0f0 -348e33c,f0f0f0f0 -348e340,f0f0f0ef -348e344,ef8f8ff0 +348e33c,f0f0f0df +348e340,dfcff0f0 +348e344,f0f0f0f0 348e348,f0f0f0f0 -348e34c,f0f0f0f0 -348e350,f0f0f0f0 -348e354,8ff0f0f0 +348e34c,f0f0cfcf +348e350,cfcff0f0 +348e354,f0f0f0f0 348e358,f0f0f0f0 -348e35c,f0f0f0f0 -348e360,f0f0f0f0 +348e35c,f0f0cfcf +348e360,cfcfcff0 348e364,f0f0f0f0 348e368,f0f0f0f0 -348e36c,f0f0f0f0 -348e370,f0f0f0f0 +348e36c,f0cfcfcf +348e370,cfcfcff0 348e374,f0f0f0f0 348e378,f0f0f0f0 -348e37c,f0f0f0f0 -348e380,f0f0f0f0 +348e37c,f0cfcfcf +348e380,cfcfcfcf 348e384,f0f0f0f0 348e388,f0f0f0f0 -348e38c,f0f0f0f0 -348e390,f0f0f0f0 -348e394,f0f0f0ff -348e398,ff7ff0f0 -348e39c,f0f0f0f0 -348e3a0,f0f0f0f0 -348e3a4,f0f0ffff -348e3a8,ff7ff0f0 -348e3ac,f0f0f0f0 -348e3b0,f0f0f0f0 -348e3b4,f0f0ffff -348e3b8,ff7ff0f0 -348e3bc,f0f0f0f0 +348e38c,cfcfcfcf +348e390,cfbfbfbf +348e394,f0f0f0f0 +348e398,f0f0f0f0 +348e39c,bfbfbfbf +348e3a0,bfbfbfbf +348e3a4,f0f0f0f0 +348e3a8,f0f0f0bf +348e3ac,bfbfbfbf +348e3b0,bfbfbfbf +348e3b4,bff0f0f0 +348e3b8,f0f0f0bf +348e3bc,bfbff0f0 348e3c0,f0f0f0f0 -348e3c4,f0f0ffff -348e3c8,7f7ff0f0 +348e3c4,f0f0f0f0 +348e3c8,f0f0f0f0 348e3cc,f0f0f0f0 348e3d0,f0f0f0f0 -348e3d4,f0ffffff -348e3d8,7f7ff0f0 +348e3d4,f0f0f0f0 +348e3d8,f0f0f0f0 348e3dc,f0f0f0f0 348e3e0,f0f0f0f0 -348e3e4,f0ffffff -348e3e8,7f7ff0f0 +348e3e4,f0f0f0f0 +348e3e8,f0f0f0f0 348e3ec,f0f0f0f0 348e3f0,f0f0f0f0 -348e3f4,f0ffff7f -348e3f8,7f7f7ff0 +348e3f4,f0f0f0f0 +348e3f8,f0f0f0f0 348e3fc,f0f0f0f0 348e400,f0f0f0f0 -348e404,ffffff7f -348e408,7f7f6ff0 +348e404,f0f0f0f0 +348e408,f0f0f0f0 348e40c,f0f0f0f0 348e410,f0f0f0f0 -348e414,ffffff7f -348e418,7f6f6ff0 -348e41c,f0f0f0f0 -348e420,f0f0f0f0 -348e424,ffffff7f -348e428,7f6ff0f0 -348e42c,f0f0f0f0 -348e430,f0f0f0f0 -348e434,ffff7f7f +348e414,f0f0f0f0 +348e418,f0f0f0f0 +348e41c,f0f0f0cf +348e420,cff0f0f0 +348e424,f0f0f0f0 +348e428,f0f0f0f0 +348e42c,f0f0f0cf +348e430,cfcff0f0 +348e434,f0f0f0f0 348e438,f0f0f0f0 -348e43c,f0f0f0f0 -348e440,f0f0f0ff -348e444,ffff7ff0 +348e43c,f0f0bfcf +348e440,cfcff0f0 +348e444,f0f0f0f0 348e448,f0f0f0f0 -348e44c,f0f0f0f0 -348e450,f0f0f0f0 -348e454,fffff0f0 +348e44c,f0f0bfcf +348e450,cfcff0f0 +348e454,f0f0f0f0 348e458,f0f0f0f0 -348e45c,f0f0f0f0 -348e460,f0f0f0f0 +348e45c,f0bfcfbf +348e460,bfbfbff0 348e464,f0f0f0f0 348e468,f0f0f0f0 -348e46c,f0f0f0f0 -348e470,f0f0f0f0 +348e46c,f0bfbfbf +348e470,bfbfbff0 348e474,f0f0f0f0 348e478,f0f0f0f0 -348e47c,f0f0f0f0 -348e480,f0f0f0f0 +348e47c,bfbfbfbf +348e480,bfbfbfbf 348e484,f0f0f0f0 348e488,f0f0f0f0 -348e48c,f0f0f0f0 -348e490,f0f0f0f0 -348e494,f0f0ffff -348e498,ff5ff0f0 -348e49c,f0f0f0f0 -348e4a0,f0f0f0f0 -348e4a4,f0f0ffff -348e4a8,ff5ff0f0 -348e4ac,f0f0f0f0 -348e4b0,f0f0f0f0 -348e4b4,f0f0ffff -348e4b8,ff5ff0f0 -348e4bc,f0f0f0f0 +348e48c,bfbfbfbf +348e490,bfbfbfbf +348e494,f0f0f0f0 +348e498,f0f0f0f0 +348e49c,bfbfbfbf +348e4a0,bfbfbfaf +348e4a4,f0f0f0f0 +348e4a8,f0f0f0af +348e4ac,bfbfbfbf +348e4b0,afafaff0 +348e4b4,f0f0f0f0 +348e4b8,f0f0f0bf +348e4bc,bfbfaff0 348e4c0,f0f0f0f0 -348e4c4,f0f0ffff -348e4c8,ff5ff0f0 +348e4c4,f0f0f0f0 +348e4c8,f0f0f0f0 348e4cc,f0f0f0f0 348e4d0,f0f0f0f0 -348e4d4,f0f0ffff -348e4d8,ff5ff0f0 +348e4d4,f0f0f0f0 +348e4d8,f0f0f0f0 348e4dc,f0f0f0f0 348e4e0,f0f0f0f0 -348e4e4,f0ffffff -348e4e8,5f5ff0f0 +348e4e4,f0f0f0f0 +348e4e8,f0f0f0f0 348e4ec,f0f0f0f0 348e4f0,f0f0f0f0 -348e4f4,f0ffffff -348e4f8,5f5ff0f0 +348e4f4,f0f0f0f0 +348e4f8,f0f0f0f0 348e4fc,f0f0f0f0 348e500,f0f0f0f0 -348e504,f0ffffff -348e508,5f5ff0f0 +348e504,f0f0f0f0 +348e508,f0f0f0f0 348e50c,f0f0f0f0 348e510,f0f0f0f0 -348e514,f0ffffff -348e518,5f5ff0f0 -348e51c,f0f0f0f0 -348e520,f0f0f0f0 -348e524,ffffffff -348e528,5ff0f0f0 -348e52c,f0f0f0f0 -348e530,f0f0f0f0 -348e534,ffffff5f -348e538,5ff0f0f0 -348e53c,f0f0f0f0 -348e540,f0f0f0f0 -348e544,ffffff5f +348e514,f0f0f0f0 +348e518,f0f0f0f0 +348e51c,f0f0f0ef +348e520,eff0f0f0 +348e524,f0f0f0f0 +348e528,f0f0f0f0 +348e52c,f0f0f0ef +348e530,bfbff0f0 +348e534,f0f0f0f0 +348e538,f0f0f0f0 +348e53c,f0f0dfdf +348e540,bfbff0f0 +348e544,f0f0f0f0 348e548,f0f0f0f0 -348e54c,f0f0f0f0 -348e550,f0f0f0f0 -348e554,ffffff5f +348e54c,f0f0dfbf +348e550,afaff0f0 +348e554,f0f0f0f0 348e558,f0f0f0f0 -348e55c,f0f0f0f0 -348e560,f0f0f0f0 -348e564,f0f0fff0 +348e55c,f0dfdfaf +348e560,afafaff0 +348e564,f0f0f0f0 348e568,f0f0f0f0 -348e56c,f0f0f0f0 -348e570,f0f0f0f0 +348e56c,f0dfafaf +348e570,afafaff0 348e574,f0f0f0f0 348e578,f0f0f0f0 -348e57c,f0f0f0f0 -348e580,f0f0f0f0 +348e57c,dfdfafaf +348e580,afafaff0 348e584,f0f0f0f0 348e588,f0f0f0f0 -348e58c,f0f0f0f0 -348e590,f0f0f0f0 -348e594,f0f0ffff -348e598,fffff0f0 -348e59c,f0f0f0f0 -348e5a0,f0f0f0f0 -348e5a4,f0f0ffff -348e5a8,fffff0f0 -348e5ac,f0f0f0f0 -348e5b0,f0f0f0f0 -348e5b4,f0f0ffff -348e5b8,ff3ff0f0 -348e5bc,f0f0f0f0 +348e58c,dfdfafaf +348e590,afafaf9f +348e594,f0f0f0f0 +348e598,f0f0f0f0 +348e59c,cfafafaf +348e5a0,afaf9f9f +348e5a4,f0f0f0f0 +348e5a8,f0f0f0cf +348e5ac,cfafafaf +348e5b0,9f9ff0f0 +348e5b4,f0f0f0f0 +348e5b8,f0f0f0cf +348e5bc,afafaf9f 348e5c0,f0f0f0f0 -348e5c4,f0f0ffff -348e5c8,ff3ff0f0 -348e5cc,f0f0f0f0 +348e5c4,f0f0f0f0 +348e5c8,f0f0f0cf +348e5cc,aff0f0f0 348e5d0,f0f0f0f0 -348e5d4,f0f0ffff -348e5d8,ff3ff0f0 +348e5d4,f0f0f0f0 +348e5d8,f0f0f0f0 348e5dc,f0f0f0f0 348e5e0,f0f0f0f0 -348e5e4,f0f0ffff -348e5e8,ff3ff0f0 +348e5e4,f0f0f0f0 +348e5e8,f0f0f0f0 348e5ec,f0f0f0f0 348e5f0,f0f0f0f0 -348e5f4,f0f0ffff -348e5f8,ff3ff0f0 +348e5f4,f0f0f0f0 +348e5f8,f0f0f0f0 348e5fc,f0f0f0f0 348e600,f0f0f0f0 -348e604,f0ffffff -348e608,ff3ff0f0 +348e604,f0f0f0f0 +348e608,f0f0f0f0 348e60c,f0f0f0f0 348e610,f0f0f0f0 -348e614,f0ffffff -348e618,fff0f0f0 -348e61c,f0f0f0f0 -348e620,f0f0f0f0 -348e624,f0ffffff -348e628,fff0f0f0 -348e62c,f0f0f0f0 -348e630,f0f0f0f0 -348e634,f0ffffff -348e638,fff0f0f0 -348e63c,f0f0f0f0 -348e640,f0f0f0f0 -348e644,f0ffffff -348e648,fff0f0f0 -348e64c,f0f0f0f0 -348e650,f0f0f0f0 -348e654,f0ffffff -348e658,fff0f0f0 -348e65c,f0f0f0f0 -348e660,f0f0f0f0 -348e664,f0f0f0ff +348e614,f0f0f0f0 +348e618,f0f0f0f0 +348e61c,f0f0f0ff +348e620,ff9ff0f0 +348e624,f0f0f0f0 +348e628,f0f0f0f0 +348e62c,f0f0ffff +348e630,ff9ff0f0 +348e634,f0f0f0f0 +348e638,f0f0f0f0 +348e63c,f0f0ffff +348e640,9f9ff0f0 +348e644,f0f0f0f0 +348e648,f0f0f0f0 +348e64c,f0f0ffff +348e650,9f9ff0f0 +348e654,f0f0f0f0 +348e658,f0f0f0f0 +348e65c,f0efef9f +348e660,9f9f9ff0 +348e664,f0f0f0f0 348e668,f0f0f0f0 -348e66c,f0f0f0f0 -348e670,f0f0f0f0 +348e66c,f0efef9f +348e670,9f9f8ff0 348e674,f0f0f0f0 348e678,f0f0f0f0 -348e67c,f0f0f0f0 -348e680,f0f0f0f0 +348e67c,f0efef9f +348e680,9f8f8ff0 348e684,f0f0f0f0 348e688,f0f0f0f0 -348e68c,f0f0f0f0 -348e690,f0f0f0f0 -348e694,f0f0ffff -348e698,fffff0f0 -348e69c,f0f0f0f0 -348e6a0,f0f0f0f0 -348e6a4,f0f0ffff -348e6a8,fffff0f0 -348e6ac,f0f0f0f0 -348e6b0,f0f0f0f0 -348e6b4,f0f0ffff -348e6b8,fffff0f0 -348e6bc,f0f0f0f0 +348e68c,efef9f9f +348e690,8f8f8ff0 +348e694,f0f0f0f0 +348e698,f0f0f0f0 +348e69c,efef9f8f +348e6a0,8f8f8ff0 +348e6a4,f0f0f0f0 +348e6a8,f0f0f0ef +348e6ac,efef8f8f +348e6b0,8f8ff0f0 +348e6b4,f0f0f0f0 +348e6b8,f0f0f0ef +348e6bc,ef8f8f8f 348e6c0,f0f0f0f0 -348e6c4,f0f0ffff -348e6c8,fffff0f0 -348e6cc,f0f0f0f0 +348e6c4,f0f0f0f0 +348e6c8,f0f0f0ef +348e6cc,ef8f8ff0 348e6d0,f0f0f0f0 -348e6d4,f0f0ffff -348e6d8,fffff0f0 -348e6dc,f0f0f0f0 +348e6d4,f0f0f0f0 +348e6d8,f0f0f0f0 +348e6dc,8ff0f0f0 348e6e0,f0f0f0f0 -348e6e4,f0f0ffff -348e6e8,fffff0f0 +348e6e4,f0f0f0f0 +348e6e8,f0f0f0f0 348e6ec,f0f0f0f0 348e6f0,f0f0f0f0 -348e6f4,f0f0ffff -348e6f8,fffff0f0 +348e6f4,f0f0f0f0 +348e6f8,f0f0f0f0 348e6fc,f0f0f0f0 348e700,f0f0f0f0 -348e704,f0f0ffff -348e708,fffff0f0 +348e704,f0f0f0f0 +348e708,f0f0f0f0 348e70c,f0f0f0f0 348e710,f0f0f0f0 -348e714,f0f0ffff -348e718,fffff0f0 -348e71c,f0f0f0f0 -348e720,f0f0f0f0 -348e724,f0f0ffff -348e728,fffff0f0 -348e72c,f0f0f0f0 -348e730,f0f0f0f0 -348e734,f0f0ffff -348e738,fffff0f0 -348e73c,f0f0f0f0 -348e740,f0f0f0f0 -348e744,f0f0ffff -348e748,fffff0f0 -348e74c,f0f0f0f0 -348e750,f0f0f0f0 -348e754,f0f0ffff -348e758,fffff0f0 -348e75c,f0f0f0f0 -348e760,f0f0f0f0 -348e764,f0f0ffff -348e768,fffff0f0 -348e76c,f0f0f0f0 -348e770,f0f0f0f0 +348e714,f0f0f0f0 +348e718,f0f0f0f0 +348e71c,f0f0f0ff +348e720,ff7ff0f0 +348e724,f0f0f0f0 +348e728,f0f0f0f0 +348e72c,f0f0ffff +348e730,ff7ff0f0 +348e734,f0f0f0f0 +348e738,f0f0f0f0 +348e73c,f0f0ffff +348e740,ff7ff0f0 +348e744,f0f0f0f0 +348e748,f0f0f0f0 +348e74c,f0f0ffff +348e750,7f7ff0f0 +348e754,f0f0f0f0 +348e758,f0f0f0f0 +348e75c,f0ffffff +348e760,7f7ff0f0 +348e764,f0f0f0f0 +348e768,f0f0f0f0 +348e76c,f0ffffff +348e770,7f7ff0f0 348e774,f0f0f0f0 348e778,f0f0f0f0 -348e77c,f0f0f0f0 -348e780,f0f0f0f0 +348e77c,f0ffff7f +348e780,7f7f7ff0 348e784,f0f0f0f0 348e788,f0f0f0f0 -348e78c,f0f0f0f0 -348e790,f0f0f0f0 -348e794,f0f0ffff -348e798,fffff0f0 -348e79c,f0f0f0f0 -348e7a0,f0f0f0f0 -348e7a4,f0f0ffff -348e7a8,fffff0f0 -348e7ac,f0f0f0f0 -348e7b0,f0f0f0f0 -348e7b4,f0f03fff -348e7b8,fffff0f0 -348e7bc,f0f0f0f0 +348e78c,ffffff7f +348e790,7f7f6ff0 +348e794,f0f0f0f0 +348e798,f0f0f0f0 +348e79c,ffffff7f +348e7a0,7f6f6ff0 +348e7a4,f0f0f0f0 +348e7a8,f0f0f0f0 +348e7ac,ffffff7f +348e7b0,7f6ff0f0 +348e7b4,f0f0f0f0 +348e7b8,f0f0f0f0 +348e7bc,ffff7f7f 348e7c0,f0f0f0f0 -348e7c4,f0f03fff -348e7c8,fffff0f0 -348e7cc,f0f0f0f0 +348e7c4,f0f0f0f0 +348e7c8,f0f0f0ff +348e7cc,ffff7ff0 348e7d0,f0f0f0f0 -348e7d4,f0f03fff -348e7d8,fffff0f0 -348e7dc,f0f0f0f0 +348e7d4,f0f0f0f0 +348e7d8,f0f0f0f0 +348e7dc,fffff0f0 348e7e0,f0f0f0f0 -348e7e4,f0f03fff -348e7e8,fffff0f0 +348e7e4,f0f0f0f0 +348e7e8,f0f0f0f0 348e7ec,f0f0f0f0 348e7f0,f0f0f0f0 -348e7f4,f0f03fff -348e7f8,fffff0f0 +348e7f4,f0f0f0f0 +348e7f8,f0f0f0f0 348e7fc,f0f0f0f0 348e800,f0f0f0f0 -348e804,f0f03fff -348e808,fffffff0 +348e804,f0f0f0f0 +348e808,f0f0f0f0 348e80c,f0f0f0f0 348e810,f0f0f0f0 -348e814,f0f0f0ff -348e818,fffffff0 -348e81c,f0f0f0f0 -348e820,f0f0f0f0 -348e824,f0f0f0ff -348e828,fffffff0 -348e82c,f0f0f0f0 -348e830,f0f0f0f0 -348e834,f0f0f0ff -348e838,fffffff0 -348e83c,f0f0f0f0 -348e840,f0f0f0f0 -348e844,f0f0f0ff -348e848,fffffff0 -348e84c,f0f0f0f0 -348e850,f0f0f0f0 -348e854,f0f0f0ff -348e858,fffffff0 -348e85c,f0f0f0f0 -348e860,f0f0f0f0 +348e814,f0f0f0f0 +348e818,f0f0f0f0 +348e81c,f0f0ffff +348e820,ff5ff0f0 +348e824,f0f0f0f0 +348e828,f0f0f0f0 +348e82c,f0f0ffff +348e830,ff5ff0f0 +348e834,f0f0f0f0 +348e838,f0f0f0f0 +348e83c,f0f0ffff +348e840,ff5ff0f0 +348e844,f0f0f0f0 +348e848,f0f0f0f0 +348e84c,f0f0ffff +348e850,ff5ff0f0 +348e854,f0f0f0f0 +348e858,f0f0f0f0 +348e85c,f0f0ffff +348e860,ff5ff0f0 348e864,f0f0f0f0 -348e868,fff0f0f0 -348e86c,f0f0f0f0 -348e870,f0f0f0f0 +348e868,f0f0f0f0 +348e86c,f0ffffff +348e870,5f5ff0f0 348e874,f0f0f0f0 348e878,f0f0f0f0 -348e87c,f0f0f0f0 -348e880,f0f0f0f0 +348e87c,f0ffffff +348e880,5f5ff0f0 348e884,f0f0f0f0 348e888,f0f0f0f0 -348e88c,f0f0f0f0 -348e890,f0f0f0f0 -348e894,f0f05fff -348e898,fffff0f0 -348e89c,f0f0f0f0 -348e8a0,f0f0f0f0 -348e8a4,f0f05fff -348e8a8,fffff0f0 -348e8ac,f0f0f0f0 -348e8b0,f0f0f0f0 -348e8b4,f0f05fff -348e8b8,fffff0f0 -348e8bc,f0f0f0f0 -348e8c0,f0f0f0f0 -348e8c4,f0f05fff -348e8c8,fffff0f0 -348e8cc,f0f0f0f0 +348e88c,f0ffffff +348e890,5f5ff0f0 +348e894,f0f0f0f0 +348e898,f0f0f0f0 +348e89c,f0ffffff +348e8a0,5f5ff0f0 +348e8a4,f0f0f0f0 +348e8a8,f0f0f0f0 +348e8ac,ffffffff +348e8b0,5ff0f0f0 +348e8b4,f0f0f0f0 +348e8b8,f0f0f0f0 +348e8bc,ffffff5f +348e8c0,5ff0f0f0 +348e8c4,f0f0f0f0 +348e8c8,f0f0f0f0 +348e8cc,ffffff5f 348e8d0,f0f0f0f0 -348e8d4,f0f05fff -348e8d8,fffff0f0 -348e8dc,f0f0f0f0 +348e8d4,f0f0f0f0 +348e8d8,f0f0f0f0 +348e8dc,ffffff5f 348e8e0,f0f0f0f0 -348e8e4,f0f05f5f -348e8e8,fffffff0 -348e8ec,f0f0f0f0 +348e8e4,f0f0f0f0 +348e8e8,f0f0f0f0 +348e8ec,f0f0fff0 348e8f0,f0f0f0f0 -348e8f4,f0f05f5f -348e8f8,fffffff0 +348e8f4,f0f0f0f0 +348e8f8,f0f0f0f0 348e8fc,f0f0f0f0 348e900,f0f0f0f0 -348e904,f0f05f5f -348e908,fffffff0 +348e904,f0f0f0f0 +348e908,f0f0f0f0 348e90c,f0f0f0f0 348e910,f0f0f0f0 -348e914,f0f05f5f -348e918,fffffff0 -348e91c,f0f0f0f0 -348e920,f0f0f0f0 -348e924,f0f0f05f -348e928,ffffffff -348e92c,f0f0f0f0 -348e930,f0f0f0f0 -348e934,f0f0f05f -348e938,5fffffff -348e93c,f0f0f0f0 -348e940,f0f0f0f0 +348e914,f0f0f0f0 +348e918,f0f0f0f0 +348e91c,f0f0ffff +348e920,fffff0f0 +348e924,f0f0f0f0 +348e928,f0f0f0f0 +348e92c,f0f0ffff +348e930,fffff0f0 +348e934,f0f0f0f0 +348e938,f0f0f0f0 +348e93c,f0f0ffff +348e940,ff3ff0f0 348e944,f0f0f0f0 -348e948,5fffffff -348e94c,f0f0f0f0 -348e950,f0f0f0f0 +348e948,f0f0f0f0 +348e94c,f0f0ffff +348e950,ff3ff0f0 348e954,f0f0f0f0 -348e958,5fffffff -348e95c,f0f0f0f0 -348e960,f0f0f0f0 +348e958,f0f0f0f0 +348e95c,f0f0ffff +348e960,ff3ff0f0 348e964,f0f0f0f0 -348e968,f0fff0f0 -348e96c,f0f0f0f0 -348e970,f0f0f0f0 +348e968,f0f0f0f0 +348e96c,f0f0ffff +348e970,ff3ff0f0 348e974,f0f0f0f0 348e978,f0f0f0f0 -348e97c,f0f0f0f0 -348e980,f0f0f0f0 +348e97c,f0f0ffff +348e980,ff3ff0f0 348e984,f0f0f0f0 348e988,f0f0f0f0 -348e98c,f0f0f0f0 -348e990,f0f0f0f0 -348e994,f0f07fff -348e998,fff0f0f0 -348e99c,f0f0f0f0 -348e9a0,f0f0f0f0 -348e9a4,f0f07fff -348e9a8,fffff0f0 -348e9ac,f0f0f0f0 -348e9b0,f0f0f0f0 -348e9b4,f0f07fff -348e9b8,fffff0f0 -348e9bc,f0f0f0f0 -348e9c0,f0f0f0f0 -348e9c4,f0f07f7f -348e9c8,fffff0f0 -348e9cc,f0f0f0f0 -348e9d0,f0f0f0f0 -348e9d4,f0f07f7f -348e9d8,fffffff0 -348e9dc,f0f0f0f0 -348e9e0,f0f0f0f0 -348e9e4,f0f07f7f -348e9e8,fffffff0 -348e9ec,f0f0f0f0 +348e98c,f0ffffff +348e990,ff3ff0f0 +348e994,f0f0f0f0 +348e998,f0f0f0f0 +348e99c,f0ffffff +348e9a0,fff0f0f0 +348e9a4,f0f0f0f0 +348e9a8,f0f0f0f0 +348e9ac,f0ffffff +348e9b0,fff0f0f0 +348e9b4,f0f0f0f0 +348e9b8,f0f0f0f0 +348e9bc,f0ffffff +348e9c0,fff0f0f0 +348e9c4,f0f0f0f0 +348e9c8,f0f0f0f0 +348e9cc,f0ffffff +348e9d0,fff0f0f0 +348e9d4,f0f0f0f0 +348e9d8,f0f0f0f0 +348e9dc,f0ffffff +348e9e0,fff0f0f0 +348e9e4,f0f0f0f0 +348e9e8,f0f0f0f0 +348e9ec,f0f0f0ff 348e9f0,f0f0f0f0 -348e9f4,f07f7f7f -348e9f8,7ffffff0 +348e9f4,f0f0f0f0 +348e9f8,f0f0f0f0 348e9fc,f0f0f0f0 348ea00,f0f0f0f0 -348ea04,f06f7f7f -348ea08,7fffffff +348ea04,f0f0f0f0 +348ea08,f0f0f0f0 348ea0c,f0f0f0f0 348ea10,f0f0f0f0 -348ea14,f06f6f7f -348ea18,7fffffff -348ea1c,f0f0f0f0 -348ea20,f0f0f0f0 -348ea24,f0f06f7f -348ea28,7fffffff -348ea2c,f0f0f0f0 -348ea30,f0f0f0f0 +348ea14,f0f0f0f0 +348ea18,f0f0f0f0 +348ea1c,f0f0ffff +348ea20,fffff0f0 +348ea24,f0f0f0f0 +348ea28,f0f0f0f0 +348ea2c,f0f0ffff +348ea30,fffff0f0 348ea34,f0f0f0f0 -348ea38,7f7fffff -348ea3c,f0f0f0f0 -348ea40,f0f0f0f0 +348ea38,f0f0f0f0 +348ea3c,f0f0ffff +348ea40,fffff0f0 348ea44,f0f0f0f0 -348ea48,f07fffff -348ea4c,fff0f0f0 -348ea50,f0f0f0f0 +348ea48,f0f0f0f0 +348ea4c,f0f0ffff +348ea50,fffff0f0 348ea54,f0f0f0f0 -348ea58,f0f0ffff -348ea5c,f0f0f0f0 -348ea60,f0f0f0f0 +348ea58,f0f0f0f0 +348ea5c,f0f0ffff +348ea60,fffff0f0 348ea64,f0f0f0f0 348ea68,f0f0f0f0 -348ea6c,f0f0f0f0 -348ea70,f0f0f0f0 +348ea6c,f0f0ffff +348ea70,fffff0f0 348ea74,f0f0f0f0 348ea78,f0f0f0f0 -348ea7c,f0f0f0f0 -348ea80,f0f0f0f0 +348ea7c,f0f0ffff +348ea80,fffff0f0 348ea84,f0f0f0f0 348ea88,f0f0f0f0 -348ea8c,f0f0f0f0 -348ea90,f0f0f0f0 -348ea94,f0f09fff -348ea98,fff0f0f0 -348ea9c,f0f0f0f0 -348eaa0,f0f0f0f0 -348eaa4,f0f09fff -348eaa8,fffff0f0 -348eaac,f0f0f0f0 -348eab0,f0f0f0f0 -348eab4,f0f09f9f -348eab8,fffff0f0 -348eabc,f0f0f0f0 -348eac0,f0f0f0f0 -348eac4,f0f09f9f -348eac8,fffff0f0 -348eacc,f0f0f0f0 -348ead0,f0f0f0f0 -348ead4,f09f9f9f -348ead8,9fffeff0 -348eadc,f0f0f0f0 -348eae0,f0f0f0f0 -348eae4,f08f9f9f -348eae8,9fefeff0 -348eaec,f0f0f0f0 -348eaf0,f0f0f0f0 -348eaf4,f08f8f9f -348eaf8,9fefeff0 +348ea8c,f0f0ffff +348ea90,fffff0f0 +348ea94,f0f0f0f0 +348ea98,f0f0f0f0 +348ea9c,f0f0ffff +348eaa0,fffff0f0 +348eaa4,f0f0f0f0 +348eaa8,f0f0f0f0 +348eaac,f0f0ffff +348eab0,fffff0f0 +348eab4,f0f0f0f0 +348eab8,f0f0f0f0 +348eabc,f0f0ffff +348eac0,fffff0f0 +348eac4,f0f0f0f0 +348eac8,f0f0f0f0 +348eacc,f0f0ffff +348ead0,fffff0f0 +348ead4,f0f0f0f0 +348ead8,f0f0f0f0 +348eadc,f0f0ffff +348eae0,fffff0f0 +348eae4,f0f0f0f0 +348eae8,f0f0f0f0 +348eaec,f0f0ffff +348eaf0,fffff0f0 +348eaf4,f0f0f0f0 +348eaf8,f0f0f0f0 348eafc,f0f0f0f0 348eb00,f0f0f0f0 -348eb04,f08f8f8f -348eb08,9f9fefef +348eb04,f0f0f0f0 +348eb08,f0f0f0f0 348eb0c,f0f0f0f0 348eb10,f0f0f0f0 -348eb14,f08f8f8f -348eb18,8f9fefef -348eb1c,f0f0f0f0 -348eb20,f0f0f0f0 -348eb24,f0f08f8f -348eb28,8f8fefef -348eb2c,eff0f0f0 -348eb30,f0f0f0f0 +348eb14,f0f0f0f0 +348eb18,f0f0f0f0 +348eb1c,f0f0ffff +348eb20,fffff0f0 +348eb24,f0f0f0f0 +348eb28,f0f0f0f0 +348eb2c,f0f0ffff +348eb30,fffff0f0 348eb34,f0f0f0f0 -348eb38,8f8f8fef -348eb3c,eff0f0f0 -348eb40,f0f0f0f0 +348eb38,f0f0f0f0 +348eb3c,f0f03fff +348eb40,fffff0f0 348eb44,f0f0f0f0 -348eb48,f08f8fef -348eb4c,eff0f0f0 -348eb50,f0f0f0f0 +348eb48,f0f0f0f0 +348eb4c,f0f03fff +348eb50,fffff0f0 348eb54,f0f0f0f0 -348eb58,f0f0f08f -348eb5c,f0f0f0f0 -348eb60,f0f0f0f0 +348eb58,f0f0f0f0 +348eb5c,f0f03fff +348eb60,fffff0f0 348eb64,f0f0f0f0 348eb68,f0f0f0f0 -348eb6c,f0f0f0f0 -348eb70,f0f0f0f0 +348eb6c,f0f03fff +348eb70,fffff0f0 348eb74,f0f0f0f0 348eb78,f0f0f0f0 -348eb7c,f0f0f0f0 -348eb80,f0f0f0f0 +348eb7c,f0f03fff +348eb80,fffff0f0 348eb84,f0f0f0f0 348eb88,f0f0f0f0 -348eb8c,f0f0f0f0 -348eb90,f0f0f0f0 -348eb94,f0f0f0ef -348eb98,eff0f0f0 -348eb9c,f0f0f0f0 -348eba0,f0f0f0f0 -348eba4,f0f0bfbf -348eba8,eff0f0f0 -348ebac,f0f0f0f0 -348ebb0,f0f0f0f0 -348ebb4,f0f0bfbf -348ebb8,dfdff0f0 -348ebbc,f0f0f0f0 -348ebc0,f0f0f0f0 -348ebc4,f0f0afbf -348ebc8,bfdff0f0 -348ebcc,f0f0f0f0 -348ebd0,f0f0f0f0 -348ebd4,f0afafaf -348ebd8,afdfdff0 -348ebdc,f0f0f0f0 -348ebe0,f0f0f0f0 -348ebe4,f0afafaf -348ebe8,afafdff0 +348eb8c,f0f03fff +348eb90,fffffff0 +348eb94,f0f0f0f0 +348eb98,f0f0f0f0 +348eb9c,f0f0f0ff +348eba0,fffffff0 +348eba4,f0f0f0f0 +348eba8,f0f0f0f0 +348ebac,f0f0f0ff +348ebb0,fffffff0 +348ebb4,f0f0f0f0 +348ebb8,f0f0f0f0 +348ebbc,f0f0f0ff +348ebc0,fffffff0 +348ebc4,f0f0f0f0 +348ebc8,f0f0f0f0 +348ebcc,f0f0f0ff +348ebd0,fffffff0 +348ebd4,f0f0f0f0 +348ebd8,f0f0f0f0 +348ebdc,f0f0f0ff +348ebe0,fffffff0 +348ebe4,f0f0f0f0 +348ebe8,f0f0f0f0 348ebec,f0f0f0f0 -348ebf0,f0f0f0f0 -348ebf4,f0afafaf -348ebf8,afafdfdf +348ebf0,fff0f0f0 +348ebf4,f0f0f0f0 +348ebf8,f0f0f0f0 348ebfc,f0f0f0f0 348ec00,f0f0f0f0 -348ec04,9fafafaf -348ec08,afafdfdf +348ec04,f0f0f0f0 +348ec08,f0f0f0f0 348ec0c,f0f0f0f0 348ec10,f0f0f0f0 -348ec14,9f9fafaf -348ec18,afafafcf -348ec1c,f0f0f0f0 -348ec20,f0f0f0f0 -348ec24,f0f09f9f -348ec28,afafafcf -348ec2c,cff0f0f0 -348ec30,f0f0f0f0 +348ec14,f0f0f0f0 +348ec18,f0f0f0f0 +348ec1c,f0f05fff +348ec20,fffff0f0 +348ec24,f0f0f0f0 +348ec28,f0f0f0f0 +348ec2c,f0f05fff +348ec30,fffff0f0 348ec34,f0f0f0f0 -348ec38,9fafafaf -348ec3c,cff0f0f0 -348ec40,f0f0f0f0 +348ec38,f0f0f0f0 +348ec3c,f0f05fff +348ec40,fffff0f0 348ec44,f0f0f0f0 -348ec48,f0f0f0af -348ec4c,cff0f0f0 -348ec50,f0f0f0f0 +348ec48,f0f0f0f0 +348ec4c,f0f05fff +348ec50,fffff0f0 348ec54,f0f0f0f0 348ec58,f0f0f0f0 -348ec5c,f0f0f0f0 -348ec60,f0f0f0f0 +348ec5c,f0f05fff +348ec60,fffff0f0 348ec64,f0f0f0f0 348ec68,f0f0f0f0 -348ec6c,f0f0f0f0 -348ec70,f0f0f0f0 +348ec6c,f0f05f5f +348ec70,fffffff0 348ec74,f0f0f0f0 348ec78,f0f0f0f0 -348ec7c,f0f0f0f0 -348ec80,f0f0f0f0 +348ec7c,f0f05f5f +348ec80,fffffff0 348ec84,f0f0f0f0 348ec88,f0f0f0f0 -348ec8c,f0f0f0f0 -348ec90,f0f0f0f0 -348ec94,f0f0f0cf -348ec98,cff0f0f0 -348ec9c,f0f0f0f0 -348eca0,f0f0f0f0 -348eca4,f0f0cfcf -348eca8,cff0f0f0 -348ecac,f0f0f0f0 -348ecb0,f0f0f0f0 -348ecb4,f0f0cfcf -348ecb8,cfbff0f0 -348ecbc,f0f0f0f0 -348ecc0,f0f0f0f0 -348ecc4,f0f0cfcf -348ecc8,cfbff0f0 +348ec8c,f0f05f5f +348ec90,fffffff0 +348ec94,f0f0f0f0 +348ec98,f0f0f0f0 +348ec9c,f0f05f5f +348eca0,fffffff0 +348eca4,f0f0f0f0 +348eca8,f0f0f0f0 +348ecac,f0f0f05f +348ecb0,ffffffff +348ecb4,f0f0f0f0 +348ecb8,f0f0f0f0 +348ecbc,f0f0f05f +348ecc0,5fffffff +348ecc4,f0f0f0f0 +348ecc8,f0f0f0f0 348eccc,f0f0f0f0 -348ecd0,f0f0f0f0 -348ecd4,f0bfbfbf -348ecd8,cfcfbff0 +348ecd0,5fffffff +348ecd4,f0f0f0f0 +348ecd8,f0f0f0f0 348ecdc,f0f0f0f0 -348ece0,f0f0f0f0 -348ece4,f0bfbfbf -348ece8,bfbfbff0 +348ece0,5fffffff +348ece4,f0f0f0f0 +348ece8,f0f0f0f0 348ecec,f0f0f0f0 -348ecf0,f0f0f0f0 -348ecf4,bfbfbfbf -348ecf8,bfbfbfbf +348ecf0,f0fff0f0 +348ecf4,f0f0f0f0 +348ecf8,f0f0f0f0 348ecfc,f0f0f0f0 348ed00,f0f0f0f0 -348ed04,bfbfbfbf -348ed08,bfbfbfbf +348ed04,f0f0f0f0 +348ed08,f0f0f0f0 348ed0c,f0f0f0f0 348ed10,f0f0f0f0 -348ed14,afafbfbf -348ed18,bfbfbfbf -348ed1c,f0f0f0f0 -348ed20,f0f0f0f0 -348ed24,f0afafaf -348ed28,bfbfbfbf -348ed2c,aff0f0f0 -348ed30,f0f0f0f0 +348ed14,f0f0f0f0 +348ed18,f0f0f0f0 +348ed1c,f0f07fff +348ed20,fff0f0f0 +348ed24,f0f0f0f0 +348ed28,f0f0f0f0 +348ed2c,f0f07fff +348ed30,fffff0f0 348ed34,f0f0f0f0 -348ed38,f0afbfbf -348ed3c,bff0f0f0 -348ed40,f0f0f0f0 +348ed38,f0f0f0f0 +348ed3c,f0f07fff +348ed40,fffff0f0 348ed44,f0f0f0f0 348ed48,f0f0f0f0 -348ed4c,f0f0f0f0 -348ed50,f0f0f0f0 +348ed4c,f0f07f7f +348ed50,fffff0f0 348ed54,f0f0f0f0 348ed58,f0f0f0f0 -348ed5c,f0f0f0f0 -348ed60,f0f0f0f0 +348ed5c,f0f07f7f +348ed60,fffffff0 348ed64,f0f0f0f0 348ed68,f0f0f0f0 -348ed6c,f0f0f0f0 -348ed70,f0f0f0f0 +348ed6c,f0f07f7f +348ed70,fffffff0 348ed74,f0f0f0f0 348ed78,f0f0f0f0 -348ed7c,f0f0f0f0 -348ed80,f0f0f0f0 +348ed7c,f07f7f7f +348ed80,7ffffff0 348ed84,f0f0f0f0 348ed88,f0f0f0f0 -348ed8c,f0f0f0f0 -348ed90,f0f0f0f0 -348ed94,f0f0f0df +348ed8c,f06f7f7f +348ed90,7fffffff +348ed94,f0f0f0f0 348ed98,f0f0f0f0 -348ed9c,f0f0f0f0 -348eda0,f0f0f0f0 -348eda4,f0f0f0df -348eda8,dff0f0f0 -348edac,f0f0f0f0 -348edb0,f0f0f0f0 -348edb4,f0f0cfdf -348edb8,dff0f0f0 +348ed9c,f06f6f7f +348eda0,7fffffff +348eda4,f0f0f0f0 +348eda8,f0f0f0f0 +348edac,f0f06f7f +348edb0,7fffffff +348edb4,f0f0f0f0 +348edb8,f0f0f0f0 348edbc,f0f0f0f0 -348edc0,f0f0f0f0 -348edc4,f0f0cfcf -348edc8,cfcff0f0 +348edc0,7f7fffff +348edc4,f0f0f0f0 +348edc8,f0f0f0f0 348edcc,f0f0f0f0 -348edd0,f0f0f0f0 -348edd4,f0cfcfcf -348edd8,cfcff0f0 +348edd0,f07fffff +348edd4,fff0f0f0 +348edd8,f0f0f0f0 348eddc,f0f0f0f0 -348ede0,f0f0f0f0 -348ede4,f0cfcfcf -348ede8,cfcfcff0 +348ede0,f0f0ffff +348ede4,f0f0f0f0 +348ede8,f0f0f0f0 348edec,f0f0f0f0 348edf0,f0f0f0f0 -348edf4,cfcfcfcf -348edf8,cfcfcff0 +348edf4,f0f0f0f0 +348edf8,f0f0f0f0 348edfc,f0f0f0f0 348ee00,f0f0f0f0 -348ee04,bfbfcfcf -348ee08,cfcfcfcf +348ee04,f0f0f0f0 +348ee08,f0f0f0f0 348ee0c,f0f0f0f0 348ee10,f0f0f0f0 -348ee14,bfbfbfbf -348ee18,bfbfbfbf -348ee1c,f0f0f0f0 -348ee20,f0f0f0bf -348ee24,bfbfbfbf -348ee28,bfbfbfbf -348ee2c,bff0f0f0 -348ee30,f0f0f0f0 +348ee14,f0f0f0f0 +348ee18,f0f0f0f0 +348ee1c,f0f09fff +348ee20,fff0f0f0 +348ee24,f0f0f0f0 +348ee28,f0f0f0f0 +348ee2c,f0f09fff +348ee30,fffff0f0 348ee34,f0f0f0f0 -348ee38,f0f0bfbf -348ee3c,bff0f0f0 -348ee40,f0f0f0f0 +348ee38,f0f0f0f0 +348ee3c,f0f09f9f +348ee40,fffff0f0 348ee44,f0f0f0f0 348ee48,f0f0f0f0 -348ee4c,f0f0f0f0 -348ee50,f0f0f0f0 +348ee4c,f0f09f9f +348ee50,fffff0f0 348ee54,f0f0f0f0 348ee58,f0f0f0f0 -348ee5c,f0f0f0f0 -348ee60,f0f0f0f0 +348ee5c,f09f9f9f +348ee60,9fffeff0 348ee64,f0f0f0f0 348ee68,f0f0f0f0 -348ee6c,f0f0f0f0 -348ee70,f0f0f0f0 +348ee6c,f08f9f9f +348ee70,9fefeff0 348ee74,f0f0f0f0 348ee78,f0f0f0f0 -348ee7c,f0f0f0f0 -348ee80,f0f0f0f0 +348ee7c,f08f8f9f +348ee80,9fefeff0 348ee84,f0f0f0f0 348ee88,f0f0f0f0 -348ee8c,f0f0f0f0 -348ee90,f0f0f0f0 -348ee94,f0f0f0df -348ee98,dff0f0f0 -348ee9c,f0f0f0f0 -348eea0,f0f0f0f0 -348eea4,f0f0f0df -348eea8,dff0f0f0 -348eeac,f0f0f0f0 -348eeb0,f0f0f0f0 -348eeb4,f0f0dfdf -348eeb8,dfdff0f0 +348ee8c,f08f8f8f +348ee90,9f9fefef +348ee94,f0f0f0f0 +348ee98,f0f0f0f0 +348ee9c,f08f8f8f +348eea0,8f9fefef +348eea4,f0f0f0f0 +348eea8,f0f0f0f0 +348eeac,f0f08f8f +348eeb0,8f8fefef +348eeb4,eff0f0f0 +348eeb8,f0f0f0f0 348eebc,f0f0f0f0 -348eec0,f0f0f0f0 -348eec4,f0f0dfdf -348eec8,dfdff0f0 +348eec0,8f8f8fef +348eec4,eff0f0f0 +348eec8,f0f0f0f0 348eecc,f0f0f0f0 -348eed0,f0f0f0f0 -348eed4,f0f0cfcf -348eed8,cfcff0f0 +348eed0,f08f8fef +348eed4,eff0f0f0 +348eed8,f0f0f0f0 348eedc,f0f0f0f0 -348eee0,f0f0f0f0 -348eee4,f0cfcfcf -348eee8,cfcfcff0 +348eee0,f0f0f08f +348eee4,f0f0f0f0 +348eee8,f0f0f0f0 348eeec,f0f0f0f0 348eef0,f0f0f0f0 -348eef4,f0cfcfcf -348eef8,cfcfcff0 +348eef4,f0f0f0f0 +348eef8,f0f0f0f0 348eefc,f0f0f0f0 348ef00,f0f0f0f0 -348ef04,cfcfcfcf -348ef08,cfcfcfcf +348ef04,f0f0f0f0 +348ef08,f0f0f0f0 348ef0c,f0f0f0f0 348ef10,f0f0f0f0 -348ef14,cfcfcfcf -348ef18,cfcfcfcf -348ef1c,f0f0f0f0 -348ef20,f0f0f0bf -348ef24,bfbfbfbf -348ef28,bfbfbfbf -348ef2c,bff0f0f0 -348ef30,f0f0f0f0 +348ef14,f0f0f0f0 +348ef18,f0f0f0f0 +348ef1c,f0f0f0ef +348ef20,eff0f0f0 +348ef24,f0f0f0f0 +348ef28,f0f0f0f0 +348ef2c,f0f0bfbf +348ef30,eff0f0f0 348ef34,f0f0f0f0 348ef38,f0f0f0f0 -348ef3c,f0f0f0f0 -348ef40,f0f0f0f0 +348ef3c,f0f0bfbf +348ef40,dfdff0f0 348ef44,f0f0f0f0 348ef48,f0f0f0f0 -348ef4c,f0f0f0f0 -348ef50,f0f0f0f0 +348ef4c,f0f0afbf +348ef50,bfdff0f0 348ef54,f0f0f0f0 348ef58,f0f0f0f0 -348ef5c,f0f0f0f0 -348ef60,f0f0f0f0 +348ef5c,f0afafaf +348ef60,afdfdff0 348ef64,f0f0f0f0 348ef68,f0f0f0f0 -348ef6c,f0f0f0f0 -348ef70,f0f0f0f0 +348ef6c,f0afafaf +348ef70,afafdff0 348ef74,f0f0f0f0 348ef78,f0f0f0f0 -348ef7c,f0f0f0f0 +348ef7c,f0afafaf +348ef80,afafdfdf +348ef84,f0f0f0f0 +348ef88,f0f0f0f0 +348ef8c,9fafafaf +348ef90,afafdfdf +348ef94,f0f0f0f0 +348ef98,f0f0f0f0 +348ef9c,9f9fafaf +348efa0,afafafcf +348efa4,f0f0f0f0 +348efa8,f0f0f0f0 +348efac,f0f09f9f +348efb0,afafafcf +348efb4,cff0f0f0 +348efb8,f0f0f0f0 +348efbc,f0f0f0f0 +348efc0,9fafafaf +348efc4,cff0f0f0 +348efc8,f0f0f0f0 +348efcc,f0f0f0f0 +348efd0,f0f0f0af +348efd4,cff0f0f0 +348efd8,f0f0f0f0 +348efdc,f0f0f0f0 +348efe0,f0f0f0f0 +348efe4,f0f0f0f0 +348efe8,f0f0f0f0 +348efec,f0f0f0f0 +348eff0,f0f0f0f0 +348eff4,f0f0f0f0 +348eff8,f0f0f0f0 +348effc,f0f0f0f0 +348f000,f0f0f0f0 +348f004,f0f0f0f0 +348f008,f0f0f0f0 +348f00c,f0f0f0f0 +348f010,f0f0f0f0 +348f014,f0f0f0f0 +348f018,f0f0f0f0 +348f01c,f0f0f0cf +348f020,cff0f0f0 +348f024,f0f0f0f0 +348f028,f0f0f0f0 +348f02c,f0f0cfcf +348f030,cff0f0f0 +348f034,f0f0f0f0 +348f038,f0f0f0f0 +348f03c,f0f0cfcf +348f040,cfbff0f0 +348f044,f0f0f0f0 +348f048,f0f0f0f0 +348f04c,f0f0cfcf +348f050,cfbff0f0 +348f054,f0f0f0f0 +348f058,f0f0f0f0 +348f05c,f0bfbfbf +348f060,cfcfbff0 +348f064,f0f0f0f0 +348f068,f0f0f0f0 +348f06c,f0bfbfbf +348f070,bfbfbff0 +348f074,f0f0f0f0 +348f078,f0f0f0f0 +348f07c,bfbfbfbf +348f080,bfbfbfbf +348f084,f0f0f0f0 +348f088,f0f0f0f0 +348f08c,bfbfbfbf +348f090,bfbfbfbf +348f094,f0f0f0f0 +348f098,f0f0f0f0 +348f09c,afafbfbf +348f0a0,bfbfbfbf +348f0a4,f0f0f0f0 +348f0a8,f0f0f0f0 +348f0ac,f0afafaf +348f0b0,bfbfbfbf +348f0b4,aff0f0f0 +348f0b8,f0f0f0f0 +348f0bc,f0f0f0f0 +348f0c0,f0afbfbf +348f0c4,bff0f0f0 +348f0c8,f0f0f0f0 +348f0cc,f0f0f0f0 +348f0d0,f0f0f0f0 +348f0d4,f0f0f0f0 +348f0d8,f0f0f0f0 +348f0dc,f0f0f0f0 +348f0e0,f0f0f0f0 +348f0e4,f0f0f0f0 +348f0e8,f0f0f0f0 +348f0ec,f0f0f0f0 +348f0f0,f0f0f0f0 +348f0f4,f0f0f0f0 +348f0f8,f0f0f0f0 +348f0fc,f0f0f0f0 +348f100,f0f0f0f0 +348f104,f0f0f0f0 +348f108,f0f0f0f0 +348f10c,f0f0f0f0 +348f110,f0f0f0f0 +348f114,f0f0f0f0 +348f118,f0f0f0f0 +348f11c,f0f0f0df +348f120,f0f0f0f0 +348f124,f0f0f0f0 +348f128,f0f0f0f0 +348f12c,f0f0f0df +348f130,dff0f0f0 +348f134,f0f0f0f0 +348f138,f0f0f0f0 +348f13c,f0f0cfdf +348f140,dff0f0f0 +348f144,f0f0f0f0 +348f148,f0f0f0f0 +348f14c,f0f0cfcf +348f150,cfcff0f0 +348f154,f0f0f0f0 +348f158,f0f0f0f0 +348f15c,f0cfcfcf +348f160,cfcff0f0 +348f164,f0f0f0f0 +348f168,f0f0f0f0 +348f16c,f0cfcfcf +348f170,cfcfcff0 +348f174,f0f0f0f0 +348f178,f0f0f0f0 +348f17c,cfcfcfcf +348f180,cfcfcff0 +348f184,f0f0f0f0 +348f188,f0f0f0f0 +348f18c,bfbfcfcf +348f190,cfcfcfcf +348f194,f0f0f0f0 +348f198,f0f0f0f0 +348f19c,bfbfbfbf +348f1a0,bfbfbfbf +348f1a4,f0f0f0f0 +348f1a8,f0f0f0bf +348f1ac,bfbfbfbf +348f1b0,bfbfbfbf +348f1b4,bff0f0f0 +348f1b8,f0f0f0f0 +348f1bc,f0f0f0f0 +348f1c0,f0f0bfbf +348f1c4,bff0f0f0 +348f1c8,f0f0f0f0 +348f1cc,f0f0f0f0 +348f1d0,f0f0f0f0 +348f1d4,f0f0f0f0 +348f1d8,f0f0f0f0 +348f1dc,f0f0f0f0 +348f1e0,f0f0f0f0 +348f1e4,f0f0f0f0 +348f1e8,f0f0f0f0 +348f1ec,f0f0f0f0 +348f1f0,f0f0f0f0 +348f1f4,f0f0f0f0 +348f1f8,f0f0f0f0 +348f1fc,f0f0f0f0 +348f200,f0f0f0f0 +348f204,f0f0f0f0 +348f208,f0f0f0f0 +348f20c,f0f0f0f0 +348f210,f0f0f0f0 +348f214,f0f0f0f0 +348f218,f0f0f0f0 +348f21c,f0f0f0df +348f220,dff0f0f0 +348f224,f0f0f0f0 +348f228,f0f0f0f0 +348f22c,f0f0f0df +348f230,dff0f0f0 +348f234,f0f0f0f0 +348f238,f0f0f0f0 +348f23c,f0f0dfdf +348f240,dfdff0f0 +348f244,f0f0f0f0 +348f248,f0f0f0f0 +348f24c,f0f0dfdf +348f250,dfdff0f0 +348f254,f0f0f0f0 +348f258,f0f0f0f0 +348f25c,f0f0cfcf +348f260,cfcff0f0 +348f264,f0f0f0f0 +348f268,f0f0f0f0 +348f26c,f0cfcfcf +348f270,cfcfcff0 +348f274,f0f0f0f0 +348f278,f0f0f0f0 +348f27c,f0cfcfcf +348f280,cfcfcff0 +348f284,f0f0f0f0 +348f288,f0f0f0f0 +348f28c,cfcfcfcf +348f290,cfcfcfcf +348f294,f0f0f0f0 +348f298,f0f0f0f0 +348f29c,cfcfcfcf +348f2a0,cfcfcfcf +348f2a4,f0f0f0f0 +348f2a8,f0f0f0bf +348f2ac,bfbfbfbf +348f2b0,bfbfbfbf +348f2b4,bff0f0f0 +348f2b8,f0f0f0f0 +348f2bc,f0f0f0f0 +348f2c0,f0f0f0f0 +348f2c4,f0f0f0f0 +348f2c8,f0f0f0f0 +348f2cc,f0f0f0f0 +348f2d0,f0f0f0f0 +348f2d4,f0f0f0f0 +348f2d8,f0f0f0f0 +348f2dc,f0f0f0f0 +348f2e0,f0f0f0f0 +348f2e4,f0f0f0f0 +348f2e8,f0f0f0f0 +348f2ec,f0f0f0f0 +348f2f0,f0f0f0f0 +348f2f4,f0f0f0f0 +348f2f8,f0f0f0f0 +348f2fc,f0f0f0f0 +348f300,f0f0f0f0 +348f304,f0f0f0f0 diff --git a/worlds/oot/data/generated/symbols.json b/worlds/oot/data/generated/symbols.json index 8b868c77f3..2b84bcfa04 100644 --- a/worlds/oot/data/generated/symbols.json +++ b/worlds/oot/data/generated/symbols.json @@ -1,11 +1,11 @@ { - "ADULT_INIT_ITEMS": "03481D40", - "ADULT_VALID_ITEMS": "03481D48", + "ADULT_INIT_ITEMS": "03481D3C", + "ADULT_VALID_ITEMS": "03481D44", "AP_PLAYER_NAME": "03480834", - "AUDIO_THREAD_INFO": "03482FC0", - "AUDIO_THREAD_INFO_MEM_SIZE": "03482FDC", - "AUDIO_THREAD_INFO_MEM_START": "03482FD8", - "AUDIO_THREAD_MEM_START": "0348EF80", + "AUDIO_THREAD_INFO": "03482F98", + "AUDIO_THREAD_INFO_MEM_SIZE": "03482FB4", + "AUDIO_THREAD_INFO_MEM_START": "03482FB0", + "AUDIO_THREAD_MEM_START": "0348F310", "BOMBCHUS_IN_LOGIC": "03480CBC", "CFG_A_BUTTON_COLOR": "03480854", "CFG_A_NOTE_COLOR": "03480872", @@ -16,7 +16,7 @@ "CFG_B_BUTTON_COLOR": "0348085A", "CFG_C_BUTTON_COLOR": "03480860", "CFG_C_NOTE_COLOR": "03480878", - "CFG_DAMAGE_MULTIPLYER": "03482CB0", + "CFG_DAMAGE_MULTIPLYER": "03482C88", "CFG_DISPLAY_DPAD": "0348088A", "CFG_HEART_COLOR": "0348084E", "CFG_MAGIC_COLOR": "03480848", @@ -36,149 +36,151 @@ "CFG_RAINBOW_SWORD_OUTER_ENABLED": "0348088C", "CFG_SHOP_CURSOR_COLOR": "0348086C", "CFG_TEXT_CURSOR_COLOR": "03480866", - "CHAIN_HBA_REWARDS": "03483950", - "CHEST_SIZE_MATCH_CONTENTS": "034826F0", - "COMPLETE_MASK_QUEST": "0348B201", + "CHAIN_HBA_REWARDS": "03483928", + "CHEST_SIZE_MATCH_CONTENTS": "034826EC", + "COMPLETE_MASK_QUEST": "0348B585", "COOP_CONTEXT": "03480020", "COOP_VERSION": "03480020", "COSMETIC_CONTEXT": "03480844", "COSMETIC_FORMAT_VERSION": "03480844", - "CURRENT_GROTTO_ID": "03482E82", + "CURRENT_GROTTO_ID": "03482E5A", "DEATH_LINK": "0348002A", - "DEBUG_OFFSET": "034828A0", + "DEBUG_OFFSET": "03482878", "DISABLE_TIMERS": "03480CDC", - "DPAD_TEXTURE": "0348D780", - "DUNGEONS_SHUFFLED": "03480CDE", + "DPAD_TEXTURE": "0348DB08", + "DUNGEONS_SHUFFLED": "03480CDD", "EXTENDED_OBJECT_TABLE": "03480C9C", - "EXTERN_DAMAGE_MULTIPLYER": "03482CB1", - "FAST_BUNNY_HOOD_ENABLED": "03480CE0", + "EXTERN_DAMAGE_MULTIPLYER": "03482C89", + "FAST_BUNNY_HOOD_ENABLED": "03480CDF", "FAST_CHESTS": "03480CD6", - "FONT_TEXTURE": "0348C2B8", + "FONT_TEXTURE": "0348C640", "FREE_SCARECROW_ENABLED": "03480CCC", - "GET_CHEST_OVERRIDE_COLOR_WRAPPER": "03482720", - "GET_CHEST_OVERRIDE_SIZE_WRAPPER": "034826F4", - "GET_ITEM_TRIGGERED": "0348140C", + "GANON_BOSS_KEY_CONDITION": "0348B550", + "GANON_BOSS_KEY_CONDITION_COUNT": "0348B54E", + "GET_CHEST_OVERRIDE_WRAPPER": "034826F0", + "GET_ITEM_TRIGGERED": "03481408", "GOSSIP_HINT_CONDITION": "03480CC8", - "GROTTO_EXIT_LIST": "03482E40", - "GROTTO_LOAD_TABLE": "03482DBC", + "GROTTO_EXIT_LIST": "03482E18", + "GROTTO_LOAD_TABLE": "03482D94", "INCOMING_ITEM": "03480028", "INCOMING_PLAYER": "03480026", "INITIAL_SAVE_DATA": "0348089C", "JABU_ELEVATOR_ENABLE": "03480CD4", + "KAKARIKO_WEATHER_FORECAST": "0348B5A4", "LACS_CONDITION": "03480CC4", "LACS_CONDITION_COUNT": "03480CD2", - "MALON_GAVE_ICETRAP": "0348368C", + "MALON_GAVE_ICETRAP": "03483664", "MALON_TEXT_ID": "03480CDB", - "MAX_RUPEES": "0348B203", - "MOVED_ADULT_KING_ZORA": "03482FFC", - "NO_ESCAPE_SEQUENCE": "0348B1CC", - "NO_FOG_STATE": "03480CDD", + "MAX_RUPEES": "0348B587", + "MOVED_ADULT_KING_ZORA": "03482FD4", + "NO_ESCAPE_SEQUENCE": "0348B54C", "OCARINAS_SHUFFLED": "03480CD5", - "OPEN_KAKARIKO": "0348B202", + "OPEN_KAKARIKO": "0348B586", "OUTGOING_ITEM": "03480030", "OUTGOING_KEY": "0348002C", "OUTGOING_PLAYER": "03480032", - "OVERWORLD_SHUFFLED": "03480CDF", - "PAYLOAD_END": "0348EF80", + "OVERWORLD_SHUFFLED": "03480CDE", + "PAYLOAD_END": "0348F310", "PAYLOAD_START": "03480000", - "PLAYED_WARP_SONG": "03481210", + "PLAYED_WARP_SONG": "0348120C", "PLAYER_ID": "03480024", "PLAYER_NAMES": "03480034", "PLAYER_NAME_ID": "03480025", "RAINBOW_BRIDGE_CONDITION": "03480CC0", "RAINBOW_BRIDGE_COUNT": "03480CD0", "RANDO_CONTEXT": "03480000", - "SHUFFLE_BEANS": "03482D18", - "SHUFFLE_CARPET_SALESMAN": "03483A08", + "SHUFFLE_BEANS": "03482CF0", + "SHUFFLE_CARPET_SALESMAN": "034839E0", "SHUFFLE_COWS": "03480CD7", - "SHUFFLE_MEDIGORON": "03483A64", + "SHUFFLE_MEDIGORON": "03483A3C", "SONGS_AS_ITEMS": "03480CD8", - "SOS_ITEM_GIVEN": "034814D8", - "SPEED_MULTIPLIER": "03482760", - "START_TWINROVA_FIGHT": "0348307C", - "TIME_TRAVEL_SAVED_EQUIPS": "03481A64", - "TRIFORCE_ICON_TEXTURE": "0348DF80", - "TWINROVA_ACTION_TIMER": "03483080", + "SOS_ITEM_GIVEN": "034814D4", + "SPEED_MULTIPLIER": "03482738", + "START_TWINROVA_FIGHT": "03483054", + "TIME_TRAVEL_SAVED_EQUIPS": "03481A60", + "TRIFORCE_ICON_TEXTURE": "0348E308", + "TWINROVA_ACTION_TIMER": "03483058", "WINDMILL_SONG_ID": "03480CD9", "WINDMILL_TEXT_ID": "03480CDA", - "a_button": "0348B190", - "a_note_b": "0348B17C", - "a_note_font_glow_base": "0348B164", - "a_note_font_glow_max": "0348B160", - "a_note_g": "0348B180", - "a_note_glow_base": "0348B16C", - "a_note_glow_max": "0348B168", - "a_note_r": "0348B184", - "active_item_action_id": "0348B1E4", - "active_item_fast_chest": "0348B1D4", - "active_item_graphic_id": "0348B1D8", - "active_item_object_id": "0348B1DC", - "active_item_row": "0348B1E8", - "active_item_text_id": "0348B1E0", - "active_override": "0348B1F0", - "active_override_is_outgoing": "0348B1EC", - "b_button": "0348B18C", - "beating_dd": "0348B198", - "beating_no_dd": "0348B1A0", - "c_button": "0348B188", - "c_note_b": "0348B170", - "c_note_font_glow_base": "0348B154", - "c_note_font_glow_max": "0348B150", - "c_note_g": "0348B174", - "c_note_glow_base": "0348B15C", - "c_note_glow_max": "0348B158", - "c_note_r": "0348B178", - "cfg_dungeon_info_enable": "0348B11C", - "cfg_dungeon_info_mq_enable": "0348B1C0", - "cfg_dungeon_info_mq_need_map": "0348B1BC", - "cfg_dungeon_info_reward_enable": "0348B118", - "cfg_dungeon_info_reward_need_altar": "0348B1B4", - "cfg_dungeon_info_reward_need_compass": "0348B1B8", - "cfg_dungeon_is_mq": "0348B220", - "cfg_dungeon_rewards": "03489F14", - "cfg_file_select_hash": "0348B1C8", - "cfg_item_overrides": "0348B274", - "defaultDDHeart": "0348B1A4", - "defaultHeart": "0348B1AC", - "dpad_sprite": "0348A088", - "dummy_actor": "0348B1F8", - "dungeon_count": "0348B120", - "dungeons": "03489F38", - "empty_dlist": "0348B138", - "extern_ctxt": "03489FD4", - "font_sprite": "0348A098", - "freecam_modes": "03489C90", - "hash_sprites": "0348B12C", - "hash_symbols": "03489FE8", - "heap_next": "0348B21C", - "heart_sprite": "0348A028", - "icon_sprites": "03489E54", - "item_digit_sprite": "0348A048", - "item_overrides_count": "0348B1FC", - "item_table": "0348A110", - "items_sprite": "0348A0B8", - "key_rupee_clock_sprite": "0348A058", - "last_fog_distance": "0348B124", - "linkhead_skull_sprite": "0348A038", - "medal_colors": "03489F24", - "medals_sprite": "0348A0C8", - "normal_dd": "0348B194", - "normal_no_dd": "0348B19C", - "object_slots": "0348C274", - "pending_freezes": "0348B200", - "pending_item_queue": "0348B25C", - "quest_items_sprite": "0348A0A8", - "rupee_colors": "03489E60", - "satisified_pending_frames": "0348B1D0", - "scene_fog_distance": "0348B128", - "setup_db": "0348A0E8", - "song_note_sprite": "0348A068", - "stones_sprite": "0348A0D8", - "text_cursor_border_base": "0348B144", - "text_cursor_border_max": "0348B140", - "text_cursor_inner_base": "0348B14C", - "text_cursor_inner_max": "0348B148", - "triforce_hunt_enabled": "0348B210", - "triforce_pieces_requied": "0348B1B2", - "triforce_sprite": "0348A078" + "a_button": "0348B510", + "a_note_b": "0348B4FC", + "a_note_font_glow_base": "0348B4E4", + "a_note_font_glow_max": "0348B4E0", + "a_note_g": "0348B500", + "a_note_glow_base": "0348B4EC", + "a_note_glow_max": "0348B4E8", + "a_note_r": "0348B504", + "active_item_action_id": "0348B568", + "active_item_fast_chest": "0348B558", + "active_item_graphic_id": "0348B55C", + "active_item_object_id": "0348B560", + "active_item_row": "0348B56C", + "active_item_text_id": "0348B564", + "active_override": "0348B574", + "active_override_is_outgoing": "0348B570", + "b_button": "0348B50C", + "beating_dd": "0348B518", + "beating_no_dd": "0348B520", + "c_button": "0348B508", + "c_note_b": "0348B4F0", + "c_note_font_glow_base": "0348B4D4", + "c_note_font_glow_max": "0348B4D0", + "c_note_g": "0348B4F4", + "c_note_glow_base": "0348B4DC", + "c_note_glow_max": "0348B4D8", + "c_note_r": "0348B4F8", + "cfg_dungeon_info_enable": "0348B49C", + "cfg_dungeon_info_mq_enable": "0348B540", + "cfg_dungeon_info_mq_need_map": "0348B53C", + "cfg_dungeon_info_reward_enable": "0348B498", + "cfg_dungeon_info_reward_need_altar": "0348B534", + "cfg_dungeon_info_reward_need_compass": "0348B538", + "cfg_dungeon_is_mq": "0348B5A8", + "cfg_dungeon_rewards": "0348A254", + "cfg_file_select_hash": "0348B548", + "cfg_item_overrides": "0348B5FC", + "defaultDDHeart": "0348B524", + "defaultHeart": "0348B52C", + "dpad_sprite": "0348A408", + "dummy_actor": "0348B57C", + "dungeon_count": "0348B4A0", + "dungeons": "0348A278", + "empty_dlist": "0348B4B8", + "extern_ctxt": "0348A314", + "font_sprite": "0348A418", + "freecam_modes": "03489FD0", + "hash_sprites": "0348B4AC", + "hash_symbols": "0348A328", + "heap_next": "0348B5A0", + "heart_sprite": "0348A3A8", + "icon_sprites": "0348A194", + "item_digit_sprite": "0348A3C8", + "item_overrides_count": "0348B580", + "item_table": "0348A490", + "items_sprite": "0348A438", + "key_rupee_clock_sprite": "0348A3D8", + "last_fog_distance": "0348B4A4", + "linkhead_skull_sprite": "0348A3B8", + "medal_colors": "0348A264", + "medals_sprite": "0348A448", + "normal_dd": "0348B514", + "normal_no_dd": "0348B51C", + "num_to_bits": "0348A368", + "object_slots": "0348C5FC", + "pending_freezes": "0348B584", + "pending_item_queue": "0348B5E4", + "quest_items_sprite": "0348A428", + "rupee_colors": "0348A1A0", + "satisified_pending_frames": "0348B554", + "scene_fog_distance": "0348B4A8", + "setup_db": "0348A468", + "song_note_sprite": "0348A3E8", + "stones_sprite": "0348A458", + "text_cursor_border_base": "0348B4C4", + "text_cursor_border_max": "0348B4C0", + "text_cursor_inner_base": "0348B4CC", + "text_cursor_inner_max": "0348B4C8", + "triforce_hunt_enabled": "0348B594", + "triforce_pieces_requied": "0348B532", + "triforce_sprite": "0348A3F8" } \ No newline at end of file From 76a4dce66a4b8c0485ffef267f5a102aa94bf745 Mon Sep 17 00:00:00 2001 From: espeon65536 Date: Sun, 1 May 2022 14:44:26 -0500 Subject: [PATCH 040/149] OoT: move Thieves' Hideout location IDs to match with old ID --- worlds/oot/LocationList.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/worlds/oot/LocationList.py b/worlds/oot/LocationList.py index c49c20de4e..829ec70262 100644 --- a/worlds/oot/LocationList.py +++ b/worlds/oot/LocationList.py @@ -338,13 +338,6 @@ location_table = OrderedDict([ ("GV GS Behind Tent", ("GS Token", 0x13, 0x08, None, 'Gold Skulltula Token', ("Gerudo Valley", "Skulltulas",))), ("GV GS Pillar", ("GS Token", 0x13, 0x04, None, 'Gold Skulltula Token', ("Gerudo Valley", "Skulltulas",))), - # Gerudo's Fortress - ("GF Chest", ("Chest", 0x5D, 0x00, None, 'Piece of Heart', ("Gerudo's Fortress", "Gerudo",))), - ("GF HBA 1000 Points", ("NPC", 0x5D, 0x3E, None, 'Piece of Heart', ("Gerudo's Fortress", "Gerudo", "Minigames"))), - ("GF HBA 1500 Points", ("NPC", 0x5D, 0x30, None, 'Bow', ("Gerudo's Fortress", "Gerudo", "Minigames"))), - ("GF GS Top Floor", ("GS Token", 0x14, 0x02, None, 'Gold Skulltula Token', ("Gerudo's Fortress", "Skulltulas",))), - ("GF GS Archery Range", ("GS Token", 0x14, 0x01, None, 'Gold Skulltula Token', ("Gerudo's Fortress", "Skulltulas",))), - # Thieves' Hideout ("Hideout Jail Guard (1 Torch)", ("Collectable", 0x0C, 0x0C, None, 'Small Key (Thieves Hideout)', ("Thieves' Hideout", "Gerudo",))), ("Hideout Jail Guard (2 Torches)", ("Collectable", 0x0C, 0x0F, None, 'Small Key (Thieves Hideout)', ("Thieves' Hideout", "Gerudo",))), @@ -352,6 +345,13 @@ location_table = OrderedDict([ ("Hideout Jail Guard (4 Torches)", ("Collectable", 0x0C, 0x0E, None, 'Small Key (Thieves Hideout)', ("Thieves' Hideout", "Gerudo",))), ("Hideout Gerudo Membership Card", ("NPC", 0x0C, 0x3A, None, 'Gerudo Membership Card', ("Thieves' Hideout", "Gerudo",))), + # Gerudo's Fortress + ("GF Chest", ("Chest", 0x5D, 0x00, None, 'Piece of Heart', ("Gerudo's Fortress", "Gerudo",))), + ("GF HBA 1000 Points", ("NPC", 0x5D, 0x3E, None, 'Piece of Heart', ("Gerudo's Fortress", "Gerudo", "Minigames"))), + ("GF HBA 1500 Points", ("NPC", 0x5D, 0x30, None, 'Bow', ("Gerudo's Fortress", "Gerudo", "Minigames"))), + ("GF GS Top Floor", ("GS Token", 0x14, 0x02, None, 'Gold Skulltula Token', ("Gerudo's Fortress", "Skulltulas",))), + ("GF GS Archery Range", ("GS Token", 0x14, 0x01, None, 'Gold Skulltula Token', ("Gerudo's Fortress", "Skulltulas",))), + # Wasteland ("Wasteland Bombchu Salesman", ("NPC", 0x5E, 0x03, None, 'Bombchus (10)', ("Haunted Wasteland",))), ("Wasteland Chest", ("Chest", 0x5E, 0x00, None, 'Rupees (50)', ("Haunted Wasteland",))), From c8e54bbcd0311f710e2a79f50bc0c36a3532b899 Mon Sep 17 00:00:00 2001 From: espeon65536 Date: Sun, 1 May 2022 14:44:49 -0500 Subject: [PATCH 041/149] OoT: add Thieves' Hideout keys/locations to tracker --- WebHostLib/tracker.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/WebHostLib/tracker.py b/WebHostLib/tracker.py index d2289c127f..c4713b54a3 100644 --- a/WebHostLib/tracker.py +++ b/WebHostLib/tracker.py @@ -634,7 +634,8 @@ def __renderOoTTracker(multisave: Dict[str, Any], room: Room, locations: Dict[in "Shadow Temple": (67485, 67532), "Spirit Temple": (67533, 67582), "Ice Cavern": (67583, 67596), - "Gerudo Training Grounds": (67597, 67635), + "Gerudo Training Ground": (67597, 67635), + "Thieves' Hideout": (67259, 67263), "Ganon's Castle": (67636, 67673), } @@ -642,7 +643,7 @@ def __renderOoTTracker(multisave: Dict[str, Any], room: Room, locations: Dict[in full_name = lookup_any_location_id_to_name[id] if id == 67673: return full_name[13:] # Ganons Tower Boss Key Chest - if area != 'Overworld': + if area not in ["Overworld", "Thieves' Hideout"]: # trim dungeon name. leaves an extra space that doesn't display, or trims fully for DC/Jabu/GC return full_name[len(area):] return full_name @@ -653,6 +654,13 @@ def __renderOoTTracker(multisave: Dict[str, Any], room: Room, locations: Dict[in checks_done = {area: len(list(filter(lambda x: x, location_info[area].values()))) for area in area_id_ranges} checks_in_area = {area: len([id for id in range(min_id, max_id+1) if id in locations[player]]) for area, (min_id, max_id) in area_id_ranges.items()} + + # Remove Thieves' Hideout checks from Overworld, since it's in the middle of the range + checks_in_area["Overworld"] -= checks_in_area["Thieves' Hideout"] + checks_done["Overworld"] -= checks_done["Thieves' Hideout"] + for loc in location_info["Thieves' Hideout"]: + del location_info["Overworld"][loc] + checks_done['Total'] = sum(checks_done.values()) checks_in_area['Total'] = sum(checks_in_area.values()) @@ -670,7 +678,8 @@ def __renderOoTTracker(multisave: Dict[str, Any], room: Room, locations: Dict[in "Spirit Temple": inventory[66178], "Shadow Temple": inventory[66179], "Bottom of the Well": inventory[66180], - "Gerudo Training Grounds": inventory[66181], + "Gerudo Training Ground": inventory[66181], + "Thieves' Hideout": inventory[66182], "Ganon's Castle": inventory[66183], } boss_key_counts = { From 2d73f2f46e214c38b5437567cb1c7338949a1684 Mon Sep 17 00:00:00 2001 From: espeon65536 Date: Sun, 1 May 2022 14:48:33 -0500 Subject: [PATCH 042/149] OoT: update mq dungeon table address in lua script Plan is to automate this next version, so the lua doesn't need updating every time I mess with the ROM --- data/lua/OOT/oot_connector.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/lua/OOT/oot_connector.lua b/data/lua/OOT/oot_connector.lua index 0d42e62659..2f48a4bf7a 100644 --- a/data/lua/OOT/oot_connector.lua +++ b/data/lua/OOT/oot_connector.lua @@ -1546,7 +1546,7 @@ local player_names_address = coop_context + 20 local player_name_length = 8 -- 8 bytes local rom_name_location = player_names_address + 0x800 -local master_quest_table_address = rando_context + 0xB220 +local master_quest_table_address = rando_context + 0xB5A8 local save_context_addr = 0x11A5D0 local internal_count_addr = save_context_addr + 0x90 From 7fad0b0f510bd3b3ea9b2573d46b4bbab8d1e40d Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Tue, 3 May 2022 22:14:03 +0200 Subject: [PATCH 043/149] Test: introduce test for every game has a tutorial (#478) --- .github/workflows/unittests.yml | 2 +- ModuleUpdate.py | 5 ++++- WebHost.py | 13 ++++++++++--- test/webhost/TestTutorial.py | 22 ++++++++++++++++++++++ test/webhost/__init__.py | 0 worlds/AutoWorld.py | 6 +++--- 6 files changed, 40 insertions(+), 8 deletions(-) create mode 100644 test/webhost/TestTutorial.py create mode 100644 test/webhost/__init__.py diff --git a/.github/workflows/unittests.yml b/.github/workflows/unittests.yml index 2691fa9b8b..1c8ab10c70 100644 --- a/.github/workflows/unittests.yml +++ b/.github/workflows/unittests.yml @@ -34,7 +34,7 @@ jobs: run: | python -m pip install --upgrade pip pip install flake8 pytest - python ModuleUpdate.py --yes --force + python ModuleUpdate.py --yes --force --append "WebHostLib/requirements.txt" - name: Unittests run: | pytest test diff --git a/ModuleUpdate.py b/ModuleUpdate.py index d8b011715d..17eb0906b1 100644 --- a/ModuleUpdate.py +++ b/ModuleUpdate.py @@ -62,6 +62,9 @@ if __name__ == "__main__": parser = argparse.ArgumentParser(description='Install archipelago requirements') parser.add_argument('-y', '--yes', dest='yes', action='store_true', help='answer "yes" to all questions') parser.add_argument('-f', '--force', dest='force', action='store_true', help='force update') + parser.add_argument('-a', '--append', nargs="*", dest='additional_requirements', + help='List paths to additional requirement files.') args = parser.parse_args() - + if args.additional_requirements: + requirements_files.update(args.additional_requirements) update(args.yes, args.force) diff --git a/WebHost.py b/WebHost.py index 773120b791..4254727269 100644 --- a/WebHost.py +++ b/WebHost.py @@ -1,6 +1,7 @@ import os import multiprocessing import logging +import typing import ModuleUpdate @@ -36,13 +37,19 @@ def get_app(): return app -def create_ordered_tutorials_file(): +def create_ordered_tutorials_file() -> typing.List[typing.Dict[str, typing.Any]]: import json - with open(os.path.join("WebHostLib", "static", "assets", "tutorial", "tutorials.json")) as source: + + with open(Utils.local_path("WebHostLib", "static", "assets", "tutorial", "tutorials.json")) as source: data = json.load(source) + data = sorted(data, key=lambda entry: entry["gameTitle"].lower()) - with open(os.path.join("WebHostLib", "static", "generated", "tutorials.json"), "w") as target: + + folder = Utils.local_path("WebHostLib", "static", "generated") + os.makedirs(folder, exist_ok=True) + with open(os.path.join(folder, "tutorials.json"), "w") as target: json.dump(data, target) + return data if __name__ == "__main__": diff --git a/test/webhost/TestTutorial.py b/test/webhost/TestTutorial.py new file mode 100644 index 0000000000..78d619d3c4 --- /dev/null +++ b/test/webhost/TestTutorial.py @@ -0,0 +1,22 @@ +import unittest +from worlds.AutoWorld import AutoWorldRegister + + +class TestBase(unittest.TestCase): + def testCreateItem(self): + import WebHost + tutorials_data = WebHost.create_ordered_tutorials_file() + games_with_tutorial = set(entry["gameTitle"] for entry in tutorials_data) + for game_name, world_type in AutoWorldRegister.world_types.items(): + if not world_type.hidden: + with self.subTest(game_name): + try: + self.assertIn(game_name, games_with_tutorial) + except AssertionError: + # look for partial name in the tutorial name + for game in games_with_tutorial: + if game_name in game: + break + else: + self.fail(f"{game_name} has no setup tutorial. " + f"Games with Tutorial: {games_with_tutorial}") diff --git a/test/webhost/__init__.py b/test/webhost/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/worlds/AutoWorld.py b/worlds/AutoWorld.py index 7f97474134..ffd2c6b320 100644 --- a/worlds/AutoWorld.py +++ b/worlds/AutoWorld.py @@ -8,9 +8,9 @@ from Options import Option class AutoWorldRegister(type): - world_types: Dict[str, AutoWorldRegister] = {} + world_types: Dict[str, type(World)] = {} - def __new__(cls, name: str, bases: Tuple[type, ...], dct: Dict[str, Any]) -> AutoWorldRegister: + def __new__(mcs, name: str, bases: Tuple[type, ...], dct: Dict[str, Any]) -> AutoWorldRegister: if "web" in dct: assert isinstance(dct["web"], WebWorld), "WebWorld has to be instantiated." # filter out any events @@ -38,7 +38,7 @@ class AutoWorldRegister(type): base.__dict__["required_client_version"]) # construct class - new_class = super().__new__(cls, name, bases, dct) + new_class = super().__new__(mcs, name, bases, dct) if "game" in dct: AutoWorldRegister.world_types[dct["game"]] = new_class return new_class From c27bfc515e9602b2b4292485e7fa70509588c2ff Mon Sep 17 00:00:00 2001 From: black-sliver <59490463+black-sliver@users.noreply.github.com> Date: Thu, 5 May 2022 01:59:41 +0200 Subject: [PATCH 044/149] Factorio: map gen: allow width and height Don't accept arbitrary keys to catch typos. This should be all 'basic' map gen settings now. --- worlds/factorio/Options.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/worlds/factorio/Options.py b/worlds/factorio/Options.py index 2e24fe0718..fa6da6967f 100644 --- a/worlds/factorio/Options.py +++ b/worlds/factorio/Options.py @@ -262,6 +262,8 @@ class FactorioWorldGen(OptionDict): } }, Optional("seed"): Or(None, And(int, lambda n: n >= 0)), + Optional("width"): And(int, lambda n: n >= 0), + Optional("height"): And(int, lambda n: n >= 0), Optional("starting_area"): FloatRange(0.166, 6), Optional("peaceful_mode"): LuaBool, Optional("cliff_settings"): { From ea51df432daac03bbf0537cce81fdff75183db80 Mon Sep 17 00:00:00 2001 From: black-sliver <59490463+black-sliver@users.noreply.github.com> Date: Thu, 5 May 2022 02:02:50 +0200 Subject: [PATCH 045/149] Factorio: map gen: allow arbitrary property expressions Can be used to override tile generation; we don't want to define all of them --- worlds/factorio/Options.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/worlds/factorio/Options.py b/worlds/factorio/Options.py index fa6da6967f..b7d13c6464 100644 --- a/worlds/factorio/Options.py +++ b/worlds/factorio/Options.py @@ -272,11 +272,12 @@ class FactorioWorldGen(OptionDict): "richness": FloatRange(0, 6) }, Optional("property_expression_names"): Schema({ - "control-setting:moisture:bias": FloatRange(-0.5, 0.5), - "control-setting:moisture:frequency:multiplier": FloatRange(0.166, 6), - "control-setting:aux:bias": FloatRange(-0.5, 0.5), - "control-setting:aux:frequency:multiplier": FloatRange(0.166, 6) - }, ignore_extra_keys=True) + Optional("control-setting:moisture:bias"): FloatRange(-0.5, 0.5), + Optional("control-setting:moisture:frequency:multiplier"): FloatRange(0.166, 6), + Optional("control-setting:aux:bias"): FloatRange(-0.5, 0.5), + Optional("control-setting:aux:frequency:multiplier"): FloatRange(0.166, 6), + Optional(str): object # allow overriding all properties + }), }, "advanced": { Optional("pollution"): { From 517e72f44217e7e1c06608bb42719d39d5d381b0 Mon Sep 17 00:00:00 2001 From: CaitSith2 Date: Wed, 4 May 2022 20:03:19 -0700 Subject: [PATCH 046/149] Add options to generate page (#450) * Add Item cheat permission to generate page. * Indicate that both remaining_mode and item cheat are disabled in race mode. * Add server_password * refine tooltips and help for server_password and !admin command. * Add Plando options to generation page. * Remove debugging code * Style adjustments and HTML formatting and tag fixes with the goal of making the page nicer looking and not as vertical. Co-authored-by: Chris Wilson --- MultiServer.py | 5 +- WebHostLib/api/generate.py | 2 +- WebHostLib/check.py | 6 +- WebHostLib/generate.py | 17 +- WebHostLib/static/styles/generate.css | 19 ++- WebHostLib/templates/generate.html | 225 +++++++++++++++++--------- 6 files changed, 187 insertions(+), 87 deletions(-) diff --git a/MultiServer.py b/MultiServer.py index a454284f9b..f61701d2d2 100644 --- a/MultiServer.py +++ b/MultiServer.py @@ -1060,7 +1060,10 @@ class ClientMessageProcessor(CommonCommandProcessor): @mark_raw def _cmd_admin(self, command: str = ""): - """Allow remote administration of the multiworld server""" + """Allow remote administration of the multiworld server + Usage: "!admin login " in order to log in to the remote interface. + Once logged in, you can then use "!admin " to issue commands. + If you need further help once logged in. use "!admin /help" """ output = f"!admin {command}" if output.lower().startswith( diff --git a/WebHostLib/api/generate.py b/WebHostLib/api/generate.py index 90280ebade..faad50e1c6 100644 --- a/WebHostLib/api/generate.py +++ b/WebHostLib/api/generate.py @@ -45,7 +45,7 @@ def generate_api(): "detail": app.config["MAX_ROLL"]}, 409 meta = get_meta(meta_options_source) meta["race"] = race - results, gen_options = roll_options(options) + results, gen_options = roll_options(options, meta["plando_options"]) if any(type(result) == str for result in results.values()): return {"text": str(results), "detail": results}, 400 diff --git a/WebHostLib/check.py b/WebHostLib/check.py index 991af59b22..46de51b8cf 100644 --- a/WebHostLib/check.py +++ b/WebHostLib/check.py @@ -62,7 +62,7 @@ def get_yaml_data(file) -> Union[Dict[str, str], str]: return options -def roll_options(options: Dict[str, Union[dict, str]]) -> Tuple[Dict[str, Union[str, bool]], Dict[str, dict]]: +def roll_options(options: Dict[str, Union[dict, str]], plando_options: set = {"bosses", "items", "connections", "texts"}) -> Tuple[Dict[str, Union[str, bool]], Dict[str, dict]]: results = {} rolled_results = {} for filename, text in options.items(): @@ -77,11 +77,11 @@ def roll_options(options: Dict[str, Union[dict, str]]) -> Tuple[Dict[str, Union[ try: if len(yaml_datas) == 1: rolled_results[filename] = roll_settings(yaml_datas[0], - plando_options={"bosses", "items", "connections", "texts"}) + plando_options=plando_options) else: for i, yaml_data in enumerate(yaml_datas): rolled_results[f"{filename}/{i + 1}"] = roll_settings(yaml_data, - plando_options={"bosses", "items", "connections", "texts"}) + plando_options=plando_options) except Exception as e: results[filename] = f"Failed to generate mystery in {filename}: {e}" else: diff --git a/WebHostLib/generate.py b/WebHostLib/generate.py index da821cf539..00904762f8 100644 --- a/WebHostLib/generate.py +++ b/WebHostLib/generate.py @@ -22,11 +22,22 @@ from .upload import upload_zip_to_db def get_meta(options_source: dict) -> dict: + plando_options = { + options_source.get("plando_bosses", ""), + options_source.get("plando_items", ""), + options_source.get("plando_connections", ""), + options_source.get("plando_texts", "") + } + plando_options -= {""} + meta = { "hint_cost": int(options_source.get("hint_cost", 10)), "forfeit_mode": options_source.get("forfeit_mode", "goal"), "remaining_mode": options_source.get("remaining_mode", "disabled"), "collect_mode": options_source.get("collect_mode", "disabled"), + "item_cheat": bool(int(options_source.get("item_cheat", 1))), + "server_password": options_source.get("server_password", None), + "plando_options": plando_options } return meta @@ -44,10 +55,9 @@ def generate(race=False): if type(options) == str: flash(options) else: - results, gen_options = roll_options(options) - # get form data -> server settings meta = get_meta(request.form) meta["race"] = race + results, gen_options = roll_options(options, meta["plando_options"]) if race: meta["item_cheat"] = False @@ -89,6 +99,8 @@ def gen_game(gen_options, meta: TypeOptional[Dict[str, object]] = None, owner=No meta.setdefault("hint_cost", 10) race = meta.get("race", False) del (meta["race"]) + plando_options = meta.get("plando", {"bosses", "items", "connections", "texts"}) + del (meta["plando_options"]) try: target = tempfile.TemporaryDirectory() playercount = len(gen_options) @@ -108,6 +120,7 @@ def gen_game(gen_options, meta: TypeOptional[Dict[str, object]] = None, owner=No erargs.outputname = seedname erargs.outputpath = target.name erargs.teams = 1 + erargs.plando_options = ", ".join(plando_options) name_counter = Counter() for player, (playerfile, settings) in enumerate(gen_options.items(), 1): diff --git a/WebHostLib/static/styles/generate.css b/WebHostLib/static/styles/generate.css index 8b77d98191..066fb8a7c5 100644 --- a/WebHostLib/static/styles/generate.css +++ b/WebHostLib/static/styles/generate.css @@ -6,7 +6,7 @@ } #generate-game{ - width: 700px; + width: 990px; min-height: 360px; text-align: center; } @@ -25,9 +25,26 @@ margin-bottom: 1rem; } +#generate-game-tables-container{ + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: space-around; +} + +.table-wrapper select { + width: 200px; +} + +.table-wrapper input:not([type]){ + width: 200px; +} + #generate-game-form-wrapper table td{ text-align: left; padding-right: 0.5rem; + vertical-align: top; + width: 230px; } #generate-form-button-row{ diff --git a/WebHostLib/templates/generate.html b/WebHostLib/templates/generate.html index 8b07940f7d..4a5620831b 100644 --- a/WebHostLib/templates/generate.html +++ b/WebHostLib/templates/generate.html @@ -35,86 +35,153 @@

    - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + +
    - - (?) - - - -
    - - (?) - - - -
    - - (?) - - - -
    - - (?) - - - + + + + - - -
    + + (?) + + + -
    + + + +
    + + (?) + + + +
    + + (?) + + + +
    + + (?) + + + +
    +
    +
    + + + + + + + + + + + + + + + +
    + + (?) + + + +
    + + (?) + + + +
    + + + +
    + + +
    + + +
    + + + +
    +
    +
    From 40a08d0d84d16fb24c5d4fc538ea338c3dfb4c76 Mon Sep 17 00:00:00 2001 From: espeon65536 <81029175+espeon65536@users.noreply.github.com> Date: Fri, 6 May 2022 06:33:39 -0500 Subject: [PATCH 047/149] SM64 logic fixes and ER handling (#488) * SM64: add painting name to location hints if area randomizer * SM64: fix BitFS access logic Using can_reach regions in an entrance's logic is unsafe because reachable_regions won't be updated if no progression locations are reached. can_reach location is safe. * SM64: rework logic for correctness and consistency - BoB Mario Wings to the Sky is extremely difficult with cap and no cannon, will never be required - DDD Collect the Caps no longer requires metal cap except on strict cap - Cavern of the Metal Cap red coins no longer requires metal cap except on strict cap - CCM, TTM, WDW cannons added on strict cannons for their expected stars - BoB 100 coins requires cap or cannon if both are strict, since only 99 coins are available otherwise * SM64: write entrances to spoiler log * SM64: tweak format of WDW cannon rules --- worlds/sm64ex/Rules.py | 57 ++++++++++++++++++++++----------------- worlds/sm64ex/__init__.py | 18 ++++++++++++- 2 files changed, 50 insertions(+), 25 deletions(-) diff --git a/worlds/sm64ex/Rules.py b/worlds/sm64ex/Rules.py index fc50a2446b..0ba025d77a 100644 --- a/worlds/sm64ex/Rules.py +++ b/worlds/sm64ex/Rules.py @@ -4,7 +4,7 @@ from .Regions import connect_regions, sm64courses def set_rules(world, player: int, area_connections): courseshuffle = list(range(len(sm64courses))) - if world.AreaRandomizer[player].value: + if world.AreaRandomizer[player]: world.random.shuffle(courseshuffle) area_connections.update({index: value for index, value in enumerate(courseshuffle)}) @@ -22,7 +22,7 @@ def set_rules(world, player: int, area_connections): connect_regions(world, player, "Basement", sm64courses[area_connections[7]]) connect_regions(world, player, "Basement", sm64courses[area_connections[8]], lambda state: state.has("Power Star", player, 30)) connect_regions(world, player, "Basement", "Bowser in the Fire Sea", lambda state: state.has("Power Star", player, 30) and - state.can_reach("Dire, Dire Docks", 'Region', player)) + state.can_reach("DDD: Board Bowser's Sub", 'Location', player)) connect_regions(world, player, "Menu", "Second Floor", lambda state: state.has("Second Floor Key", player) or state.has("Progressive Key", player, 2)) @@ -38,48 +38,57 @@ def set_rules(world, player: int, area_connections): #Special Rules for some Locations add_rule(world.get_location("Tower of the Wing Cap Switch", player), lambda state: state.has("Power Star", player, 10)) - add_rule(world.get_location("Cavern of the Metal Cap Switch", player), lambda state: state.can_reach("Hazy Maze Cave",'Region',player)) + add_rule(world.get_location("Cavern of the Metal Cap Switch", player), lambda state: state.can_reach("Hazy Maze Cave", 'Region', player)) add_rule(world.get_location("Vanish Cap Under the Moat Switch", player), lambda state: state.can_reach("Basement", 'Region', player)) + add_rule(world.get_location("BoB: Mario Wings to the Sky", player), lambda state: state.has("Cannon Unlock BoB", player)) add_rule(world.get_location("BBH: Eye to Eye in the Secret Room", player), lambda state: state.has("Vanish Cap", player)) - add_rule(world.get_location("DDD: Collect the Caps...", player), lambda state: state.has("Metal Cap", player) and - state.has("Vanish Cap", player)) - add_rule(world.get_location("DDD: Pole-Jumping for Red Coins", player), lambda state: state.can_reach("Bowser in the Fire Sea",'Region',player)) + add_rule(world.get_location("DDD: Collect the Caps...", player), lambda state: state.has("Vanish Cap", player)) + add_rule(world.get_location("DDD: Pole-Jumping for Red Coins", player), lambda state: state.can_reach("Bowser in the Fire Sea", 'Region', player)) add_rule(world.get_location("SL: Into the Igloo", player), lambda state: state.has("Vanish Cap", player)) add_rule(world.get_location("WDW: Quick Race Through Downtown!", player), lambda state: state.has("Vanish Cap", player)) - if (world.StrictCapRequirements[player].value): + add_rule(world.get_location("RR: Somewhere Over the Rainbow", player), lambda state: state.has("Cannon Unlock RR", player)) + + if world.AreaRandomizer[player] or world.StrictCannonRequirements[player]: + # If area rando is on, it may not be possible to modify WDW's starting water level, + # which would make it impossible to reach downtown area without the cannon. + add_rule(world.get_location("WDW: Quick Race Through Downtown!", player), lambda state: state.has("Cannon Unlock WDW", player)) + add_rule(world.get_location("WDW: Go to Town for Red Coins", player), lambda state: state.has("Cannon Unlock WDW", player)) + + if world.StrictCapRequirements[player]: + add_rule(world.get_location("BoB: Mario Wings to the Sky", player), lambda state: state.has("Wing Cap", player)) add_rule(world.get_location("HMC: Metal-Head Mario Can Move!", player), lambda state: state.has("Metal Cap", player)) add_rule(world.get_location("JRB: Through the Jet Stream", player), lambda state: state.has("Metal Cap", player)) add_rule(world.get_location("SSL: Free Flying for 8 Red Coins", player), lambda state: state.has("Wing Cap", player)) add_rule(world.get_location("DDD: Through the Jet Stream", player), lambda state: state.has("Metal Cap", player)) + add_rule(world.get_location("DDD: Collect the Caps...", player), lambda state: state.has("Metal Cap", player)) add_rule(world.get_location("Vanish Cap Under the Moat Red Coins", player), lambda state: state.has("Vanish Cap", player)) - if (world.StrictCannonRequirements[player].value): - add_rule(world.get_location("BoB: Mario Wings to the Sky", player), lambda state: state.has("Cannon Unlock BoB", player)) + add_rule(world.get_location("Cavern of the Metal Cap Red Coins", player), lambda state: state.has("Metal Cap", player)) + if world.StrictCannonRequirements[player]: add_rule(world.get_location("WF: Blast Away the Wall", player), lambda state: state.has("Cannon Unlock WF", player)) add_rule(world.get_location("JRB: Blast to the Stone Pillar", player), lambda state: state.has("Cannon Unlock JRB", player)) - if (world.AreaRandomizer[player].value): - add_rule(world.get_location("WDW: Quick Race Through Downtown!", player), lambda state: state.has("Cannon Unlock WDW", player)) - add_rule(world.get_location("WDW: Go to Town for Red Coins", player), lambda state: state.has("Cannon Unlock WDW", player)) - if (world.StrictCapRequirements and world.StrictCannonRequirements[player].value): - add_rule(world.get_location("BoB: Mario Wings to the Sky", player), lambda state: state.has("Cannon Unlock BoB", player) or state.has("Wing Cap", player)) + add_rule(world.get_location("CCM: Wall Kicks Will Work", player), lambda state: state.has("Cannon Unlock CCM", player)) + add_rule(world.get_location("TTM: Blast to the Lonely Mushroom", player), lambda state: state.has("Cannon Unlock TTM", player)) + if world.StrictCapRequirements[player] and world.StrictCannonRequirements[player]: + # Ability to reach the floating island. Need some of those coins to get 100 coin star as well. add_rule(world.get_location("BoB: Find the 8 Red Coins", player), lambda state: state.has("Cannon Unlock BoB", player) or state.has("Wing Cap", player)) add_rule(world.get_location("BoB: Shoot to the Island in the Sky", player), lambda state: state.has("Cannon Unlock BoB", player) or state.has("Wing Cap", player)) - - add_rule(world.get_location("RR: Somewhere Over the Rainbow", player), lambda state: state.has("Cannon Unlock RR", player)) + if world.EnableCoinStars[player]: + add_rule(world.get_location("BoB: 100 Coins", player), lambda state: state.has("Cannon Unlock BoB", player) or state.has("Wing Cap", player)) #Rules for Secret Stars - add_rule(world.get_location("Bowser in the Sky Red Coins", player), lambda state: state.can_reach("Third Floor",'Region',player) and state.has("Power Star", player, world.StarsToFinish[player].value)) + add_rule(world.get_location("Bowser in the Sky Red Coins", player), lambda state: state.can_reach("Third Floor", 'Region',player) and state.has("Power Star", player, world.StarsToFinish[player].value)) add_rule(world.get_location("The Princess's Secret Slide Block", player), lambda state: state.has("Power Star", player, 1)) add_rule(world.get_location("The Princess's Secret Slide Fast", player), lambda state: state.has("Power Star", player, 1)) - add_rule(world.get_location("Cavern of the Metal Cap Red Coins", player), lambda state: state.can_reach("Cavern of the Metal Cap Switch", 'Location', player) and state.has("Metal Cap", player)) + add_rule(world.get_location("Cavern of the Metal Cap Red Coins", player), lambda state: state.can_reach("Cavern of the Metal Cap Switch", 'Location', player)) add_rule(world.get_location("Tower of the Wing Cap Red Coins", player), lambda state: state.can_reach("Tower of the Wing Cap Switch", 'Location', player)) add_rule(world.get_location("Vanish Cap Under the Moat Red Coins", player), lambda state: state.can_reach("Vanish Cap Under the Moat Switch", 'Location', player)) add_rule(world.get_location("Wing Mario Over the Rainbow", player), lambda state: state.can_reach("Third Floor", 'Region', player) and state.has("Wing Cap", player)) add_rule(world.get_location("The Secret Aquarium", player), lambda state: state.has("Power Star", player, 3)) - add_rule(world.get_location("Toad (Basement)", player), lambda state: state.can_reach("Basement",'Region',player) and state.has("Power Star", player, 12)) - add_rule(world.get_location("Toad (Second Floor)", player), lambda state: state.can_reach("Second Floor",'Region',player) and state.has("Power Star", player, 25)) - add_rule(world.get_location("Toad (Third Floor)", player), lambda state: state.can_reach("Third Floor",'Region',player) and state.has("Power Star", player, 35)) - add_rule(world.get_location("MIPS 1", player), lambda state: state.can_reach("Basement",'Region',player) and state.has("Power Star", player, 15)) - add_rule(world.get_location("MIPS 2", player), lambda state: state.can_reach("Basement",'Region',player) and state.has("Power Star", player, 50)) + add_rule(world.get_location("Toad (Basement)", player), lambda state: state.can_reach("Basement", 'Region', player) and state.has("Power Star", player, 12)) + add_rule(world.get_location("Toad (Second Floor)", player), lambda state: state.can_reach("Second Floor", 'Region', player) and state.has("Power Star", player, 25)) + add_rule(world.get_location("Toad (Third Floor)", player), lambda state: state.can_reach("Third Floor", 'Region', player) and state.has("Power Star", player, 35)) + add_rule(world.get_location("MIPS 1", player), lambda state: state.can_reach("Basement", 'Region', player) and state.has("Power Star", player, 15)) + add_rule(world.get_location("MIPS 2", player), lambda state: state.can_reach("Basement", 'Region', player) and state.has("Power Star", player, 50)) - world.completion_condition[player] = lambda state: state.can_reach("Third Floor",'Region',player) and state.has("Power Star", player, world.StarsToFinish[player].value) + world.completion_condition[player] = lambda state: state.can_reach("Third Floor", 'Region', player) and state.has("Power Star", player, world.StarsToFinish[player].value) diff --git a/worlds/sm64ex/__init__.py b/worlds/sm64ex/__init__.py index a859872543..09976b57ca 100644 --- a/worlds/sm64ex/__init__.py +++ b/worlds/sm64ex/__init__.py @@ -5,7 +5,7 @@ from .Items import item_table, cannon_item_table, SM64Item from .Locations import location_table, SM64Location from .Options import sm64_options from .Rules import set_rules -from .Regions import create_regions +from .Regions import create_regions, sm64courses from BaseClasses import Region, RegionType, Entrance, Item, MultiWorld from ..AutoWorld import World @@ -39,6 +39,13 @@ class SM64World(World): def set_rules(self): self.area_connections = {} set_rules(self.world, self.player, self.area_connections) + if self.topology_present: + # Write area_connections to spoiler log + for painting_id, course_id in self.area_connections.items(): + self.world.spoiler.set_entrance( + sm64courses[painting_id] + " Painting", + sm64courses[course_id], + 'entrance', self.player) def create_item(self, name: str) -> Item: item_id = item_table[name] @@ -110,3 +117,12 @@ class SM64World(World): filename = f"AP_{self.world.seed_name}_P{self.player}_{self.world.get_file_safe_player_name(self.player)}.apsm64ex" with open(os.path.join(output_directory, filename), 'w') as f: json.dump(data, f) + + def modify_multidata(self, multidata): + if self.topology_present: + er_hint_data = {} + for painting_id, course_id in self.area_connections.items(): + region = self.world.get_region(sm64courses[course_id], self.player) + for location in region.locations: + er_hint_data[location.address] = sm64courses[painting_id] + multidata['er_hint_data'][self.player] = er_hint_data From 1e592b468126d01ca34c38c58e9e4e0242a4e271 Mon Sep 17 00:00:00 2001 From: Hussein Farran Date: Fri, 6 May 2022 10:01:43 -0400 Subject: [PATCH 048/149] Update network protocol doc to extend intra-doc linking (#489) --- docs/network protocol.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/network protocol.md b/docs/network protocol.md index 48b8448d91..b7e7ccc3ea 100644 --- a/docs/network protocol.md +++ b/docs/network protocol.md @@ -121,7 +121,7 @@ Sent to clients when the connection handshake is successfully completed. | missing_locations | list\[int\] | Contains ids of remaining locations that need to be checked. Useful for trackers, among other things. | | checked_locations | list\[int\] | Contains ids of all locations that have been checked. Useful for trackers, among other things. Location ids are in the range of ± 253-1. | | slot_data | dict | Contains a json object for slot related data, differs per game. Empty if not required. | -| slot_info | dict\[int, NetworkSlot\] | maps each slot to a NetworkSlot information | +| slot_info | dict\[int, [NetworkSlot](#NetworkSlot)\] | maps each slot to a [NetworkSlot](#NetworkSlot) information | ### ReceivedItems Sent to clients when they receive an item. From 9ab7c8d9e5b18a6f8e8eed7ed5eb2c489f202860 Mon Sep 17 00:00:00 2001 From: NewSoupVi <57900059+NewSoupVi@users.noreply.github.com> Date: Mon, 9 May 2022 07:20:28 +0200 Subject: [PATCH 049/149] Witness: Changes in response to Beta run 1 (#494) Co-authored-by: metzner --- worlds/witness/Options.py | 17 +++++++++---- worlds/witness/WitnessLogic.txt | 2 +- worlds/witness/__init__.py | 20 +++++++++------- worlds/witness/items.py | 40 ++++++++++++++++++++++++++----- worlds/witness/utils.py | 42 ++++++++++++++++++++++++++++++++- 5 files changed, 100 insertions(+), 21 deletions(-) diff --git a/worlds/witness/Options.py b/worlds/witness/Options.py index c150225d86..ce590810b7 100644 --- a/worlds/witness/Options.py +++ b/worlds/witness/Options.py @@ -1,6 +1,6 @@ from typing import Dict from BaseClasses import MultiWorld -from Options import Toggle, DefaultOnToggle, Option +from Options import Toggle, DefaultOnToggle, Option, Range # class HardMode(Toggle): @@ -30,8 +30,8 @@ class ShuffleVaultBoxes(Toggle): class ShuffleUncommonLocations(Toggle): - """Adds the following checks to the pool: - Mountaintop River Shape, Tutorial Patio Floor, Theater Videos""" + """Adds some optional puzzles that are somewhat difficult or out of the way. + Examples: Mountaintop River Shape, Tutorial Patio Floor, Theater Videos""" display_name = "Shuffle Uncommon Locations" @@ -46,6 +46,14 @@ class ChallengeVictoryCondition(Toggle): display_name = "Victory on beating the Challenge" +class TrapPercentage(Range): + """Replaces junk items with traps, at the specified rate.""" + display_name = "Trap Percentage" + range_start = 0 + range_end = 100 + default = 20 + + the_witness_options: Dict[str, Option] = { # "hard_mode": HardMode, # "unlock_symbols": UnlockSymbols, @@ -54,7 +62,8 @@ the_witness_options: Dict[str, Option] = { "shuffle_vault_boxes": ShuffleVaultBoxes, "shuffle_uncommon": ShuffleUncommonLocations, "shuffle_hard": ShuffleHardLocations, - "challenge_victory": ChallengeVictoryCondition + "challenge_victory": ChallengeVictoryCondition, + "trap_percentage": TrapPercentage } diff --git a/worlds/witness/WitnessLogic.txt b/worlds/witness/WitnessLogic.txt index 5a9d9de502..e17f13338f 100644 --- a/worlds/witness/WitnessLogic.txt +++ b/worlds/witness/WitnessLogic.txt @@ -370,7 +370,7 @@ Jungle (Jungle) - Main Island - True: Outside Jungle River (River) - Main Island - True - Jungle - 0x337FA: 0x17CAA (Rhombic Avoid to Monastery Garden) - True - Environment -0x15ADD (Rhombic Avoid Vault) - True - Environment +0x15ADD (Vault) - True - Environment & Black/White Squares & Dots 0x03702 (Vault Box) - 0x15ADD - True Outside Bunker (Bunker) - Main Island - True - Inside Bunker - 0x0A079: diff --git a/worlds/witness/__init__.py b/worlds/witness/__init__.py index 1c10c6bce7..6d02e77479 100644 --- a/worlds/witness/__init__.py +++ b/worlds/witness/__init__.py @@ -12,6 +12,7 @@ from .items import WitnessItem, StaticWitnessItems, WitnessPlayerItems from .rules import set_rules from .regions import WitnessRegions from .Options import is_option_enabled, the_witness_options +from .utils import best_junk_to_add_based_on_weights class WitnessWebWorld(WebWorld): @@ -50,6 +51,8 @@ class WitnessWorld(World): self.items = WitnessPlayerItems(self.locat, self.world, self.player, self.player_logic) self.regio = WitnessRegions(self.locat) + self.junk_items_created = {key: 0 for key in self.items.JUNK_WEIGHTS.keys()} + def generate_basic(self): # Generate item pool pool = [] @@ -69,13 +72,10 @@ class WitnessWorld(World): pool.remove(items_by_name[random_good_item]) # Put in junk items to fill the rest - junk_pool = self.items.JUNK_WEIGHTS.copy() - junk_pool = self.world.random.choices( - list(junk_pool.keys()), weights=list(junk_pool.values()), - k=len(self.locat.CHECK_LOCATION_TABLE) - len(pool) - len(self.locat.EVENT_LOCATION_TABLE) - 1 - ) + junk_size = len(self.locat.CHECK_LOCATION_TABLE) - len(pool) - len(self.locat.EVENT_LOCATION_TABLE) - 1 - pool += [self.create_item(junk) for junk in junk_pool] + for i in range(0, junk_size): + pool.append(self.create_item(self.get_filler_item_name())) # Tie Event Items to Event Locations (e.g. Laser Activations) for event_location in self.locat.EVENT_LOCATION_TABLE: @@ -118,10 +118,12 @@ class WitnessWorld(World): new_item.trap = item.trap return new_item - def get_filler_item_name(self) -> str: # Used ny itemlinks - junk_pool = self.items.JUNK_WEIGHTS.copy() + def get_filler_item_name(self) -> str: # Used by itemlinks + item = best_junk_to_add_based_on_weights(self.items.JUNK_WEIGHTS, self.junk_items_created) - return self.world.random.choices(list(junk_pool.keys()), weights=list(junk_pool.values()))[0] + self.junk_items_created[item] += 1 + + return item class WitnessLocation(Location): diff --git a/worlds/witness/items.py b/worlds/witness/items.py index 4e19bfa7b9..47bbd1fbce 100644 --- a/worlds/witness/items.py +++ b/worlds/witness/items.py @@ -6,7 +6,8 @@ from typing import Dict, NamedTuple, Optional from BaseClasses import Item, MultiWorld from . import StaticWitnessLogic, WitnessPlayerLocations, WitnessPlayerLogic -from .Options import is_option_enabled +from .Options import get_option_value, is_option_enabled +from fractions import Fraction class ItemData(NamedTuple): @@ -33,12 +34,19 @@ class StaticWitnessItems: ALL_ITEM_TABLE: Dict[str, ItemData] = {} - JUNK_WEIGHTS = { - "Speed Boost": 1, - "Slowness": 0.8, - "Power Surge": 0.2, + # These should always add up to 1!!! + BONUS_WEIGHTS = { + "Speed Boost": Fraction(1, 1), } + # These should always add up to 1!!! + TRAP_WEIGHTS = { + "Slowness": Fraction(8, 10), + "Power Surge": Fraction(2, 10), + } + + ALL_JUNK_ITEMS = set(BONUS_WEIGHTS.keys()) | set(TRAP_WEIGHTS.keys()) + def __init__(self): item_tab = dict() @@ -91,8 +99,28 @@ class WitnessPlayerItems: self.EVENT_ITEM_TABLE[location] = ItemData(None, True, True) self.ITEM_TABLE[location] = ItemData(None, True, True) + trap_percentage = get_option_value(world, player, "trap_percentage") + + self.JUNK_WEIGHTS = dict() + + if trap_percentage != 0: + # I'm sure there must be some super "pythonic" way of doing this :D + + for trap_name, trap_weight in StaticWitnessItems.TRAP_WEIGHTS.items(): + self.JUNK_WEIGHTS[trap_name] = (trap_weight * trap_percentage) / 100 + + if trap_percentage != 100: + for bonus_name, bonus_weight in StaticWitnessItems.BONUS_WEIGHTS.items(): + self.JUNK_WEIGHTS[bonus_name] = (bonus_weight * (100 - trap_percentage)) / 100 + self.JUNK_WEIGHTS = { key: value for (key, value) - in StaticWitnessItems.JUNK_WEIGHTS.items() + in self.JUNK_WEIGHTS.items() if key in self.ITEM_TABLE.keys() } + + # JUNK_WEIGHTS will add up to 1 if the boosts weights and the trap weights each add up to 1 respectively. + + for junk_item in StaticWitnessItems.ALL_JUNK_ITEMS: + if junk_item not in self.JUNK_WEIGHTS.keys(): + del self.ITEM_TABLE[junk_item] diff --git a/worlds/witness/utils.py b/worlds/witness/utils.py index 85f43ab2fb..3ccaf5d19f 100644 --- a/worlds/witness/utils.py +++ b/worlds/witness/utils.py @@ -1,5 +1,45 @@ import os from Utils import cache_argsless +from itertools import accumulate +from typing import * +from fractions import Fraction + + +def best_junk_to_add_based_on_weights(weights: Dict[Any, Fraction], created_junk: Dict[Any, int]): + min_error = ("", 2) + + for junk_name, instances in created_junk.items(): + new_dist = created_junk.copy() + new_dist[junk_name] += 1 + new_dist_length = sum(new_dist.values()) + new_dist = {key: Fraction(value/1)/new_dist_length for key, value in new_dist.items()} + + errors = {key: abs(new_dist[key] - weights[key]) for key in created_junk.keys()} + + new_min_error = max(errors.values()) + + if min_error[1] > new_min_error: + min_error = (junk_name, new_min_error) + + return min_error[0] + + +def weighted_list(weights: Dict[Any, Fraction], length): + """ + Example: + weights = {A: 0.3, B: 0.3, C: 0.4} + length = 10 + + returns: [A, A, A, B, B, B, C, C, C, C] + + Makes sure to match length *exactly*, might approximate as a result + """ + vals = accumulate(map(lambda x: x * length, weights.values()), lambda x, y: x + y) + output_list = [] + for k, v in zip(weights.keys(), vals): + while len(output_list) < v: + output_list.append(k) + return output_list def define_new_region(region_string): @@ -55,4 +95,4 @@ def get_disable_unrandomized_list(): path = os.path.join(os.path.dirname(__file__), adjustment_file) with open(path) as f: - return [line.strip() for line in f.readlines()] \ No newline at end of file + return [line.strip() for line in f.readlines()] From eb1abd92227538297517f9a32eb776eb4489c92c Mon Sep 17 00:00:00 2001 From: Kono Tyran Date: Fri, 22 Apr 2022 20:00:18 -0700 Subject: [PATCH 050/149] Fix broken image link in Factorio `setup_en.md` --- WebHostLib/static/assets/tutorial/Factorio/setup_en.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WebHostLib/static/assets/tutorial/Factorio/setup_en.md b/WebHostLib/static/assets/tutorial/Factorio/setup_en.md index aa866d5ab9..b772239cfd 100644 --- a/WebHostLib/static/assets/tutorial/Factorio/setup_en.md +++ b/WebHostLib/static/assets/tutorial/Factorio/setup_en.md @@ -91,7 +91,7 @@ potential conflicts with your currently-installed version of Factorio. Download appropriate to your operating system, and extract the folder to a convenient location (we recommend `C:\Factorio` or similar). -![Factorio Download Options](/static/assets/tutorial/factorio/factorio-download.png) +![Factorio Download Options](/static/assets/tutorial/Factorio/factorio-download.png) Next, you should launch your Factorio Server by running `factorio.exe`, which is located at: `bin/x64/factorio.exe`. You will be asked to log in to your Factorio account using the same credentials you used on Factorio's website. After you From 19dd447dcb3c72d6bf17f0306a6e0efa09023116 Mon Sep 17 00:00:00 2001 From: espeon65536 Date: Sat, 7 May 2022 08:44:49 -0500 Subject: [PATCH 051/149] OoT: update connector.lua to use new names --- data/lua/OOT/oot_connector.lua | 92 +++++++++++++++++----------------- 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/data/lua/OOT/oot_connector.lua b/data/lua/OOT/oot_connector.lua index 2f48a4bf7a..bfb41ed006 100644 --- a/data/lua/OOT/oot_connector.lua +++ b/data/lua/OOT/oot_connector.lua @@ -464,7 +464,7 @@ local read_graveyard_checks = function() local checks = {} checks["Graveyard Shield Grave Chest"] = chest_check(0x40, 0x00) checks["Graveyard Heart Piece Grave Chest"] = chest_check(0x3F, 0x00) - checks["Graveyard Composers Grave Chest"] = chest_check(0x41, 0x00) + checks["Graveyard Royal Familys Tomb Chest"] = chest_check(0x41, 0x00) checks["Graveyard Freestanding PoH"] = on_the_ground_check(0x53, 0x4) checks["Graveyard Dampe Gravedigging Tour"] = on_the_ground_check(0x53, 0x8) checks["Graveyard Hookshot Chest"] = chest_check(0x48, 0x00) @@ -899,11 +899,11 @@ end local read_gerudo_fortress_checks = function() local checks = {} - checks["GF North F1 Carpenter"] = on_the_ground_check(0xC, 0xC) - checks["GF North F2 Carpenter"] = on_the_ground_check(0xC, 0xA) - checks["GF South F1 Carpenter"] = on_the_ground_check(0xC, 0xE) - checks["GF South F2 Carpenter"] = on_the_ground_check(0xC, 0xF) - checks["GF Gerudo Membership Card"] = membership_card_check(0xC, 0x2) + checks["Hideout Jail Guard (1 Torch)"] = on_the_ground_check(0xC, 0xC) + checks["Hideout Jail Guard (2 Torches)"] = on_the_ground_check(0xC, 0xF) + checks["Hideout Jail Guard (3 Torches)"] = on_the_ground_check(0xC, 0xA) + checks["Hideout Jail Guard (4 Torches)"] = on_the_ground_check(0xC, 0xE) + checks["Hideout Gerudo Membership Card"] = membership_card_check(0xC, 0x2) checks["GF Chest"] = chest_check(0x5D, 0x0) checks["GF HBA 1000 Points"] = info_table_check(0x33, 0x0) checks["GF HBA 1500 Points"] = item_get_info_check(0x0, 0x7) @@ -915,46 +915,46 @@ end local read_gerudo_training_ground_checks = function(mq_table_address) local checks = {} if not is_master_quest_dungeon(mq_table_address, 0xB) then - checks["Gerudo Training Grounds Lobby Left Chest"] = chest_check(0x0B, 0x13) - checks["Gerudo Training Grounds Lobby Right Chest"] = chest_check(0x0B, 0x07) - checks["Gerudo Training Grounds Stalfos Chest"] = chest_check(0x0B, 0x00) - checks["Gerudo Training Grounds Before Heavy Block Chest"] = chest_check(0x0B, 0x11) - checks["Gerudo Training Grounds Heavy Block First Chest"] = chest_check(0x0B, 0x0F) - checks["Gerudo Training Grounds Heavy Block Second Chest"] = chest_check(0x0B, 0x0E) - checks["Gerudo Training Grounds Heavy Block Third Chest"] = chest_check(0x0B, 0x14) - checks["Gerudo Training Grounds Heavy Block Fourth Chest"] = chest_check(0x0B, 0x02) - checks["Gerudo Training Grounds Eye Statue Chest"] = chest_check(0x0B, 0x03) - checks["Gerudo Training Grounds Near Scarecrow Chest"] = chest_check(0x0B, 0x04) - checks["Gerudo Training Grounds Hammer Room Clear Chest"] = chest_check(0x0B, 0x12) - checks["Gerudo Training Grounds Hammer Room Switch Chest"] = chest_check(0x0B, 0x10) - checks["Gerudo Training Grounds Freestanding Key"] = on_the_ground_check(0x0B, 0x1) - checks["Gerudo Training Grounds Maze Right Central Chest"] = chest_check(0x0B, 0x05) - checks["Gerudo Training Grounds Maze Right Side Chest"] = chest_check(0x0B, 0x08) - checks["Gerudo Training Grounds Underwater Silver Rupee Chest"] = chest_check(0x0B, 0x0D) - checks["Gerudo Training Grounds Beamos Chest"] = chest_check(0x0B, 0x01) - checks["Gerudo Training Grounds Hidden Ceiling Chest"] = chest_check(0x0B, 0x0B) - checks["Gerudo Training Grounds Maze Path First Chest"] = chest_check(0x0B, 0x06) - checks["Gerudo Training Grounds Maze Path Second Chest"] = chest_check(0x0B, 0x0A) - checks["Gerudo Training Grounds Maze Path Third Chest"] = chest_check(0x0B, 0x09) - checks["Gerudo Training Grounds Maze Path Final Chest"] = chest_check(0x0B, 0x0C) + checks["Gerudo Training Ground Lobby Left Chest"] = chest_check(0x0B, 0x13) + checks["Gerudo Training Ground Lobby Right Chest"] = chest_check(0x0B, 0x07) + checks["Gerudo Training Ground Stalfos Chest"] = chest_check(0x0B, 0x00) + checks["Gerudo Training Ground Before Heavy Block Chest"] = chest_check(0x0B, 0x11) + checks["Gerudo Training Ground Heavy Block First Chest"] = chest_check(0x0B, 0x0F) + checks["Gerudo Training Ground Heavy Block Second Chest"] = chest_check(0x0B, 0x0E) + checks["Gerudo Training Ground Heavy Block Third Chest"] = chest_check(0x0B, 0x14) + checks["Gerudo Training Ground Heavy Block Fourth Chest"] = chest_check(0x0B, 0x02) + checks["Gerudo Training Ground Eye Statue Chest"] = chest_check(0x0B, 0x03) + checks["Gerudo Training Ground Near Scarecrow Chest"] = chest_check(0x0B, 0x04) + checks["Gerudo Training Ground Hammer Room Clear Chest"] = chest_check(0x0B, 0x12) + checks["Gerudo Training Ground Hammer Room Switch Chest"] = chest_check(0x0B, 0x10) + checks["Gerudo Training Ground Freestanding Key"] = on_the_ground_check(0x0B, 0x1) + checks["Gerudo Training Ground Maze Right Central Chest"] = chest_check(0x0B, 0x05) + checks["Gerudo Training Ground Maze Right Side Chest"] = chest_check(0x0B, 0x08) + checks["Gerudo Training Ground Underwater Silver Rupee Chest"] = chest_check(0x0B, 0x0D) + checks["Gerudo Training Ground Beamos Chest"] = chest_check(0x0B, 0x01) + checks["Gerudo Training Ground Hidden Ceiling Chest"] = chest_check(0x0B, 0x0B) + checks["Gerudo Training Ground Maze Path First Chest"] = chest_check(0x0B, 0x06) + checks["Gerudo Training Ground Maze Path Second Chest"] = chest_check(0x0B, 0x0A) + checks["Gerudo Training Ground Maze Path Third Chest"] = chest_check(0x0B, 0x09) + checks["Gerudo Training Ground Maze Path Final Chest"] = chest_check(0x0B, 0x0C) else - checks["Gerudo Training Grounds MQ Lobby Left Chest"] = chest_check(0xB, 0x13) - checks["Gerudo Training Grounds MQ Lobby Right Chest"] = chest_check(0xB, 0x7) - checks["Gerudo Training Grounds MQ First Iron Knuckle Chest"] = chest_check(0xB, 0x0) - checks["Gerudo Training Grounds MQ Before Heavy Block Chest"] = chest_check(0xB, 0x11) - checks["Gerudo Training Grounds MQ Heavy Block Chest"] = chest_check(0xB, 0x2) - checks["Gerudo Training Grounds MQ Eye Statue Chest"] = chest_check(0xB, 0x3) - checks["Gerudo Training Grounds MQ Ice Arrows Chest"] = chest_check(0xB, 0x4) - checks["Gerudo Training Grounds MQ Second Iron Knuckle Chest"] = chest_check(0xB, 0x12) - checks["Gerudo Training Grounds MQ Flame Circle Chest"] = chest_check(0xB, 0xE) - checks["Gerudo Training Grounds MQ Maze Right Central Chest"] = chest_check(0xB, 0x5) - checks["Gerudo Training Grounds MQ Maze Right Side Chest"] = chest_check(0xB, 0x8) - checks["Gerudo Training Grounds MQ Underwater Silver Rupee Chest"] = chest_check(0xB, 0xD) - checks["Gerudo Training Grounds MQ Dinolfos Chest"] = chest_check(0xB, 0x1) - checks["Gerudo Training Grounds MQ Hidden Ceiling Chest"] = chest_check(0xB, 0xB) - checks["Gerudo Training Grounds MQ Maze Path First Chest"] = chest_check(0xB, 0x6) - checks["Gerudo Training Grounds MQ Maze Path Third Chest"] = chest_check(0xB, 0x9) - checks["Gerudo Training Grounds MQ Maze Path Second Chest"] = chest_check(0xB, 0xA) + checks["Gerudo Training Ground MQ Lobby Left Chest"] = chest_check(0xB, 0x13) + checks["Gerudo Training Ground MQ Lobby Right Chest"] = chest_check(0xB, 0x7) + checks["Gerudo Training Ground MQ First Iron Knuckle Chest"] = chest_check(0xB, 0x0) + checks["Gerudo Training Ground MQ Before Heavy Block Chest"] = chest_check(0xB, 0x11) + checks["Gerudo Training Ground MQ Heavy Block Chest"] = chest_check(0xB, 0x2) + checks["Gerudo Training Ground MQ Eye Statue Chest"] = chest_check(0xB, 0x3) + checks["Gerudo Training Ground MQ Ice Arrows Chest"] = chest_check(0xB, 0x4) + checks["Gerudo Training Ground MQ Second Iron Knuckle Chest"] = chest_check(0xB, 0x12) + checks["Gerudo Training Ground MQ Flame Circle Chest"] = chest_check(0xB, 0xE) + checks["Gerudo Training Ground MQ Maze Right Central Chest"] = chest_check(0xB, 0x5) + checks["Gerudo Training Ground MQ Maze Right Side Chest"] = chest_check(0xB, 0x8) + checks["Gerudo Training Ground MQ Underwater Silver Rupee Chest"] = chest_check(0xB, 0xD) + checks["Gerudo Training Ground MQ Dinolfos Chest"] = chest_check(0xB, 0x1) + checks["Gerudo Training Ground MQ Hidden Ceiling Chest"] = chest_check(0xB, 0xB) + checks["Gerudo Training Ground MQ Maze Path First Chest"] = chest_check(0xB, 0x6) + checks["Gerudo Training Ground MQ Maze Path Third Chest"] = chest_check(0xB, 0x9) + checks["Gerudo Training Ground MQ Maze Path Second Chest"] = chest_check(0xB, 0xA) end return checks end @@ -1107,7 +1107,7 @@ local read_song_checks = function() checks["Song from Impa"] = event_check(0x5, 0x9) -- Zelda's Lullaby checks["Song from Malon"] = event_check(0x5, 0x8) -- Epona's Song checks["Song from Saria"] = event_check(0x5, 0x7) -- Saria's Song - checks["Song from Composers Grave"] = event_check(0x5, 0xA) -- Sun's Song + checks["Song from Royal Familys Tomb"] = event_check(0x5, 0xA) -- Sun's Song checks["Song from Ocarina of Time"] = event_check(0xA, 0x9) -- Song of Time checks["Song from Windmill"] = event_check(0x5, 0xB) -- Song of Storms checks["Sheik in Forest"] = event_check(0x5, 0x0) -- Minuet of Forest From a020dea27756ca2cfdbeea477b04f48e4de10a02 Mon Sep 17 00:00:00 2001 From: black-sliver <59490463+black-sliver@users.noreply.github.com> Date: Tue, 10 May 2022 00:32:16 +0200 Subject: [PATCH 052/149] Doc: fix wrong naming in api.md example code --- docs/api.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/api.md b/docs/api.md index 239e65bc3f..c984dcd361 100644 --- a/docs/api.md +++ b/docs/api.md @@ -626,7 +626,7 @@ class MyGameWorld(World): # ... def set_rules(self): set_rule(self.world.get_location("A Door", self.player), - lamda state: state._myworld_has_key(self.world, self.player)) + lamda state: state._mygame_has_key(self.world, self.player)) ``` ### Generate Output From 513ab62ce77d24bad6ae12413968545752618daa Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Mon, 9 May 2022 07:18:50 +0200 Subject: [PATCH 053/149] Fuzzy: replace thefuzz with jellyfish GPL -> BSD2Clause and should be faster though I haven't tested it myself and just trusted people on the internet. Jellyfish also allows us access to many more algorithms should they be any better. Trying out Jaro distance now instead of Levenshtein. --- MultiServer.py | 4 +--- Options.py | 6 +++--- Utils.py | 8 ++++++++ requirements.txt | 4 ++-- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/MultiServer.py b/MultiServer.py index f61701d2d2..c58083ae97 100644 --- a/MultiServer.py +++ b/MultiServer.py @@ -24,8 +24,6 @@ ModuleUpdate.update() import websockets import colorama -from thefuzz import process as fuzzy_process - import NetUtils from worlds.AutoWorld import AutoWorldRegister @@ -907,7 +905,7 @@ def json_format_send_event(net_item: NetworkItem, receiving_player: int): def get_intended_text(input_text: str, possible_answers) -> typing.Tuple[str, bool, str]: - picks = fuzzy_process.extract(input_text, possible_answers, limit=2) + picks = Utils.get_fuzzy_results(input_text, possible_answers) if len(picks) > 1: dif = picks[0][1] - picks[1][1] if picks[0][1] == 100: diff --git a/Options.py b/Options.py index ea1b7eed1e..042224d12a 100644 --- a/Options.py +++ b/Options.py @@ -6,7 +6,7 @@ import typing import random from schema import Schema, And, Or -from thefuzz import process as fuzzy_process +from Utils import get_fuzzy_results class AssembleOptions(abc.ABCMeta): @@ -457,14 +457,14 @@ class VerifyKeys: if self.verify_item_name: for item_name in self.value: if item_name not in world.item_names: - picks = fuzzy_process.extract(item_name, world.item_names, limit=2) + picks = get_fuzzy_results(item_name, world.item_names) raise Exception(f"Item {item_name} from option {self} " f"is not a valid item name from {world.game}. " f"Did you mean '{picks[0][0]}' ({picks[0][1]}% sure)") elif self.verify_location_name: for location_name in self.value: if location_name not in world.location_names: - picks = fuzzy_process.extract(location_name, world.location_names, limit=2) + picks = get_fuzzy_results(location_name, world.location_names) raise Exception(f"Location {location_name} from option {self} " f"is not a valid location name from {world.game}. " f"Did you mean '{picks[0][0]}' ({picks[0][1]}% sure)") diff --git a/Utils.py b/Utils.py index b353e9a72a..fed6f4e3ac 100644 --- a/Utils.py +++ b/Utils.py @@ -28,6 +28,7 @@ class Version(typing.NamedTuple): __version__ = "0.3.2" version_tuple = tuplize_version(__version__) +import jellyfish from yaml import load, load_all, dump, SafeLoader try: @@ -492,3 +493,10 @@ def format_SI_prefix(value, power=1000, power_labels=('', 'k', 'M', 'G', 'T', "P return f"{value} {power_labels[n]}" else: return f"{value:0.3f} {power_labels[n]}" + + +def get_fuzzy_results(input_word: str, wordlist: typing.Sequence[str]) -> typing.List[typing.Tuple[str, int]]: + return sorted( + map(lambda candidate: (candidate, int(100*jellyfish.jaro_winkler_similarity(input_word, candidate))), wordlist), + key=lambda element: element[1], + reverse=True) diff --git a/requirements.txt b/requirements.txt index 9956a64a0e..0067d461d7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,8 +1,8 @@ colorama>=0.4.4 websockets>=10.3 PyYAML>=6.0 -thefuzz[speedup]>=0.19.0 -jinja2>=3.1.1 +jellyfish>=0.9.0 +jinja2>=3.1.2 schema>=0.7.4 kivy>=2.1.0 bsdiff4>=1.2.2 \ No newline at end of file From aa9f43dea1beae7b2f5ff3ad075f3d329c39aeff Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Mon, 9 May 2022 17:03:16 +0200 Subject: [PATCH 054/149] Fuzzy: switch to damerau_levenshtein_distance with ignored case --- MultiServer.py | 2 +- Options.py | 4 ++-- Utils.py | 24 +++++++++++++++++++----- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/MultiServer.py b/MultiServer.py index c58083ae97..a11a2649d2 100644 --- a/MultiServer.py +++ b/MultiServer.py @@ -905,7 +905,7 @@ def json_format_send_event(net_item: NetworkItem, receiving_player: int): def get_intended_text(input_text: str, possible_answers) -> typing.Tuple[str, bool, str]: - picks = Utils.get_fuzzy_results(input_text, possible_answers) + picks = Utils.get_fuzzy_results(input_text, possible_answers, limit=2) if len(picks) > 1: dif = picks[0][1] - picks[1][1] if picks[0][1] == 100: diff --git a/Options.py b/Options.py index 042224d12a..b18d74a670 100644 --- a/Options.py +++ b/Options.py @@ -457,14 +457,14 @@ class VerifyKeys: if self.verify_item_name: for item_name in self.value: if item_name not in world.item_names: - picks = get_fuzzy_results(item_name, world.item_names) + picks = get_fuzzy_results(item_name, world.item_names, limit=1) raise Exception(f"Item {item_name} from option {self} " f"is not a valid item name from {world.game}. " f"Did you mean '{picks[0][0]}' ({picks[0][1]}% sure)") elif self.verify_location_name: for location_name in self.value: if location_name not in world.location_names: - picks = get_fuzzy_results(location_name, world.location_names) + picks = get_fuzzy_results(location_name, world.location_names, limit=1) raise Exception(f"Location {location_name} from option {self} " f"is not a valid location name from {world.game}. " f"Did you mean '{picks[0][0]}' ({picks[0][1]}% sure)") diff --git a/Utils.py b/Utils.py index fed6f4e3ac..5cfe673f04 100644 --- a/Utils.py +++ b/Utils.py @@ -495,8 +495,22 @@ def format_SI_prefix(value, power=1000, power_labels=('', 'k', 'M', 'G', 'T', "P return f"{value:0.3f} {power_labels[n]}" -def get_fuzzy_results(input_word: str, wordlist: typing.Sequence[str]) -> typing.List[typing.Tuple[str, int]]: - return sorted( - map(lambda candidate: (candidate, int(100*jellyfish.jaro_winkler_similarity(input_word, candidate))), wordlist), - key=lambda element: element[1], - reverse=True) +def get_fuzzy_ratio(word1: str, word2: str) -> float: + return (1 - jellyfish.damerau_levenshtein_distance(word1.lower(), word2.lower()) + / max(len(word1), len(word2))) + + +def get_fuzzy_results(input_word: str, wordlist: typing.Sequence[str], limit: typing.Optional[int] = None) \ + -> typing.List[typing.Tuple[str, int]]: + limit: int = limit if limit else len(wordlist) + return list( + map( + lambda container: (container[0], int(container[1]*100)), # convert up to limit to int % + sorted( + map(lambda candidate: + (candidate, get_fuzzy_ratio(input_word, candidate)), + wordlist), + key=lambda element: element[1], + reverse=True)[0:limit] + ) + ) From f6d857b5b56daf783dd96b7f772c5c758c762212 Mon Sep 17 00:00:00 2001 From: espeon65536 <81029175+espeon65536@users.noreply.github.com> Date: Tue, 10 May 2022 22:12:26 -0400 Subject: [PATCH 055/149] Core: make progression balancing deterministic (#295) --- Fill.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Fill.py b/Fill.py index 9f5b62ecac..7bbeb18ba0 100644 --- a/Fill.py +++ b/Fill.py @@ -404,7 +404,9 @@ def balance_multiworld_progression(world: MultiWorld) -> None: items_to_replace: typing.List[Location] = [] for player in balancing_players: locations_to_test = unlocked_locations[player] - items_to_test = candidate_items[player] + items_to_test = list(candidate_items[player]) + items_to_test.sort() + world.random.shuffle(items_to_test) while items_to_test: testing = items_to_test.pop() reducing_state = state.copy() From e8b13621727fc6595e0fa73ab7ed82f40d863f40 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Tue, 10 May 2022 19:40:43 +0200 Subject: [PATCH 056/149] Test: check for working completion condition --- test/general/TestImplemented.py | 14 ++++++++++++++ test/general/__init__.py | 4 ++-- 2 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 test/general/TestImplemented.py diff --git a/test/general/TestImplemented.py b/test/general/TestImplemented.py new file mode 100644 index 0000000000..235eafdb1b --- /dev/null +++ b/test/general/TestImplemented.py @@ -0,0 +1,14 @@ +import unittest +from worlds.AutoWorld import AutoWorldRegister, World + +from . import setup_default_world + + +class TestIDs(unittest.TestCase): + def testCompletionCondition(self): + """Ensure a completion condition is set that has requirements.""" + for gamename, world_type in AutoWorldRegister.world_types.items(): + if not world_type.hidden and gamename not in {"ArchipIDLE", "Final Fantasy"}: + with self.subTest(gamename): + world = setup_default_world(world_type) + self.assertFalse(world.completion_condition[1](world.state)) diff --git a/test/general/__init__.py b/test/general/__init__.py index c59af4d4b9..8b966c0e34 100644 --- a/test/general/__init__.py +++ b/test/general/__init__.py @@ -1,12 +1,12 @@ from argparse import Namespace -from BaseClasses import MultiWorld, CollectionState +from BaseClasses import MultiWorld from worlds.AutoWorld import call_all gen_steps = ["generate_early", "create_regions", "create_items", "set_rules", "generate_basic", "pre_fill"] -def setup_default_world(world_type): +def setup_default_world(world_type) -> MultiWorld: world = MultiWorld(1) world.game[1] = world_type.game world.player_name = {1: "Tester"} From e3900e9f99ecad360bd16f13b24d1b7b3c6db551 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Tue, 10 May 2022 19:43:44 +0200 Subject: [PATCH 057/149] Test: fix wrong name --- test/general/TestImplemented.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/general/TestImplemented.py b/test/general/TestImplemented.py index 235eafdb1b..b2e696ab0d 100644 --- a/test/general/TestImplemented.py +++ b/test/general/TestImplemented.py @@ -1,10 +1,10 @@ import unittest -from worlds.AutoWorld import AutoWorldRegister, World +from worlds.AutoWorld import AutoWorldRegister from . import setup_default_world -class TestIDs(unittest.TestCase): +class TestImplemented(unittest.TestCase): def testCompletionCondition(self): """Ensure a completion condition is set that has requirements.""" for gamename, world_type in AutoWorldRegister.world_types.items(): From a56340663cc117b6a64b6306e155f4800abf2e2b Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Tue, 10 May 2022 19:48:54 +0200 Subject: [PATCH 058/149] Test: check that all_state can complete game --- test/general/TestReachability.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/general/TestReachability.py b/test/general/TestReachability.py index 331f52bf3a..2cadf9d29a 100644 --- a/test/general/TestReachability.py +++ b/test/general/TestReachability.py @@ -22,6 +22,9 @@ class TestBase(unittest.TestCase): with self.subTest("Location should be reached", location=location): self.assertTrue(location.can_reach(state)) + with self.subTest("Completion Condition"): + self.assertTrue(world.can_beat_game(state)) + def testEmptyStateCanReachSomething(self): for game_name, world_type in AutoWorldRegister.world_types.items(): # Final Fantasy logic is controlled by finalfantasyrandomizer.com From 976f34c19fb8e9ba7d014fff8e9e0b655c308268 Mon Sep 17 00:00:00 2001 From: Alchav <59858495+Alchav@users.noreply.github.com> Date: Fri, 29 Apr 2022 12:17:12 -0400 Subject: [PATCH 059/149] Fix Harmless Hellway logic Original logic from SMZ3 is: items.KeyPD >= (GetLocation("Palace of Darkness - Harmless Hellway").ItemIs(KeyPD, World) ? (items.Hammer && items.Bow && items.Lamp) || config.Keysanity ? 4 : 3 : (items.Hammer && items.Bow && items.Lamp) || config.Keysanity ? 6 : 5)) I believe these parentheses are needed to correctly replicate this logic --- worlds/smz3/TotalSMZ3/Regions/Zelda/PalaceOfDarkness.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/worlds/smz3/TotalSMZ3/Regions/Zelda/PalaceOfDarkness.py b/worlds/smz3/TotalSMZ3/Regions/Zelda/PalaceOfDarkness.py index e83126c58a..9184fd28fc 100644 --- a/worlds/smz3/TotalSMZ3/Regions/Zelda/PalaceOfDarkness.py +++ b/worlds/smz3/TotalSMZ3/Regions/Zelda/PalaceOfDarkness.py @@ -29,7 +29,7 @@ class PalaceOfDarkness(Z3Region, IReward): Location(self, 256+127, 0x1EA43, LocationType.Regular, "Palace of Darkness - Compass Chest", lambda items: items.KeyPD >= (4 if (items.Hammer and items.Bow and items.Lamp) or config.Keysanity else 3)), Location(self, 256+128, 0x1EA46, LocationType.Regular, "Palace of Darkness - Harmless Hellway", - lambda items: items.KeyPD >= (4 if (items.Hammer and items.Bow and items.Lamp) or config.Keysanity else 3 if + lambda items: items.KeyPD >= ((4 if (items.Hammer and items.Bow and items.Lamp) or config.Keysanity else 3) if self.GetLocation("Palace of Darkness - Harmless Hellway").ItemIs(ItemType.KeyPD, self.world) else 6 if (items.Hammer and items.Bow and items.Lamp) or config.Keysanity else 5)) .AlwaysAllow(lambda item, items: item.Is(ItemType.KeyPD, self.world) and items.KeyPD >= 5), From 86933d81501157474fa9e1b17e5caa0bd0098b33 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Wed, 11 May 2022 05:41:44 +0200 Subject: [PATCH 060/149] LttP: ensure non-native items are rendered as star in Shops (#486) * LttP: ensure non-native items are rendered as star in Shops * LttP: ensure non-native items are rendered as star in Shops - fix missing player number lookup --- worlds/alttp/Rom.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/worlds/alttp/Rom.py b/worlds/alttp/Rom.py index a2ee848102..f6b3768d62 100644 --- a/worlds/alttp/Rom.py +++ b/worlds/alttp/Rom.py @@ -1723,7 +1723,7 @@ def write_custom_shops(rom, world, player): price_data = get_price_data(item['price'], item["price_type"]) replacement_price_data = get_price_data(item['replacement_price'], item['replacement_price_type']) slot = 0 if shop.type == ShopType.TakeAny else index - if not item['item'] in item_table: # item not native to ALTTP + if item['player'] and world.game[item['player']] != "A Link to the Past": # item not native to ALTTP item_code = get_nonnative_item_sprite(item['item']) else: item_code = ItemFactory(item['item'], player).code From 521122fd4f267f3a6f95321d3e14e61fa3877c27 Mon Sep 17 00:00:00 2001 From: KonoTyran Date: Tue, 10 May 2022 21:00:53 -0700 Subject: [PATCH 061/149] Minecraft Version support (#458) * add support for other java/forge versions * fix fetching correct mod for specified version. * add support for other java/forge versions * fix fetching correct mod for specified version. * convert MinecraftClient.py to read forge versions from Randomizer Mod Repo. * add minecraft_versions.json to gitignore. * remove redundant json import * update host to release. add forge checking, fixed duplicated code due to merge. * clerify that beta channel will most likely make games no longer playable on release channel * convert commetns to docstrings. --- .gitignore | 2 + MinecraftClient.py | 154 ++++++++++++++++++++++++----------- Utils.py | 3 +- host.yaml | 5 +- worlds/minecraft/__init__.py | 3 - 5 files changed, 115 insertions(+), 52 deletions(-) diff --git a/.gitignore b/.gitignore index 3bdaaabac2..b052625508 100644 --- a/.gitignore +++ b/.gitignore @@ -77,6 +77,7 @@ MANIFEST # Installer logs pip-log.txt pip-delete-this-directory.txt +installer.log # Unit test / coverage reports htmlcov/ @@ -154,6 +155,7 @@ cython_debug/ #minecraft server stuff jdk*/ minecraft*/ +minecraft_versions.json #pyenv .python-version diff --git a/MinecraftClient.py b/MinecraftClient.py index 5c0fc535e0..d75f6d0ff5 100644 --- a/MinecraftClient.py +++ b/MinecraftClient.py @@ -1,4 +1,5 @@ import argparse +import json import os import sys import re @@ -17,7 +18,6 @@ atexit.register(input, "Press enter to exit.") # 1 or more digits followed by m or g, then optional b max_heap_re = re.compile(r"^\d+[mMgG][bB]?$") -forge_version = "1.17.1-37.1.1" is_windows = sys.platform in ("win32", "cygwin", "msys") @@ -34,8 +34,8 @@ def prompt_yes_no(prompt): print('Please respond with "y" or "n".') -# Create mods folder if needed; find AP randomizer jar; return None if not found. def find_ap_randomizer_jar(forge_dir): + """Create mods folder if needed; find AP randomizer jar; return None if not found.""" mods_dir = os.path.join(forge_dir, 'mods') if os.path.isdir(mods_dir): for entry in os.scandir(mods_dir): @@ -49,8 +49,8 @@ def find_ap_randomizer_jar(forge_dir): return None -# Create APData folder if needed; clean .apmc files from APData; copy given .apmc into directory. def replace_apmc_files(forge_dir, apmc_file): + """Create APData folder if needed; clean .apmc files from APData; copy given .apmc into directory.""" if apmc_file is None: return apdata_dir = os.path.join(forge_dir, 'APData') @@ -72,27 +72,21 @@ def replace_apmc_files(forge_dir, apmc_file): def read_apmc_file(apmc_file): from base64 import b64decode - import json with open(apmc_file, 'r') as f: - data = json.loads(b64decode(f.read())) - return data + return json.loads(b64decode(f.read())) -# Check mod version, download new mod from GitHub releases page if needed. -def update_mod(forge_dir, apmc_file, get_prereleases=False): +def update_mod(forge_dir, minecraft_version: str, get_prereleases=False): + """Check mod version, download new mod from GitHub releases page if needed. """ ap_randomizer = find_ap_randomizer_jar(forge_dir) - if apmc_file is not None: - data = read_apmc_file(apmc_file) - minecraft_version = data.get('minecraft_version', '') - client_releases_endpoint = "https://api.github.com/repos/KonoTyran/Minecraft_AP_Randomizer/releases" resp = requests.get(client_releases_endpoint) if resp.status_code == 200: # OK try: - latest_release = next(filter(lambda release: (not release['prerelease'] or get_prereleases) and - (apmc_file is None or minecraft_version in release['assets'][0]['name']), + latest_release = next(filter(lambda release: (not release['prerelease'] or get_prereleases) and + (minecraft_version in release['assets'][0]['name']), resp.json())) if ap_randomizer != latest_release['assets'][0]['name']: logging.info(f"A new release of the Minecraft AP randomizer mod was found: " @@ -128,8 +122,8 @@ def update_mod(forge_dir, apmc_file, get_prereleases=False): sys.exit(0) -# Check if the EULA is agreed to, and prompt the user to read and agree if necessary. def check_eula(forge_dir): + """Check if the EULA is agreed to, and prompt the user to read and agree if necessary.""" eula_path = os.path.join(forge_dir, "eula.txt") if not os.path.isfile(eula_path): # Create eula.txt @@ -152,17 +146,18 @@ def check_eula(forge_dir): sys.exit(0) -# get the current JDK16 -def find_jdk_dir() -> str: +def find_jdk_dir(version: str) -> str: + """get the specified versions jdk directory""" for entry in os.listdir(): - if os.path.isdir(entry) and entry.startswith("jdk16"): + if os.path.isdir(entry) and entry.startswith(f"jdk{version}"): return os.path.abspath(entry) -# get the java exe location -def find_jdk() -> str: +def find_jdk(version: str) -> str: + """get the java exe location""" + if is_windows: - jdk = find_jdk_dir() + jdk = find_jdk_dir(version) jdk_exe = os.path.join(jdk, "bin", "java.exe") if os.path.isfile(jdk_exe): return jdk_exe @@ -173,16 +168,17 @@ def find_jdk() -> str: return jdk_exe -# Download Corretto 16 (Amazon JDK) -def download_java(): - jdk = find_jdk_dir() +def download_java(java: str): + """Download Corretto (Amazon JDK)""" + + jdk = find_jdk_dir(java) if jdk is not None: print(f"Removing old JDK...") from shutil import rmtree rmtree(jdk) print(f"Downloading Java...") - jdk_url = "https://corretto.aws/downloads/latest/amazon-corretto-16-x64-windows-jdk.zip" + jdk_url = f"https://corretto.aws/downloads/latest/amazon-corretto-{java}-x64-windows-jdk.zip" resp = requests.get(jdk_url) if resp.status_code == 200: # OK print(f"Extracting...") @@ -197,9 +193,10 @@ def download_java(): sys.exit(0) -# download and install forge -def install_forge(directory: str): - jdk = find_jdk() +def install_forge(directory: str, forge_version: str, java_version: str): + """download and install forge""" + + jdk = find_jdk(java_version) if jdk is not None: print(f"Downloading Forge {forge_version}...") forge_url = f"https://maven.minecraftforge.net/net/minecraftforge/forge/{forge_version}/forge-{forge_version}-installer.jar" @@ -211,20 +208,20 @@ def install_forge(directory: str): with open(forge_install_jar, 'wb') as f: f.write(resp.content) print(f"Installing Forge...") - argstring = ' '.join([jdk, "-jar", "\"" + forge_install_jar+ "\"", "--installServer", "\"" + directory + "\""]) + argstring = ' '.join([jdk, "-jar", "\"" + forge_install_jar + "\"", "--installServer", "\"" + directory + "\""]) install_process = Popen(argstring, shell=not is_windows) install_process.wait() os.remove(forge_install_jar) -# Run the Forge server. Return process object -def run_forge_server(forge_dir: str, heap_arg): +def run_forge_server(forge_dir: str, java_version: str, heap_arg: str) -> Popen: + """Run the Forge server.""" - java_exe = find_jdk() + java_exe = find_jdk(java_version) if not os.path.isfile(java_exe): java_exe = "java" # try to fall back on java in the PATH - heap_arg = max_heap_re.match(max_heap).group() + heap_arg = max_heap_re.match(heap_arg).group() if heap_arg[-1] in ['b', 'B']: heap_arg = heap_arg[:-1] heap_arg = "-Xmx" + heap_arg @@ -242,46 +239,109 @@ def run_forge_server(forge_dir: str, heap_arg): return Popen(argstring, shell=not is_windows) +def get_minecraft_versions(version, release_channel="release"): + version_file_endpoint = "https://raw.githubusercontent.com/KonoTyran/Minecraft_AP_Randomizer/master/versions/minecraft_versions.json" + resp = requests.get(version_file_endpoint) + local = False + if resp.status_code == 200: # OK + try: + data = resp.json() + except requests.exceptions.JSONDecodeError: + logging.warning(f"Unable to fetch version update file, using local version. (status code {resp.status_code}).") + local = True + else: + logging.warning(f"Unable to fetch version update file, using local version. (status code {resp.status_code}).") + local = True + + if local: + with open(Utils.local_path("minecraft_versions.json"), 'r') as f: + data = json.load(f) + else: + with open(Utils.local_path("minecraft_versions.json"), 'w') as f: + json.dump(data, f) + + try: + if version: + return next(filter(lambda entry: entry["version"] == version, data[release_channel])) + else: + return resp.json()[release_channel][0] + except StopIteration: + logging.error(f"No compatible mod version found for client version {version}.") + + +def is_correct_forge(forge_dir) -> bool: + if os.path.isdir(os.path.join(forge_dir, "libraries", "net", "minecraftforge", "forge", forge_version)): + return True + return False + + if __name__ == '__main__': Utils.init_logging("MinecraftClient") parser = argparse.ArgumentParser() parser.add_argument("apmc_file", default=None, nargs='?', help="Path to an Archipelago Minecraft data file (.apmc)") - parser.add_argument('--install', '-i', dest='install', default=False, action='store_true', - help="Download and install Java and the Forge server. Does not launch the client afterwards.") - parser.add_argument('--prerelease', default=False, action='store_true', - help="Auto-update prerelease versions.") + parser.add_argument('--install', '-i', dest='install', default=False, action='store_true', + help="Download and install Java and the Forge server. Does not launch the client afterwards.") + parser.add_argument('--release_channel', '-r', dest="channel", type=str, action='store', + help="Specify release channel to use.") + parser.add_argument('--java', '-j', metavar='17', dest='java', type=str, default=False, action='store', + help="specify java version.") + parser.add_argument('--forge', '-f', metavar='1.18.2-40.1.0', dest='forge', type=str, default=False, action='store', + help="specify forge version. (Minecraft Version-Forge Version)") args = parser.parse_args() apmc_file = os.path.abspath(args.apmc_file) if args.apmc_file else None # Change to executable's working directory os.chdir(os.path.abspath(os.path.dirname(sys.argv[0]))) - + options = Utils.get_options() + channel = args.channel or options["minecraft_options"]["release_channel"] + apmc_data = None + data_version = None + + if apmc_file is not None: + apmc_data = read_apmc_file(apmc_file) + data_version = apmc_data.get('client_version', '') + + versions = get_minecraft_versions(data_version, channel) + forge_dir = options["minecraft_options"]["forge_directory"] max_heap = options["minecraft_options"]["max_heap_size"] + forge_version = args.forge or versions["forge"] + java_version = args.java or versions["java"] + java_dir = find_jdk_dir(java_version) if args.install: if is_windows: print("Installing Java and Minecraft Forge") - download_java() + download_java(java_version) else: print("Installing Minecraft Forge") - install_forge(forge_dir) + install_forge(forge_dir, forge_version, java_version) sys.exit(0) - if apmc_file is not None and not os.path.isfile(apmc_file): - raise FileNotFoundError(f"Path {apmc_file} does not exist or could not be accessed.") - if not os.path.isdir(forge_dir): - if prompt_yes_no("Did not find forge directory. Download and install forge now?"): - install_forge(forge_dir) + if apmc_data is None: + raise FileNotFoundError(f"APMC file does not exist or is inaccessible at the given location ({apmc_file})") + + if is_windows: + if java_dir is None or not os.path.isdir(java_dir): + if prompt_yes_no("Did not find java directory. Download and install java now?"): + download_java(java_version) + java_dir = find_jdk_dir(java_version) + if java_dir is None or not os.path.isdir(java_dir): + raise NotADirectoryError(f"Path {java_dir} does not exist or could not be accessed.") + + if not is_correct_forge(forge_dir): + if prompt_yes_no(f"Did not find forge version {forge_version} download and install it now?"): + install_forge(forge_dir, forge_version, java_version) if not os.path.isdir(forge_dir): raise NotADirectoryError(f"Path {forge_dir} does not exist or could not be accessed.") + if not max_heap_re.match(max_heap): raise Exception(f"Max heap size {max_heap} in incorrect format. Use a number followed by M or G, e.g. 512M or 2G.") - update_mod(forge_dir, apmc_file, args.prerelease) + update_mod(forge_dir, f"MC{forge_version.split('-')[0]}", channel != "release") replace_apmc_files(forge_dir, apmc_file) check_eula(forge_dir) - server_process = run_forge_server(forge_dir, max_heap) + server_process = run_forge_server(forge_dir, java_version, max_heap) server_process.wait() diff --git a/Utils.py b/Utils.py index 5cfe673f04..fb2289d3b4 100644 --- a/Utils.py +++ b/Utils.py @@ -263,7 +263,8 @@ def get_default_options() -> dict: }, "minecraft_options": { "forge_directory": "Minecraft Forge server", - "max_heap_size": "2G" + "max_heap_size": "2G", + "release_channel": "release" }, "oot_options": { "rom_file": "The Legend of Zelda - Ocarina of Time.z64", diff --git a/host.yaml b/host.yaml index a96d7f1b9a..cfa49d4dd3 100644 --- a/host.yaml +++ b/host.yaml @@ -105,7 +105,10 @@ factorio_options: minecraft_options: forge_directory: "Minecraft Forge server" max_heap_size: "2G" -oot_options: + # release channel, currently "release", or "beta" + # any games played on the "beta" channel have a high likelihood of no longer working on the "release" channel. + release_channel: "release" +oot_options: # File name of the OoT v1.0 ROM rom_file: "The Legend of Zelda - Ocarina of Time.z64" # Set this to false to never autostart a rom (such as after patching) diff --git a/worlds/minecraft/__init__.py b/worlds/minecraft/__init__.py index af57296a84..27f8955404 100644 --- a/worlds/minecraft/__init__.py +++ b/worlds/minecraft/__init__.py @@ -14,8 +14,6 @@ from .Options import minecraft_options from ..AutoWorld import World, WebWorld client_version = 7 -minecraft_version = "1.17.1" - class MinecraftWebWorld(WebWorld): theme = "jungle" @@ -47,7 +45,6 @@ class MinecraftWorld(World): 'player_name': self.world.get_player_name(self.player), 'player_id': self.player, 'client_version': client_version, - 'minecraft_version': minecraft_version, 'structures': {exit: self.world.get_entrance(exit, self.player).connected_region.name for exit in exits}, 'advancement_goal': self.world.advancement_goal[self.player].value, 'egg_shards_required': min(self.world.egg_shards_required[self.player].value, From a5ca118bbff04bd61b96722dffd31dc6273b0f6e Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Wed, 11 May 2022 08:51:18 +0200 Subject: [PATCH 062/149] Test: rename (#499) --- test/webhost/TestTutorial.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/webhost/TestTutorial.py b/test/webhost/TestTutorial.py index 78d619d3c4..f6bfc830e0 100644 --- a/test/webhost/TestTutorial.py +++ b/test/webhost/TestTutorial.py @@ -2,8 +2,8 @@ import unittest from worlds.AutoWorld import AutoWorldRegister -class TestBase(unittest.TestCase): - def testCreateItem(self): +class TestTutorial(unittest.TestCase): + def testHasTutorial(self): import WebHost tutorials_data = WebHost.create_ordered_tutorials_file() games_with_tutorial = set(entry["gameTitle"] for entry in tutorials_data) From c085ee47edcd0ea88c6ed5249fdbe375e7519645 Mon Sep 17 00:00:00 2001 From: Doug Hoskisson Date: Wed, 11 May 2022 00:13:21 -0700 Subject: [PATCH 063/149] variable-progression-balancing (#356) --- Fill.py | 50 +++++++++++------ Options.py | 8 ++- .../Archipelago/advanced_settings_en.md | 17 +++--- .../assets/tutorial/Minecraft/minecraft_es.md | 2 +- .../assets/tutorial/Minecraft/minecraft_sv.md | 2 +- .../tutorial/Ocarina of Time/setup_en.md | 8 +-- .../tutorial/Ocarina of Time/setup_es.md | 8 +-- playerSettings.yaml | 8 +-- test/general/TestFill.py | 53 ++++++++++++++++--- worlds/alttp/ItemPool.py | 2 +- worlds/alttp/Rules.py | 2 +- 11 files changed, 116 insertions(+), 44 deletions(-) diff --git a/Fill.py b/Fill.py index 7bbeb18ba0..dbe6b3428f 100644 --- a/Fill.py +++ b/Fill.py @@ -305,16 +305,21 @@ def flood_items(world: MultiWorld) -> None: def balance_multiworld_progression(world: MultiWorld) -> None: # A system to reduce situations where players have no checks remaining, popularly known as "BK mode." - # Overall progression balancing algorithm: + # Overall progression balancing algorithm: # Gather up all locations in a sphere. # Define a threshold value based on the player with the most available locations. # If other players are below the threshold value, swap progression in this sphere into earlier spheres, # which gives more locations available by this sphere. - balanceable_players: typing.Set[int] = {player for player in world.player_ids if world.progression_balancing[player]} + balanceable_players: typing.Dict[int, float] = { + player: world.progression_balancing[player] / 100 + for player in world.player_ids + if world.progression_balancing[player] > 0 + } if not balanceable_players: logging.info('Skipping multiworld progression balancing.') else: logging.info(f'Balancing multiworld progression for {len(balanceable_players)} Players.') + logging.debug(balanceable_players) state: CollectionState = CollectionState(world) checked_locations: typing.Set[Location] = set() unchecked_locations: typing.Set[Location] = set(world.get_locations()) @@ -324,10 +329,16 @@ def balance_multiworld_progression(world: MultiWorld) -> None: for player in world.player_ids if len(world.get_filled_locations(player)) != 0 } - total_locations_count: Counter = Counter(location.player for location in world.get_locations() if - not location.locked) - balanceable_players = {player for player in balanceable_players if - total_locations_count[player]} + total_locations_count: typing.Counter[int] = Counter( + location.player + for location in world.get_locations() + if not location.locked + ) + balanceable_players = { + player: balanceable_players[player] + for player in balanceable_players + if total_locations_count[player] + } sphere_num: int = 1 moved_item_count: int = 0 @@ -359,13 +370,19 @@ def balance_multiworld_progression(world: MultiWorld) -> None: sphere_num += 1 if checked_locations: - # The 10% threshold can be modified for "progression balancing strength" - # right now it approximates the old 20/216 bound. - threshold_percentage = max(map(lambda p: item_percentage(p, reachable_locations_count[p]), - reachable_locations_count)) - 0.10 - logging.debug(f"Threshold: {threshold_percentage}") - balancing_players = {player for player, reachables in reachable_locations_count.items() if - item_percentage(player, reachables) < threshold_percentage and player in balanceable_players} + max_percentage = max(map(lambda p: item_percentage(p, reachable_locations_count[p]), + reachable_locations_count)) + threshold_percentages = { + player: max_percentage * balanceable_players[player] + for player in balanceable_players + } + logging.debug(f"Thresholds: {threshold_percentages}") + balancing_players = { + player + for player, reachables in reachable_locations_count.items() + if (player in threshold_percentages + and item_percentage(player, reachables) < threshold_percentages[player]) + } if balancing_players: balancing_state = state.copy() balancing_unchecked_locations = unchecked_locations.copy() @@ -391,8 +408,9 @@ def balance_multiworld_progression(world: MultiWorld) -> None: if not location.locked: balancing_reachables[location.player] += 1 if world.has_beaten_game(balancing_state) or all( - item_percentage(player, reachables) >= threshold_percentage - for player, reachables in balancing_reachables.items()): + item_percentage(player, reachables) >= threshold_percentages[player] + for player, reachables in balancing_reachables.items() + if player in threshold_percentages): break elif not balancing_sphere: raise RuntimeError('Not all required items reachable. Something went terribly wrong here.') @@ -424,7 +442,7 @@ def balance_multiworld_progression(world: MultiWorld) -> None: else: reduced_sphere = get_sphere_locations(reducing_state, locations_to_test) p = item_percentage(player, reachable_locations_count[player] + len(reduced_sphere)) - if p < threshold_percentage: + if p < threshold_percentages[player]: items_to_replace.append(testing) replaced_items = False diff --git a/Options.py b/Options.py index b18d74a670..5a96c62055 100644 --- a/Options.py +++ b/Options.py @@ -572,8 +572,12 @@ class Accessibility(Choice): default = 1 -class ProgressionBalancing(DefaultOnToggle): - """A system that moves progression earlier, to try and prevent the player from getting stuck and bored early.""" +class ProgressionBalancing(Range): + """A system that can move progression earlier, to try and prevent the player from getting stuck and bored early. + [0-99, default 50] A lower setting means more getting stuck. A higher setting means less getting stuck.""" + default = 50 + range_start = 0 + range_end = 99 display_name = "Progression Balancing" diff --git a/WebHostLib/static/assets/tutorial/Archipelago/advanced_settings_en.md b/WebHostLib/static/assets/tutorial/Archipelago/advanced_settings_en.md index 072a7873d8..734962feac 100644 --- a/WebHostLib/static/assets/tutorial/Archipelago/advanced_settings_en.md +++ b/WebHostLib/static/assets/tutorial/Archipelago/advanced_settings_en.md @@ -85,12 +85,15 @@ games you want settings for. * `progression_balancing` is a system the Archipelago generator uses to try and reduce "BK mode" as much as possible. This primarily involves moving necessary progression items into earlier logic spheres to make the games more - accessible so that players almost always have something to do. This can be turned `on` or `off` and is `on` by - default. + accessible so that players almost always have something to do. This can be in a range from 0 to 99, and is 50 by + default. This number represents a percentage of the furthest progressible player. + * For example: With the default of 50%, if the furthest player can access 40% of their items, the randomizer tries + to let you access at least 20% of your items. 50% of 40% is 20%. + * Note that it is not always guaranteed that it will be able to bring you up to this threshold. - * `triggers` is one of the more advanced options that allows you to create conditional adjustments. You can read - more triggers in the triggers guide. Triggers - guide: [Archipelago Triggers Guide](/tutorial/Archipelago/triggers/en) +* `triggers` is one of the more advanced options that allows you to create conditional adjustments. You can read + more triggers in the triggers guide. Triggers + guide: [Archipelago Triggers Guide](/tutorial/Archipelago/triggers/en) ### Game Options @@ -198,8 +201,8 @@ triggers: * `requires` is set to require release version 0.2.0 or higher. * `accesibility` is set to `none` which will set this seed to beatable only meaning some locations and items may be completely inaccessible but the seed will still be completable. -* `progression_balancing` is set on meaning we will likely receive important items earlier increasing the chance of - having things to do. +* `progression_balancing` is set on, giving it the default value, meaning we will likely receive important items + earlier increasing the chance of having things to do. * `A Link to the Past` defines a location for us to nest all the game options we would like to use for our game `A Link to the Past`. * `smallkey_shuffle` is an option for A Link to the Past which determines how dungeon small keys are shuffled. In this diff --git a/WebHostLib/static/assets/tutorial/Minecraft/minecraft_es.md b/WebHostLib/static/assets/tutorial/Minecraft/minecraft_es.md index e827ac7947..3f2df6e7ba 100644 --- a/WebHostLib/static/assets/tutorial/Minecraft/minecraft_es.md +++ b/WebHostLib/static/assets/tutorial/Minecraft/minecraft_es.md @@ -30,7 +30,7 @@ game: Minecraft # Opciones compartidas por todos los juegos: accessibility: locations -progression_balancing: on +progression_balancing: 50 # Opciones Especficicas para Minecraft Minecraft: diff --git a/WebHostLib/static/assets/tutorial/Minecraft/minecraft_sv.md b/WebHostLib/static/assets/tutorial/Minecraft/minecraft_sv.md index eb799024c2..e86d293939 100644 --- a/WebHostLib/static/assets/tutorial/Minecraft/minecraft_sv.md +++ b/WebHostLib/static/assets/tutorial/Minecraft/minecraft_sv.md @@ -80,7 +80,7 @@ description: Template Name name: YourName game: Minecraft accessibility: locations -progression_balancing: off +progression_balancing: 0 advancement_goal: few: 0 normal: 1 diff --git a/WebHostLib/static/assets/tutorial/Ocarina of Time/setup_en.md b/WebHostLib/static/assets/tutorial/Ocarina of Time/setup_en.md index 0c0f25b944..d12dbe437f 100644 --- a/WebHostLib/static/assets/tutorial/Ocarina of Time/setup_en.md +++ b/WebHostLib/static/assets/tutorial/Ocarina of Time/setup_en.md @@ -62,9 +62,11 @@ accessibility: items: 0 # Guarantees you will be able to acquire all items, but you may not be able to access all locations locations: 50 # Guarantees you will be able to access all locations, and therefore all items none: 0 # Guarantees only that the game is beatable. You may not be able to access all locations or acquire all items -progression_balancing: - on: 50 # A system to reduce BK, as in times during which you can't do anything by moving your items into an earlier access sphere to make it likely you have stuff to do - off: 0 # Turn this off if you don't mind a longer multiworld, or can glitch/sequence break around missing items. +progression_balancing: # A system to reduce BK, as in times during which you can't do anything, by moving your items into an earlier access sphere + 0: 0 # Choose a lower number if you don't mind a longer multiworld, or can glitch/sequence break around missing items. + 25: 0 + 50: 50 # Make it likely you have stuff to do. + 99: 0 # Get important items early, and stay at the front of the progression. Ocarina of Time: logic_rules: # Set the logic used for the generator. glitchless: 50 diff --git a/WebHostLib/static/assets/tutorial/Ocarina of Time/setup_es.md b/WebHostLib/static/assets/tutorial/Ocarina of Time/setup_es.md index 193866fba7..4e40d03dae 100644 --- a/WebHostLib/static/assets/tutorial/Ocarina of Time/setup_es.md +++ b/WebHostLib/static/assets/tutorial/Ocarina of Time/setup_es.md @@ -52,9 +52,11 @@ accessibility: items: 0 # Garantiza que puedes obtener todos los objetos pero no todas las localizaciones locations: 50 # Garantiza que puedes obtener todas las localizaciones none: 0 # Solo garantiza que el juego pueda completarse. -progression_balancing: - on: 50 # Un sistema para reducir tiempos de espera en una partida multiworld - off: 0 +progression_balancing: # Un sistema para reducir tiempos de espera en una partida multiworld + 0: 0 # Con un número más bajo, es más probable esperar objetos de otros jugadores. + 25: 0 + 50: 50 + 99: 0 # Objetos importantes al principio del juego, para no esperar Ocarina of Time: logic_rules: # Logica usada por el randomizer. glitchless: 50 diff --git a/playerSettings.yaml b/playerSettings.yaml index 716b9fa5f1..ce26888c8a 100644 --- a/playerSettings.yaml +++ b/playerSettings.yaml @@ -32,9 +32,11 @@ accessibility: items: 0 # Guarantees you will be able to acquire all items, but you may not be able to access all locations locations: 50 # Guarantees you will be able to access all locations, and therefore all items none: 0 # Guarantees only that the game is beatable. You may not be able to access all locations or acquire all items -progression_balancing: - on: 50 # A system to reduce BK, as in times during which you can't do anything by moving your items into an earlier access sphere to make it likely you have stuff to do - off: 0 # Turn this off if you don't mind a longer multiworld, or can glitch/sequence break around missing items. +progression_balancing: # A system to reduce BK, as in times during which you can't do anything, by moving your items into an earlier access sphere + 0: 0 # Choose a lower number if you don't mind a longer multiworld, or can glitch/sequence break around missing items. + 25: 0 + 50: 50 # Make it likely you have stuff to do. + 99: 0 # Get important items early, and stay at the front of the progression. A Link to the Past: ### Logic Section ### glitches_required: # Determine the logic required to complete the seed diff --git a/test/general/TestFill.py b/test/general/TestFill.py index 80b549a1b5..c7a3276dbb 100644 --- a/test/general/TestFill.py +++ b/test/general/TestFill.py @@ -584,7 +584,7 @@ class TestDistributeItemsRestrictive(unittest.TestCase): class TestBalanceMultiworldProgression(unittest.TestCase): - def assertRegionContains(self, region: Region, item: Item): + def assertRegionContains(self, region: Region, item: Item) -> bool: for location in region.locations: if location.item and location.item == item: return True @@ -592,7 +592,7 @@ class TestBalanceMultiworldProgression(unittest.TestCase): self.fail("Expected " + region.name + " to contain " + item.name + "\n Contains" + str(list(map(lambda location: location.item, region.locations)))) - def setUp(self): + def setUp(self) -> None: multi_world = generate_multi_world(2) self.multi_world = multi_world player1 = generate_player_data( @@ -628,10 +628,10 @@ class TestBalanceMultiworldProgression(unittest.TestCase): items = fillRegion(multi_world, region, [ player2.prog_items[1]] + items) - multi_world.progression_balancing[player1.id] = True - multi_world.progression_balancing[player2.id] = True + def test_balances_progression(self) -> None: + self.multi_world.progression_balancing[self.player1.id].value = 50 + self.multi_world.progression_balancing[self.player2.id].value = 50 - def test_balances_progression(self): self.assertRegionContains( self.player1.regions[2], self.player2.prog_items[0]) @@ -640,7 +640,48 @@ class TestBalanceMultiworldProgression(unittest.TestCase): self.assertRegionContains( self.player1.regions[1], self.player2.prog_items[0]) - def test_ignores_priority_locations(self): + def test_balances_progression_light(self) -> None: + self.multi_world.progression_balancing[self.player1.id].value = 1 + self.multi_world.progression_balancing[self.player2.id].value = 1 + + self.assertRegionContains( + self.player1.regions[2], self.player2.prog_items[0]) + + balance_multiworld_progression(self.multi_world) + + # TODO: arrange for a result that's different from the default + self.assertRegionContains( + self.player1.regions[1], self.player2.prog_items[0]) + + def test_balances_progression_heavy(self) -> None: + self.multi_world.progression_balancing[self.player1.id].value = 99 + self.multi_world.progression_balancing[self.player2.id].value = 99 + + self.assertRegionContains( + self.player1.regions[2], self.player2.prog_items[0]) + + balance_multiworld_progression(self.multi_world) + + # TODO: arrange for a result that's different from the default + self.assertRegionContains( + self.player1.regions[1], self.player2.prog_items[0]) + + def test_skips_balancing_progression(self) -> None: + self.multi_world.progression_balancing[self.player1.id].value = 0 + self.multi_world.progression_balancing[self.player2.id].value = 0 + + self.assertRegionContains( + self.player1.regions[2], self.player2.prog_items[0]) + + balance_multiworld_progression(self.multi_world) + + self.assertRegionContains( + self.player1.regions[2], self.player2.prog_items[0]) + + def test_ignores_priority_locations(self) -> None: + self.multi_world.progression_balancing[self.player1.id].value = 50 + self.multi_world.progression_balancing[self.player2.id].value = 50 + self.player2.prog_items[0].location.progress_type = LocationProgressType.PRIORITY balance_multiworld_progression(self.multi_world) diff --git a/worlds/alttp/ItemPool.py b/worlds/alttp/ItemPool.py index e00c666740..ccb739e976 100644 --- a/worlds/alttp/ItemPool.py +++ b/worlds/alttp/ItemPool.py @@ -244,7 +244,7 @@ def generate_itempool(world): world.push_item(world.get_location('Ganon', player), ItemFactory('Triforce', player), False) if world.goal[player] == 'icerodhunt': - world.progression_balancing[player].value = False + world.progression_balancing[player].value = 0 loc = world.get_location('Turtle Rock - Boss', player) world.push_item(loc, ItemFactory('Triforce Piece', player), False) world.treasure_hunt_count[player] = 1 diff --git a/worlds/alttp/Rules.py b/worlds/alttp/Rules.py index 589766d40e..7e16d6e566 100644 --- a/worlds/alttp/Rules.py +++ b/worlds/alttp/Rules.py @@ -30,7 +30,7 @@ def set_rules(world): # Set access rules according to max glitches for multiworld progression. # Set accessibility to none, and shuffle assuming the no logic players can always win world.accessibility[player] = world.accessibility[player].from_text("minimal") - world.progression_balancing[player].value = False + world.progression_balancing[player].value = 0 else: world.completion_condition[player] = lambda state: state.has('Triforce', player) From 9e15e754c2614802153f9eb1735dddb9bccef503 Mon Sep 17 00:00:00 2001 From: black-sliver <59490463+black-sliver@users.noreply.github.com> Date: Wed, 11 May 2022 10:11:16 +0200 Subject: [PATCH 064/149] Doc: use RegionType.Generic in api.md --- docs/api.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/api.md b/docs/api.md index c984dcd361..02c6414481 100644 --- a/docs/api.md +++ b/docs/api.md @@ -341,7 +341,7 @@ from .Options import mygame_options # the options we defined earlier from .Items import mygame_items # data used below to add items to the World from .Locations import mygame_locations # same as above from ..AutoWorld import World -from BaseClasses import Region, Location, Entrance, Item +from BaseClasses import Region, Location, Entrance, Item, RegionType from Utils import get_options, output_path class MyGameItem(Item): # or from Items import MyGameItem @@ -489,20 +489,20 @@ def create_items(self) -> None: def create_regions(self) -> None: # Add regions to the multiworld. "Menu" is the required starting point. # Arguments to Region() are name, type, human_readable_name, player, world - r = Region("Menu", None, "Menu", self.player, self.world) + r = Region("Menu", RegionType.Generic, "Menu", self.player, self.world) # Set Region.exits to a list of entrances that are reachable from region r.exits = [Entrance(self.player, "New game", r)] # or use r.exits.append # Append region to MultiWorld's regions self.world.regions.append(r) # or use += [r...] - r = Region("Main Area", None, "Main Area", self.player, self.world) + r = Region("Main Area", RegionType.Generic, "Main Area", self.player, self.world) # Add main area's locations to main area (all but final boss) r.locations = [MyGameLocation(self.player, location.name, self.location_name_to_id[location.name], r)] r.exits = [Entrance(self.player, "Boss Door", r)] self.world.regions.append(r) - r = Region("Boss Room", None, "Boss Room", self.player, self.world) + r = Region("Boss Room", RegionType.Generic, "Boss Room", self.player, self.world) # add event to Boss Room r.locations = [MyGameLocation(self.player, "Final Boss", None, r)] self.world.regions.append(r) From 977159e5721b979faef14282de0bf9c592fb235c Mon Sep 17 00:00:00 2001 From: alwaysintreble Date: Wed, 11 May 2022 13:05:53 -0500 Subject: [PATCH 065/149] Webworld docs: move gameinfo documentation to their world folders and copy them for webhost use. (#455) --- BaseClasses.py | 17 +- WebHost.py | 57 +- WebHostLib/__init__.py | 4 + WebHostLib/static/assets/gameInfo.js | 2 +- WebHostLib/static/assets/tutorial.js | 2 +- .../static/assets/tutorial/tutorials.json | 597 ------------------ worlds/AutoWorld.py | 11 +- worlds/alttp/__init__.py | 81 ++- .../alttp/docs}/en_A Link to the Past.md | 0 .../alttp/docs}/msu1_en.md | 0 .../alttp/docs}/msu1_es.md | 0 .../alttp/docs}/msu1_fr.md | 0 .../alttp/docs}/multiworld_de.md | 0 .../alttp/docs}/multiworld_en.md | 2 +- .../alttp/docs}/multiworld_es.md | 0 .../alttp/docs}/multiworld_fr.md | 0 .../alttp/docs}/plando_en.md | 0 .../docs}/retroarch-network-commands-en.png | Bin worlds/archipidle/__init__.py | 10 +- .../archipidle/docs}/en_ArchipIDLE.md | 0 .../archipidle/docs}/guide_en.md | 0 worlds/checksfinder/__init__.py | 18 +- .../checksfinder/docs}/checksfinder_en.md | 0 .../checksfinder/docs}/en_ChecksFinder.md | 0 worlds/factorio/__init__.py | 17 +- .../factorio/docs}/connect-to-ap-server.png | Bin .../factorio/docs}/en_Factorio.md | 0 .../factorio/docs}/factorio-download.png | Bin .../factorio/docs}/setup_en.md | 4 +- worlds/ff1/__init__.py | 10 +- .../ff1/docs}/en_Final Fantasy.md | 0 .../ff1/docs}/multiworld_en.md | 0 worlds/generic/__init__.py | 26 +- .../generic/docs}/advanced_settings_en.md | 0 .../generic/docs}/commands_en.md | 0 .../generic/docs}/plando_en.md | 0 .../generic/docs}/setup_en.md | 0 .../generic/docs}/triggers_en.md | 0 .../generic/docs}/using_website_en.md | 0 worlds/hk/__init__.py | 17 +- .../hk/docs}/en_Hollow Knight.md | 0 .../hk/docs}/setup_en.md | 0 worlds/meritous/__init__.py | 17 +- .../meritous/docs}/en_Meritous.md | 0 .../meritous/docs}/setup_en.md | 0 worlds/minecraft/__init__.py | 32 +- .../minecraft/docs}/en_Minecraft.md | 0 .../minecraft/docs}/minecraft_en.md | 0 .../minecraft/docs}/minecraft_es.md | 0 .../minecraft/docs}/minecraft_sv.md | 0 worlds/oot/__init__.py | 27 +- .../oot/docs}/en_Ocarina of Time.md | 0 .../oot/docs}/setup_en.md | 0 .../oot/docs}/setup_es.md | 0 worlds/raft/__init__.py | 17 +- .../gameInfo => worlds/raft/docs}/en_Raft.md | 0 .../Raft => worlds/raft/docs}/setup_en.md | 0 worlds/rogue-legacy/__init__.py | 16 +- .../rogue-legacy/docs}/en_Rogue Legacy.md | 0 .../rogue-legacy/docs}/rogue-legacy_en.md | 0 worlds/ror2/__init__.py | 16 +- .../ror2/docs}/en_Risk of Rain 2.md | 0 .../ror2/docs}/setup_en.md | 0 worlds/sm/__init__.py | 16 +- .../sm/docs}/en_Super Metroid.md | 0 .../sm/docs}/multiworld_en.md | 0 worlds/sm64ex/__init__.py | 18 +- .../sm64ex/docs}/en_Super Mario 64.md | 0 .../sm64ex/docs}/setup_en.md | 0 worlds/smz3/__init__.py | 16 +- .../gameInfo => worlds/smz3/docs}/en_SMZ3.md | 0 .../smz3/docs}/multiworld_en.md | 0 worlds/soe/__init__.py | 10 +- .../soe/docs}/en_Secret of Evermore.md | 0 .../soe/docs}/multiworld_en.md | 0 worlds/spire/__init__.py | 16 +- .../spire/docs}/en_Slay the Spire.md | 0 .../spire/docs}/slay-the-spire_en.md | 0 worlds/subnautica/__init__.py | 16 +- .../subnautica/docs}/en_Subnautica.md | 0 .../subnautica/docs}/setup_en.md | 0 worlds/timespinner/__init__.py | 21 +- .../timespinner/docs}/en_Timespinner.md | 0 .../timespinner/docs}/setup_de.md | 100 +-- .../timespinner/docs}/setup_en.md | 0 worlds/v6/__init__.py | 17 +- .../gameInfo => worlds/v6/docs}/en_VVVVVV.md | 0 .../VVVVVV => worlds/v6/docs}/setup_en.md | 0 worlds/witness/__init__.py | 10 +- .../witness/docs}/en_The Witness.md | 0 .../witness/docs}/setup_en.md | 0 91 files changed, 537 insertions(+), 703 deletions(-) delete mode 100644 WebHostLib/static/assets/tutorial/tutorials.json rename {WebHostLib/static/assets/gameInfo => worlds/alttp/docs}/en_A Link to the Past.md (100%) rename {WebHostLib/static/assets/tutorial/A Link to the Past => worlds/alttp/docs}/msu1_en.md (100%) rename {WebHostLib/static/assets/tutorial/A Link to the Past => worlds/alttp/docs}/msu1_es.md (100%) rename {WebHostLib/static/assets/tutorial/A Link to the Past => worlds/alttp/docs}/msu1_fr.md (100%) rename {WebHostLib/static/assets/tutorial/A Link to the Past => worlds/alttp/docs}/multiworld_de.md (100%) rename {WebHostLib/static/assets/tutorial/A Link to the Past => worlds/alttp/docs}/multiworld_en.md (98%) rename {WebHostLib/static/assets/tutorial/A Link to the Past => worlds/alttp/docs}/multiworld_es.md (100%) rename {WebHostLib/static/assets/tutorial/A Link to the Past => worlds/alttp/docs}/multiworld_fr.md (100%) rename {WebHostLib/static/assets/tutorial/A Link to the Past => worlds/alttp/docs}/plando_en.md (100%) rename {WebHostLib/static/assets/tutorial => worlds/alttp/docs}/retroarch-network-commands-en.png (100%) mode change 100755 => 100644 rename {WebHostLib/static/assets/gameInfo => worlds/archipidle/docs}/en_ArchipIDLE.md (100%) rename {WebHostLib/static/assets/tutorial/ArchipIDLE => worlds/archipidle/docs}/guide_en.md (100%) rename {WebHostLib/static/assets/tutorial/ChecksFinder => worlds/checksfinder/docs}/checksfinder_en.md (100%) rename {WebHostLib/static/assets/gameInfo => worlds/checksfinder/docs}/en_ChecksFinder.md (100%) rename {WebHostLib/static/assets/tutorial/Factorio => worlds/factorio/docs}/connect-to-ap-server.png (100%) rename {WebHostLib/static/assets/gameInfo => worlds/factorio/docs}/en_Factorio.md (100%) rename {WebHostLib/static/assets/tutorial/Factorio => worlds/factorio/docs}/factorio-download.png (100%) rename {WebHostLib/static/assets/tutorial/Factorio => worlds/factorio/docs}/setup_en.md (97%) rename {WebHostLib/static/assets/gameInfo => worlds/ff1/docs}/en_Final Fantasy.md (100%) rename {WebHostLib/static/assets/tutorial/Final Fantasy => worlds/ff1/docs}/multiworld_en.md (100%) rename {WebHostLib/static/assets/tutorial/Archipelago => worlds/generic/docs}/advanced_settings_en.md (100%) rename {WebHostLib/static/assets/tutorial/Archipelago => worlds/generic/docs}/commands_en.md (100%) rename {WebHostLib/static/assets/tutorial/Archipelago => worlds/generic/docs}/plando_en.md (100%) rename {WebHostLib/static/assets/tutorial/Archipelago => worlds/generic/docs}/setup_en.md (100%) rename {WebHostLib/static/assets/tutorial/Archipelago => worlds/generic/docs}/triggers_en.md (100%) rename {WebHostLib/static/assets/tutorial/Archipelago => worlds/generic/docs}/using_website_en.md (100%) rename {WebHostLib/static/assets/gameInfo => worlds/hk/docs}/en_Hollow Knight.md (100%) rename {WebHostLib/static/assets/tutorial/Hollow Knight => worlds/hk/docs}/setup_en.md (100%) rename {WebHostLib/static/assets/gameInfo => worlds/meritous/docs}/en_Meritous.md (100%) rename {WebHostLib/static/assets/tutorial/Meritous => worlds/meritous/docs}/setup_en.md (100%) rename {WebHostLib/static/assets/gameInfo => worlds/minecraft/docs}/en_Minecraft.md (100%) rename {WebHostLib/static/assets/tutorial/Minecraft => worlds/minecraft/docs}/minecraft_en.md (100%) rename {WebHostLib/static/assets/tutorial/Minecraft => worlds/minecraft/docs}/minecraft_es.md (100%) rename {WebHostLib/static/assets/tutorial/Minecraft => worlds/minecraft/docs}/minecraft_sv.md (100%) rename {WebHostLib/static/assets/gameInfo => worlds/oot/docs}/en_Ocarina of Time.md (100%) rename {WebHostLib/static/assets/tutorial/Ocarina of Time => worlds/oot/docs}/setup_en.md (100%) rename {WebHostLib/static/assets/tutorial/Ocarina of Time => worlds/oot/docs}/setup_es.md (100%) rename {WebHostLib/static/assets/gameInfo => worlds/raft/docs}/en_Raft.md (100%) rename {WebHostLib/static/assets/tutorial/Raft => worlds/raft/docs}/setup_en.md (100%) rename {WebHostLib/static/assets/gameInfo => worlds/rogue-legacy/docs}/en_Rogue Legacy.md (100%) rename {WebHostLib/static/assets/tutorial/Rogue Legacy => worlds/rogue-legacy/docs}/rogue-legacy_en.md (100%) rename {WebHostLib/static/assets/gameInfo => worlds/ror2/docs}/en_Risk of Rain 2.md (100%) rename {WebHostLib/static/assets/tutorial/Risk of Rain 2 => worlds/ror2/docs}/setup_en.md (100%) rename {WebHostLib/static/assets/gameInfo => worlds/sm/docs}/en_Super Metroid.md (100%) rename {WebHostLib/static/assets/tutorial/Super Metroid => worlds/sm/docs}/multiworld_en.md (100%) rename {WebHostLib/static/assets/gameInfo => worlds/sm64ex/docs}/en_Super Mario 64.md (100%) rename {WebHostLib/static/assets/tutorial/Super Mario 64 => worlds/sm64ex/docs}/setup_en.md (100%) rename {WebHostLib/static/assets/gameInfo => worlds/smz3/docs}/en_SMZ3.md (100%) rename {WebHostLib/static/assets/tutorial/SMZ3 => worlds/smz3/docs}/multiworld_en.md (100%) rename {WebHostLib/static/assets/gameInfo => worlds/soe/docs}/en_Secret of Evermore.md (100%) rename {WebHostLib/static/assets/tutorial/Secret of Evermore => worlds/soe/docs}/multiworld_en.md (100%) rename {WebHostLib/static/assets/gameInfo => worlds/spire/docs}/en_Slay the Spire.md (100%) rename {WebHostLib/static/assets/tutorial/Slay the Spire => worlds/spire/docs}/slay-the-spire_en.md (100%) rename {WebHostLib/static/assets/gameInfo => worlds/subnautica/docs}/en_Subnautica.md (100%) rename {WebHostLib/static/assets/tutorial/Subnautica => worlds/subnautica/docs}/setup_en.md (100%) rename {WebHostLib/static/assets/gameInfo => worlds/timespinner/docs}/en_Timespinner.md (100%) rename {WebHostLib/static/assets/tutorial/Timespinner => worlds/timespinner/docs}/setup_de.md (98%) rename {WebHostLib/static/assets/tutorial/Timespinner => worlds/timespinner/docs}/setup_en.md (100%) rename {WebHostLib/static/assets/gameInfo => worlds/v6/docs}/en_VVVVVV.md (100%) rename {WebHostLib/static/assets/tutorial/VVVVVV => worlds/v6/docs}/setup_en.md (100%) rename {WebHostLib/static/assets/gameInfo => worlds/witness/docs}/en_The Witness.md (100%) rename {WebHostLib/static/assets/tutorial/The Witness => worlds/witness/docs}/setup_en.md (100%) diff --git a/BaseClasses.py b/BaseClasses.py index e3b8aaf7d1..854b34a894 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -6,7 +6,7 @@ import logging import json import functools from collections import OrderedDict, Counter, deque -from typing import List, Dict, Optional, Set, Iterable, Union, Any, Tuple, TypedDict, Callable +from typing import List, Dict, Optional, Set, Iterable, Union, Any, Tuple, TypedDict, Callable, NamedTuple import typing # this can go away when Python 3.8 support is dropped import secrets import random @@ -1458,6 +1458,19 @@ class Spoiler(): AutoWorld.call_all(self.world, "write_spoiler_end", outfile) +class Tutorial(NamedTuple): + """Class to build website tutorial pages from a .md file in the world's /docs folder. Order is as follows. + Name of the tutorial as it will appear on the site. Concise description covering what the guide will entail. + Language the guide is written in. Name of the file ex 'setup_en.md'. Name of the link on the site; game name is + filled automatically so 'setup/en' etc. Author or authors.""" + tutorial_name: str + description: str + language: str + file_name: str + link: str + author: List[str] + + seeddigits = 20 @@ -1470,4 +1483,4 @@ def get_seed(seed=None) -> int: from worlds import AutoWorld -auto_world = AutoWorld.World \ No newline at end of file +auto_world = AutoWorld.World diff --git a/WebHost.py b/WebHost.py index 4254727269..dc558a9afc 100644 --- a/WebHost.py +++ b/WebHost.py @@ -1,4 +1,5 @@ import os +import sys import multiprocessing import logging import typing @@ -21,6 +22,8 @@ from WebHostLib.autolauncher import autohost, autogen from WebHostLib.lttpsprites import update_sprites_lttp from WebHostLib.options import create as create_options_files +from worlds.AutoWorld import AutoWorldRegister, WebWorld + configpath = os.path.abspath("config.yaml") if not os.path.exists(configpath): # fall back to config.yaml in home configpath = os.path.abspath(Utils.user_path('config.yaml')) @@ -39,17 +42,53 @@ def get_app(): def create_ordered_tutorials_file() -> typing.List[typing.Dict[str, typing.Any]]: import json + import shutil + worlds = {} + data = [] + for game, world in AutoWorldRegister.world_types.items(): + if hasattr(world.web, 'tutorials'): + worlds[game] = world + for game, world in worlds.items(): + # copy files from world's docs folder to the generated folder + source_path = Utils.local_path(os.path.dirname(sys.modules[world.__module__].__file__), 'docs') + target_path = Utils.local_path("WebHostLib", "static", "generated", "docs", game) + files = os.listdir(source_path) + for file in files: + os.makedirs(os.path.dirname(Utils.local_path(target_path, file)), exist_ok=True) + shutil.copyfile(Utils.local_path(source_path, file), Utils.local_path(target_path, file)) + # build a json tutorial dict per game + game_data = {'gameTitle': game, 'tutorials': []} + for tutorial in world.web.tutorials: + # build dict for the json file + current_tutorial = { + 'name': tutorial.tutorial_name, + 'description': tutorial.description, + 'files': [{ + 'language': tutorial.language, + 'filename': game + '/' + tutorial.file_name, + 'link': f'{game}/{tutorial.link}', + 'authors': tutorial.author + }] + } - with open(Utils.local_path("WebHostLib", "static", "assets", "tutorial", "tutorials.json")) as source: - data = json.load(source) + # check if the name of the current guide exists already + for guide in game_data['tutorials']: + if guide and tutorial.tutorial_name == guide['name']: + guide['files'].append(current_tutorial['files'][0]) + added = True + break + else: + game_data['tutorials'].append(current_tutorial) - data = sorted(data, key=lambda entry: entry["gameTitle"].lower()) - - folder = Utils.local_path("WebHostLib", "static", "generated") - os.makedirs(folder, exist_ok=True) - with open(os.path.join(folder, "tutorials.json"), "w") as target: - json.dump(data, target) - return data + data.append(game_data) + with open(Utils.local_path("WebHostLib", "static", "generated", "tutorials.json"), 'w', encoding='utf-8-sig') as json_target: + generic_data = {} + for games in data: + if 'Archipelago' in games['gameTitle']: + generic_data = data.pop(data.index(games)) + sorted_data = [generic_data] + sorted(data, key=lambda entry: entry["gameTitle"].lower()) + json.dump(sorted_data, json_target, indent=2, ensure_ascii=False) + return sorted_data if __name__ == "__main__": diff --git a/WebHostLib/__init__.py b/WebHostLib/__init__.py index d818ffa1fe..9bb1cb7908 100644 --- a/WebHostLib/__init__.py +++ b/WebHostLib/__init__.py @@ -129,6 +129,10 @@ def tutorial(game, file, lang): @app.route('/tutorial/') def tutorial_landing(): + worlds = {} + for game, world in AutoWorldRegister.world_types.items(): + if not world.hidden: + worlds[game] = world return render_template("tutorialLanding.html") diff --git a/WebHostLib/static/assets/gameInfo.js b/WebHostLib/static/assets/gameInfo.js index 5a8a45db26..8a9c8b3f22 100644 --- a/WebHostLib/static/assets/gameInfo.js +++ b/WebHostLib/static/assets/gameInfo.js @@ -14,7 +14,7 @@ window.addEventListener('load', () => { } resolve(ajax.responseText); }; - ajax.open('GET', `${window.location.origin}/static/assets/gameInfo/` + + ajax.open('GET', `${window.location.origin}/static/generated/docs/${gameInfo.getAttribute('data-game')}/` + `${gameInfo.getAttribute('data-lang')}_${gameInfo.getAttribute('data-game')}.md`, true); ajax.send(); }).then((results) => { diff --git a/WebHostLib/static/assets/tutorial.js b/WebHostLib/static/assets/tutorial.js index e943c62921..23d2f076fc 100644 --- a/WebHostLib/static/assets/tutorial.js +++ b/WebHostLib/static/assets/tutorial.js @@ -14,7 +14,7 @@ window.addEventListener('load', () => { } resolve(ajax.responseText); }; - ajax.open('GET', `${window.location.origin}/static/assets/tutorial/` + + ajax.open('GET', `${window.location.origin}/static/generated/docs/` + `${tutorialWrapper.getAttribute('data-game')}/${tutorialWrapper.getAttribute('data-file')}_` + `${tutorialWrapper.getAttribute('data-lang')}.md`, true); ajax.send(); diff --git a/WebHostLib/static/assets/tutorial/tutorials.json b/WebHostLib/static/assets/tutorial/tutorials.json deleted file mode 100644 index 2c88c125e3..0000000000 --- a/WebHostLib/static/assets/tutorial/tutorials.json +++ /dev/null @@ -1,597 +0,0 @@ -[ - { - "gameTitle": "Archipelago", - "tutorials": [ - { - "name": "Multiworld Setup Tutorial", - "description": "A guide to setting up the Archipelago software to generate and host multiworld games on your computer and using the website.", - "files": [ - { - "language": "English", - "filename": "Archipelago/setup_en.md", - "link": "Archipelago/setup/en", - "authors": [ - "alwaysintreble" - ] - } - ] - }, - { - "name": "Archipelago Website User Guide", - "description": "A guide to using the Archipelago website to generate multiworlds or host pre-generated multiworlds.", - "files": [ - { - "language": "English", - "filename": "Archipelago/using_website.md", - "link": "Archipelago/using_website/en", - "authors": [ - "alwaysintreble" - ] - } - ] - }, - { - "name": "Archipelago Server and Client Commands", - "description": "A guide detailing the commands available to the user when participating in an Archipelago session.", - "files": [ - { - "language": "English", - "filename": "Archipelago/commands_en.md", - "link": "Archipelago/commands/en", - "authors": [ - "jat2980", - "Ijwu" - ] - } - ] - }, - { - "name": "Advanced YAML Guide", - "description": "A guide to reading yaml files and editing them to fully customize your game.", - "files": [ - { - "language": "English", - "filename": "Archipelago/advanced_settings_en.md", - "link": "Archipelago/advanced_settings/en", - "authors": [ - "alwaysintreble", - "Alchav" - ] - } - ] - }, - { - "name": "Archipelago Triggers Guide", - "description": "A guide to setting up and using triggers in your game settings.", - "files": [ - { - "language": "English", - "filename": "Archipelago/triggers_en.md", - "link": "Archipelago/triggers/en", - "authors": [ - "alwaysintreble" - ] - } - ] - }, - { - "name": "Archipelago Plando Guide", - "description": "A guide to understanding and using plando for your game.", - "files": [ - { - "language": "English", - "filename": "Archipelago/plando_en.md", - "link": "Archipelago/plando/en", - "authors": [ - "alwaysintreble", - "Alchav" - ] - } - ] - } - ] - }, - { - "gameTitle": "The Legend of Zelda: A Link to the Past", - "tutorials": [ - { - "name": "Multiworld Setup Tutorial", - "description": "A guide to setting up the Archipelago ALttP software on your computer. This guide covers single-player, multiworld, and related software.", - "files": [ - { - "language": "English", - "filename": "A Link to the Past/multiworld_en.md", - "link": "A Link to the Past/multiworld/en", - "authors": [ - "Farrak Kilhn" - ] - }, - { - "language": "Deutsch", - "filename": "A Link to the Past/multiworld_de.md", - "link": "A Link to the Past/multiworld/de", - "authors": [ - "Fischfilet" - ] - }, - { - "language": "Español", - "filename": "A Link to the Past/multiworld_es.md", - "link": "A Link to the Past/multiworld/es", - "authors": [ - "Edos" - ] - }, - { - "language": "Français", - "filename": "A Link to the Past/multiworld_fr.md", - "link": "A Link to the Past/multiworld/fr", - "authors": [ - "Coxla" - ] - } - ] - }, - { - "name": "MSU-1 Setup Tutorial", - "description": "A guide to setting up MSU-1, which allows for custom in-game music.", - "files": [ - { - "language": "English", - "filename": "A Link to the Past/msu1_en.md", - "link": "A Link to the Past/msu1/en", - "authors": [ - "Farrak Kilhn" - ] - }, - { - "language": "Español", - "filename": "A Link to the Past/msu1_es.md", - "link": "A Link to the Past/msu1/es", - "authors": [ - "Edos" - ] - }, - { - "language": "Français", - "filename": "A Link to the Past/msu1_fr.md", - "link": "A Link to the Past/msu1/fr", - "authors": [ - "Coxla" - ] - } - ] - }, - { - "name": "Plando Tutorial", - "description": "A guide to creating Multiworld Plandos", - "files": [ - { - "language": "English", - "filename": "A Link to the Past/plando_en.md", - "link": "A Link to the Past/plando/en", - "authors": [ - "Berserker" - ] - } - ] - } - ] - }, - { - "gameTitle": "The Legend of Zelda: Ocarina of Time", - "tutorials": [ - { - "name": "Multiworld Setup Tutorial", - "description": "A guide to setting up the Archipelago Ocarina of Time software on your computer.", - "files": [ - { - "language": "English", - "filename": "Ocarina of Time/setup_en.md", - "link": "Ocarina of Time/setup/en", - "authors": [ - "Edos" - ] - }, - { - "language": "Spanish", - "filename": "Ocarina of Time/setup_es.md", - "link": "Ocarina of Time/setup/es", - "authors": [ - "Edos" - ] - } - ] - } - ] - }, - { - "gameTitle": "Factorio", - "tutorials": [ - { - "name": "Multiworld Setup Tutorial", - "description": "A guide to setting up the Archipelago Factorio software on your computer.", - "files": [ - { - "language": "English", - "filename": "Factorio/setup_en.md", - "link": "Factorio/setup/en", - "authors": [ - "Berserker", - "Farrak Kilhn" - ] - } - ] - } - ] - }, - { - "gameTitle": "Meritous", - "tutorials": [ - { - "name": "Meritous Setup Tutorial", - "description": "A guide to setting up the Archipelago Meritous software on your computer.", - "files": [ - { - "language": "English", - "filename": "Meritous/setup_en.md", - "link": "Meritous/setup/en", - "authors": [ - "KewlioMZX" - ] - } - ] - } - ] - }, - { - "gameTitle": "Minecraft", - "tutorials": [ - { - "name": "Multiworld Setup Tutorial", - "description": "A guide to setting up the Archipelago Minecraft software on your computer. This guide covers single-player, multiworld, and related software.", - "files": [ - { - "language": "English", - "filename": "Minecraft/minecraft_en.md", - "link": "Minecraft/minecraft/en", - "authors": [ - "Kono Tyran" - ] - }, - { - "language": "Spanish", - "filename": "Minecraft/minecraft_es.md", - "link": "Minecraft/minecraft/es", - "authors": [ - "Edos" - ] - }, - { - "language": "Swedish", - "filename": "Minecraft/minecraft_sv.md", - "link": "Minecraft/minecraft/sv", - "authors": [ - "Albinum" - ] - } - ] - } - ] - }, - { - "gameTitle": "Risk of Rain 2", - "tutorials": [ - { - "name": "Multiworld Setup Guide", - "description": "A guide to setting up the Risk of Rain 2 integration for Archipelago multiworld games.", - "files": [ - { - "language": "English", - "filename": "Risk of Rain 2/setup_en.md", - "link": "Risk of Rain 2/setup/en", - "authors": [ - "Ijwu" - ] - } - ] - } - ] - }, - { - "gameTitle": "Raft", - "tutorials": [ - { - "name": "Multiworld Setup Guide", - "description": "A guide to setting up Raft integration for Archipelago multiworld games.", - "files": [ - { - "language": "English", - "filename": "Raft/setup_en.md", - "link": "Raft/setup/en", - "authors": [ - "SunnyBat", - "Awareqwx" - ] - } - ] - } - ] - }, - { - "gameTitle": "Timespinner", - "tutorials": [ - { - "name": "Multiworld Setup Guide", - "description": "A guide to setting up the Timespinner randomizer connected to an Archipelago Multiworld", - "files": [ - { - "language": "English", - "filename": "Timespinner/setup_en.md", - "link": "Timespinner/setup/en", - "authors": [ - "Jarno" - ] - }, - { - "language": "German", - "filename": "Timespinner/setup_de.md", - "link": "Timespinner/setup/de", - "authors": [ - "Grrmo", - "Fynxes", - "Blaze0168" - ] - } - ] - } - ] - }, - { - "gameTitle": "SMZ3", - "tutorials": [ - { - "name": "Multiworld Setup Guide", - "description": "A guide to setting up the Archipelago Super Metroid and A Link to the Past Crossover randomizer on your computer. This guide covers single-player, multiworld, and related software.", - "files": [ - { - "language": "English", - "filename": "SMZ3/multiworld_en.md", - "link": "SMZ3/multiworld/en", - "authors": [ - "lordlou" - ] - } - ] - } - ] - }, - { - "gameTitle": "Subnautica", - "tutorials": [ - { - "name": "Multiworld Setup Guide", - "description": "A guide to setting up the Subnautica randomizer connected to an Archipelago Multiworld", - "files": [ - { - "language": "English", - "filename": "Subnautica/setup_en.md", - "link": "Subnautica/setup/en", - "authors": [ - "Berserker" - ] - } - ] - } - ] - }, - { - "gameTitle": "Super Metroid", - "tutorials": [ - { - "name": "Multiworld Setup Guide", - "description": "A guide to setting up the Super Metroid Client on your computer. This guide covers single-player, multiworld, and related software.", - "files": [ - { - "language": "English", - "filename": "Super Metroid/multiworld_en.md", - "link": "Super Metroid/multiworld/en", - "authors": [ - "Farrak Kilhn" - ] - } - ] - } - ] - }, - { - "gameTitle": "Secret of Evermore", - "tutorials": [ - { - "name": "Multiworld Setup Guide", - "description": "A guide to playing Secret of Evermore randomizer. This guide covers single-player, multiworld and related software.", - "files": [ - { - "language": "English", - "filename": "Secret of Evermore/multiworld_en.md", - "link": "Secret of Evermore/multiworld/en", - "authors": [ - "Black Sliver" - ] - } - ] - } - ] - }, - { - "gameTitle": "Final Fantasy", - "tutorials": [ - { - "name": "Multiworld Setup Guide", - "description": "A guide to playing Final Fantasy multiworld. This guide only covers playing multiworld.", - "files": [ - { - "language": "English", - "filename": "Final Fantasy/multiworld_en.md", - "link": "Final Fantasy/multiworld/en", - "authors": [ - "jat2980" - ] - } - ] - } - ] - }, - { - "gameTitle": "Rogue Legacy", - "tutorials": [ - { - "name": "Multiworld Setup Guide", - "description": "A guide to setting up the Rogue Legacy Randomizer software on your computer. This guide covers single-player, multiworld, and related software.", - "files": [ - { - "language": "English", - "filename": "Rogue Legacy/rogue-legacy_en.md", - "link": "Rogue Legacy/rogue-legacy/en", - "authors": [ - "Phar" - ] - } - ] - } - ] - }, - { - "gameTitle": "Slay the Spire", - "tutorials": [ - { - "name": "Multiworld Setup Guide", - "description": "A guide to setting up Slay the Spire for Archipelago. This guide covers single-player, multiworld, and related software.", - "files": [ - { - "language": "English", - "filename": "Slay the Spire/slay-the-spire_en.md", - "link": "Slay the Spire/slay-the-spire/en", - "authors": [ - "Phar" - ] - } - ] - } - ] - }, - { - "gameTitle": "Super Mario 64 EX", - "tutorials": [ - { - "name": "Multiworld Setup Guide", - "description": "A guide to setting up SM64EX for MultiWorld.", - "files": [ - { - "language": "English", - "filename": "Super Mario 64/setup_en.md", - "link": "Super Mario 64/setup/en", - "authors": [ - "N00byKing" - ] - } - ] - } - ] - }, - { - "gameTitle": "VVVVVV", - "tutorials": [ - { - "name": "Multiworld Setup Guide", - "description": "A guide to setting up VVVVVV for MultiWorld.", - "files": [ - { - "language": "English", - "filename": "VVVVVV/setup_en.md", - "link": "VVVVVV/setup/en", - "authors": [ - "N00byKing" - ] - } - ] - } - ] - }, - { - "gameTitle": "ChecksFinder", - "tutorials": [ - { - "name": "Multiworld Setup Tutorial", - "description": "A guide to setting up the Archipelago ChecksFinder software on your computer. This guide covers single-player, multiworld, and related software.", - "files": [ - { - "language": "English", - "filename": "ChecksFinder/checksfinder_en.md", - "link": "ChecksFinder/checksfinder/en", - "authors": [ - "Mewlif" - ] - } - ] - } - ] - }, - { - "gameTitle": "ArchipIDLE", - "tutorials": [ - { - "name": "Setup Guide", - "description": "A guide to playing ArchipIDLE", - "files": [ - { - "language": "English", - "filename": "ArchipIDLE/guide_en.md", - "link": "ArchipIDLE/guide/en", - "authors": [ - "Farrak Kilhn" - ] - } - ] - } - ] - }, - { - "gameTitle": "Hollow Knight", - "tutorials": [ - { - "name": "Mod Setup and Use Guide", - "description": "A guide to playing Hollow Knight with Archipelago.", - "files": [ - { - "language": "English", - "filename": "Hollow Knight/setup_en.md", - "link": "Hollow Knight/setup/en", - "authors": [ - "ijwu" - ] - } - ] - } - ] - }, - { - "gameTitle": "The Witness", - "tutorials": [ - { - "name": "Multiworld Setup Guide", - "description": "A guide to playing The Witness with Archipelago.", - "files": [ - { - "language": "English", - "filename": "The Witness/setup_en.md", - "link": "The Witness/setup/en", - "authors": [ - "NewSoupVi", "Jarno" - ] - } - ] - } - ] - } -] diff --git a/worlds/AutoWorld.py b/worlds/AutoWorld.py index ffd2c6b320..c71642c4c9 100644 --- a/worlds/AutoWorld.py +++ b/worlds/AutoWorld.py @@ -1,9 +1,9 @@ from __future__ import annotations import logging -from typing import Dict, FrozenSet, Set, Tuple, List, Optional, TextIO, Any, Callable, Union +from typing import Dict, FrozenSet, Set, Tuple, List, Optional, TextIO, Any, Callable, Union, NamedTuple -from BaseClasses import MultiWorld, Item, CollectionState, Location +from BaseClasses import MultiWorld, Item, CollectionState, Location, Tutorial from Options import Option @@ -90,6 +90,13 @@ class WebWorld: # display a settings page. Can be a link to an out-of-ap settings tool too. settings_page: Union[bool, str] = True + # docs folder will be scanned for game info pages using this list in the format '{language}_{game_name}.md' + game_info_languages: List[str] = ['en'] + + # docs folder will also be scanned for tutorial guides given the relevant information in this list. Each Tutorial + # class is to be used for one guide. + tutorials: List[Tutorial] + # Choose a theme for your /game/* pages # Available: dirt, grass, grassFlowers, ice, jungle, ocean, partyTime theme = "grass" diff --git a/worlds/alttp/__init__.py b/worlds/alttp/__init__.py index 9e028b2d4f..05b42f21e0 100644 --- a/worlds/alttp/__init__.py +++ b/worlds/alttp/__init__.py @@ -4,9 +4,9 @@ import os import threading import typing -from BaseClasses import Item, CollectionState +from BaseClasses import Item, CollectionState, Tutorial from .SubClasses import ALttPItem -from ..AutoWorld import World, LogicMixin +from ..AutoWorld import World, WebWorld, LogicMixin from .Options import alttp_options, smallkey_shuffle from .Items import as_dict_item_table, item_name_groups, item_table from .Regions import lookup_name_to_id, create_regions, mark_light_world_regions @@ -24,6 +24,82 @@ from .EntranceShuffle import link_entrances, link_inverted_entrances, plando_con lttp_logger = logging.getLogger("A Link to the Past") +class ALTTPWeb(WebWorld): + setup_en = Tutorial( + "Multiworld Setup Tutorial", + "A guide to setting up the Archipelago ALttP Software on your computer. This guide covers single-player, multiworld, and related software.", + "English", + "multiworld_en.md", + "multiworld/en", + ["Farrak Kilhn"] + ) + + setup_de = Tutorial( + setup_en.tutorial_name, + setup_en.description, + "Deutsch", + "multiworld_de.md", + "multiworld/de", + ["Fischfilet"] + ) + + setup_es = Tutorial( + setup_en.tutorial_name, + setup_en.description, + "Español", + "multiworld_es.md", + "multiworld/es", + ["Edos"] + ) + + setup_fr = Tutorial( + setup_en.tutorial_name, + setup_en.description, + "Français", + "multiworld_fr.md", + "multiworld/fr", + ["Coxla"] + ) + + msu = Tutorial( + "MSU-1 Setup Tutorial", + "A guide to setting up MSU-1, which allows for custom in-game music.", + "English", + "msu1_en.md", + "msu1/en", + ["Farrak Kilhn"] + ) + + msu_es = Tutorial( + msu.tutorial_name, + msu.description, + "Español", + "msu1_es.md", + "msu1/en", + ["Edos"] + ) + + msu_fr = Tutorial( + msu.tutorial_name, + msu.description, + "Français", + "msu1_fr.md", + "msu1/fr", + ["Coxla"] + ) + + plando = Tutorial( + "Plando Tutorial", + "A guide to creating Multiworld Plandos with LTTP", + "English", + "plando_en.md", + "plando/en", + ["Berserker"] + ) + + tutorials = [setup_en, setup_de, setup_es, setup_fr, msu, msu_es, msu_fr, plando] + + class ALTTPWorld(World): """ The Legend of Zelda: A Link to the Past is an action/adventure game. Take on the role of @@ -44,6 +120,7 @@ class ALTTPWorld(World): remote_items: bool = False remote_start_inventory: bool = False required_client_version = (0, 3, 2) + web = ALTTPWeb() set_rules = set_rules diff --git a/WebHostLib/static/assets/gameInfo/en_A Link to the Past.md b/worlds/alttp/docs/en_A Link to the Past.md similarity index 100% rename from WebHostLib/static/assets/gameInfo/en_A Link to the Past.md rename to worlds/alttp/docs/en_A Link to the Past.md diff --git a/WebHostLib/static/assets/tutorial/A Link to the Past/msu1_en.md b/worlds/alttp/docs/msu1_en.md similarity index 100% rename from WebHostLib/static/assets/tutorial/A Link to the Past/msu1_en.md rename to worlds/alttp/docs/msu1_en.md diff --git a/WebHostLib/static/assets/tutorial/A Link to the Past/msu1_es.md b/worlds/alttp/docs/msu1_es.md similarity index 100% rename from WebHostLib/static/assets/tutorial/A Link to the Past/msu1_es.md rename to worlds/alttp/docs/msu1_es.md diff --git a/WebHostLib/static/assets/tutorial/A Link to the Past/msu1_fr.md b/worlds/alttp/docs/msu1_fr.md similarity index 100% rename from WebHostLib/static/assets/tutorial/A Link to the Past/msu1_fr.md rename to worlds/alttp/docs/msu1_fr.md diff --git a/WebHostLib/static/assets/tutorial/A Link to the Past/multiworld_de.md b/worlds/alttp/docs/multiworld_de.md similarity index 100% rename from WebHostLib/static/assets/tutorial/A Link to the Past/multiworld_de.md rename to worlds/alttp/docs/multiworld_de.md diff --git a/WebHostLib/static/assets/tutorial/A Link to the Past/multiworld_en.md b/worlds/alttp/docs/multiworld_en.md similarity index 98% rename from WebHostLib/static/assets/tutorial/A Link to the Past/multiworld_en.md rename to worlds/alttp/docs/multiworld_en.md index d9b2625e0a..3759b93a6e 100644 --- a/WebHostLib/static/assets/tutorial/A Link to the Past/multiworld_en.md +++ b/worlds/alttp/docs/multiworld_en.md @@ -111,7 +111,7 @@ You only have to do these steps once. 2. Go to Settings --> User Interface. Set "Show Advanced Settings" to ON. 3. Go to Settings --> Network. Set "Network Commands" to ON. (It is found below Request Device 16.) Leave the default Network Command Port at 55355. -![Screenshot of Network Commands setting](/static/assets/tutorial/retroarch-network-commands-en.png) +![Screenshot of Network Commands setting](/static/generated/docs/A_Link_to_the_Past/retroarch-network-commands-en.png) 4. Go to Main Menu --> Online Updater --> Core Downloader. Scroll down and select "Nintendo - SNES / SFC (bsnes-mercury Performance)". diff --git a/WebHostLib/static/assets/tutorial/A Link to the Past/multiworld_es.md b/worlds/alttp/docs/multiworld_es.md similarity index 100% rename from WebHostLib/static/assets/tutorial/A Link to the Past/multiworld_es.md rename to worlds/alttp/docs/multiworld_es.md diff --git a/WebHostLib/static/assets/tutorial/A Link to the Past/multiworld_fr.md b/worlds/alttp/docs/multiworld_fr.md similarity index 100% rename from WebHostLib/static/assets/tutorial/A Link to the Past/multiworld_fr.md rename to worlds/alttp/docs/multiworld_fr.md diff --git a/WebHostLib/static/assets/tutorial/A Link to the Past/plando_en.md b/worlds/alttp/docs/plando_en.md similarity index 100% rename from WebHostLib/static/assets/tutorial/A Link to the Past/plando_en.md rename to worlds/alttp/docs/plando_en.md diff --git a/WebHostLib/static/assets/tutorial/retroarch-network-commands-en.png b/worlds/alttp/docs/retroarch-network-commands-en.png old mode 100755 new mode 100644 similarity index 100% rename from WebHostLib/static/assets/tutorial/retroarch-network-commands-en.png rename to worlds/alttp/docs/retroarch-network-commands-en.png diff --git a/worlds/archipidle/__init__.py b/worlds/archipidle/__init__.py index da6deeb597..859b4d1838 100644 --- a/worlds/archipidle/__init__.py +++ b/worlds/archipidle/__init__.py @@ -1,4 +1,4 @@ -from BaseClasses import Item, MultiWorld, Region, Location, Entrance +from BaseClasses import Item, MultiWorld, Region, Location, Entrance, Tutorial from .Items import item_table from .Rules import set_rules from ..AutoWorld import World, WebWorld @@ -6,6 +6,14 @@ from ..AutoWorld import World, WebWorld class ArchipIDLEWebWorld(WebWorld): theme = 'partyTime' + tutorials = [Tutorial( + "Setup Guide", + "A guide to playing ArchipIDLE", + "English", + "guide_en.md", + "guide/en", + ["Farrak Kilhn"] + )] class ArchipIDLEWorld(World): diff --git a/WebHostLib/static/assets/gameInfo/en_ArchipIDLE.md b/worlds/archipidle/docs/en_ArchipIDLE.md similarity index 100% rename from WebHostLib/static/assets/gameInfo/en_ArchipIDLE.md rename to worlds/archipidle/docs/en_ArchipIDLE.md diff --git a/WebHostLib/static/assets/tutorial/ArchipIDLE/guide_en.md b/worlds/archipidle/docs/guide_en.md similarity index 100% rename from WebHostLib/static/assets/tutorial/ArchipIDLE/guide_en.md rename to worlds/archipidle/docs/guide_en.md diff --git a/worlds/checksfinder/__init__.py b/worlds/checksfinder/__init__.py index b3b5d2a7ce..7b5a61c952 100644 --- a/worlds/checksfinder/__init__.py +++ b/worlds/checksfinder/__init__.py @@ -9,12 +9,25 @@ from .Regions import checksfinder_regions, link_checksfinder_structures from .Rules import set_rules, set_completion_rules from worlds.generic.Rules import exclusion_rules -from BaseClasses import Region, Entrance, Item +from BaseClasses import Region, Entrance, Item, Tutorial from .Options import checksfinder_options -from ..AutoWorld import World +from ..AutoWorld import World, WebWorld client_version = 7 + +class ChecksFinderWeb(WebWorld): + tutorials = [Tutorial( + "Multiworld Setup Tutorial", + "A guide to setting up the Archipelago ChecksFinder software on your computer. This guide covers " + "single-player, multiworld, and related software.", + "English", + "checksfinder_en.md", + "checksfinder/en", + ["Mewlif"] + )] + + class ChecksFinderWorld(World): """ ChecksFinder is a game where you avoid mines and find checks inside the board @@ -23,6 +36,7 @@ class ChecksFinderWorld(World): game: str = "ChecksFinder" options = checksfinder_options topology_present = True + web = ChecksFinderWeb() item_name_to_id = {name: data.code for name, data in item_table.items()} location_name_to_id = {name: data.id for name, data in advancement_table.items()} diff --git a/WebHostLib/static/assets/tutorial/ChecksFinder/checksfinder_en.md b/worlds/checksfinder/docs/checksfinder_en.md similarity index 100% rename from WebHostLib/static/assets/tutorial/ChecksFinder/checksfinder_en.md rename to worlds/checksfinder/docs/checksfinder_en.md diff --git a/WebHostLib/static/assets/gameInfo/en_ChecksFinder.md b/worlds/checksfinder/docs/en_ChecksFinder.md similarity index 100% rename from WebHostLib/static/assets/gameInfo/en_ChecksFinder.md rename to worlds/checksfinder/docs/en_ChecksFinder.md diff --git a/worlds/factorio/__init__.py b/worlds/factorio/__init__.py index 02665391dc..9ca1156ecc 100644 --- a/worlds/factorio/__init__.py +++ b/worlds/factorio/__init__.py @@ -1,9 +1,9 @@ import collections import typing -from ..AutoWorld import World +from ..AutoWorld import World, WebWorld -from BaseClasses import Region, Entrance, Location, Item, RegionType +from BaseClasses import Region, Entrance, Location, Item, RegionType, Tutorial from .Technologies import base_tech_table, recipe_sources, base_technology_table, \ all_ingredient_names, all_product_sources, required_technologies, get_rocket_requirements, rocket_recipes, \ progressive_technology_table, common_tech_table, tech_to_progressive_lookup, progressive_tech_table, \ @@ -16,6 +16,17 @@ from .Options import factorio_options, MaxSciencePack, Silo, Satellite, TechTree import logging +class FactorioWeb(WebWorld): + tutorials = [Tutorial( + "Multiworld Setup Tutorial", + "A guide to setting up the Archipelago Factorio software on your computer.", + "English", + "setup_en.md", + "setup/en", + ["Berserker, Farrak Kilhn"] + )] + + class FactorioItem(Item): game = "Factorio" @@ -36,6 +47,8 @@ class Factorio(World): custom_recipes: typing.Dict[str, Recipe] advancement_technologies: typing.Set[str] + web = FactorioWeb() + item_name_to_id = all_items location_name_to_id = base_tech_table item_name_groups = { diff --git a/WebHostLib/static/assets/tutorial/Factorio/connect-to-ap-server.png b/worlds/factorio/docs/connect-to-ap-server.png similarity index 100% rename from WebHostLib/static/assets/tutorial/Factorio/connect-to-ap-server.png rename to worlds/factorio/docs/connect-to-ap-server.png diff --git a/WebHostLib/static/assets/gameInfo/en_Factorio.md b/worlds/factorio/docs/en_Factorio.md similarity index 100% rename from WebHostLib/static/assets/gameInfo/en_Factorio.md rename to worlds/factorio/docs/en_Factorio.md diff --git a/WebHostLib/static/assets/tutorial/Factorio/factorio-download.png b/worlds/factorio/docs/factorio-download.png similarity index 100% rename from WebHostLib/static/assets/tutorial/Factorio/factorio-download.png rename to worlds/factorio/docs/factorio-download.png diff --git a/WebHostLib/static/assets/tutorial/Factorio/setup_en.md b/worlds/factorio/docs/setup_en.md similarity index 97% rename from WebHostLib/static/assets/tutorial/Factorio/setup_en.md rename to worlds/factorio/docs/setup_en.md index b772239cfd..fc83c190f1 100644 --- a/WebHostLib/static/assets/tutorial/Factorio/setup_en.md +++ b/worlds/factorio/docs/setup_en.md @@ -91,7 +91,7 @@ potential conflicts with your currently-installed version of Factorio. Download appropriate to your operating system, and extract the folder to a convenient location (we recommend `C:\Factorio` or similar). -![Factorio Download Options](/static/assets/tutorial/Factorio/factorio-download.png) +![Factorio Download Options](/static/generated/docs/Factorio/factorio-download.png) Next, you should launch your Factorio Server by running `factorio.exe`, which is located at: `bin/x64/factorio.exe`. You will be asked to log in to your Factorio account using the same credentials you used on Factorio's website. After you @@ -120,7 +120,7 @@ This allows you to host your own Factorio game. Archipelago if you chose to include it during the installation process. 6. Enter `/connect [server-address]` into the input box at the bottom of the Archipelago Client and press "Enter" -![Factorio Client for Archipelago Connection Command](/static/assets/tutorial/factorio/connect-to-ap-server.png) +![Factorio Client for Archipelago Connection Command](/static/generated/docs/Factorio/connect-to-ap-server.png) 7. Launch your Factorio Client 8. Click on "Multiplayer" in the main menu diff --git a/worlds/ff1/__init__.py b/worlds/ff1/__init__.py index bad40c1636..8b1005619d 100644 --- a/worlds/ff1/__init__.py +++ b/worlds/ff1/__init__.py @@ -1,5 +1,5 @@ from typing import Dict -from BaseClasses import Item, Location, MultiWorld +from BaseClasses import Item, Location, MultiWorld, Tutorial from .Items import ItemData, FF1Items, FF1_STARTER_ITEMS, FF1_PROGRESSION_LIST, FF1_BRIDGE from .Locations import EventId, FF1Locations, generate_rule, CHAOS_TERMINATED_EVENT from .Options import ff1_options @@ -8,6 +8,14 @@ from ..AutoWorld import World, WebWorld class FF1Web(WebWorld): settings_page = "https://finalfantasyrandomizer.com/" + tutorials = [Tutorial( + "Multiworld Setup Guide", + "A guide to playing Final Fantasy multiworld. This guide only covers playing multiworld.", + "English", + "multiworld_en.md", + "multiworld/en", + ["jat2980"] + )] class FF1World(World): diff --git a/WebHostLib/static/assets/gameInfo/en_Final Fantasy.md b/worlds/ff1/docs/en_Final Fantasy.md similarity index 100% rename from WebHostLib/static/assets/gameInfo/en_Final Fantasy.md rename to worlds/ff1/docs/en_Final Fantasy.md diff --git a/WebHostLib/static/assets/tutorial/Final Fantasy/multiworld_en.md b/worlds/ff1/docs/multiworld_en.md similarity index 100% rename from WebHostLib/static/assets/tutorial/Final Fantasy/multiworld_en.md rename to worlds/ff1/docs/multiworld_en.md diff --git a/worlds/generic/__init__.py b/worlds/generic/__init__.py index 926e0e1b5e..72bedf6b93 100644 --- a/worlds/generic/__init__.py +++ b/worlds/generic/__init__.py @@ -1,12 +1,33 @@ from typing import NamedTuple, Union import logging -from BaseClasses import Item +from BaseClasses import Item, Tutorial -from ..AutoWorld import World +from ..AutoWorld import World, WebWorld from NetUtils import SlotType +class GenericWeb(WebWorld): + advanced_settings = Tutorial('Advanced YAML Guide', + 'A guide to reading YAML files and editing them to fully customize your game.', + 'English', 'advanced_settings_en.md', 'advanced_settings/en', + ['alwaysintreble', 'Alchav']) + commands = Tutorial('Archipelago Server and Client Commands', + 'A guide detailing the commands available to the user when participating in an Archipelago session.', + 'English', 'commands_en.md', 'commands/en', ['jat2980', 'Ijwu']) + plando = Tutorial('Archipelago Plando Guide', 'A guide to understanding and using plando for your game.', + 'English', 'plando_en.md', 'plando/en', ['alwaysintreble', 'Alchav']) + setup = Tutorial('Multiworld Setup Tutorial', + 'A guide to setting up the Archipelago software to generate and host multiworld games on your computer.', + 'English', 'setup_en.md', 'setup/en', ['alwaysintreble']) + triggers = Tutorial('Archipelago Triggers Guide', 'A guide to setting up and using triggers in your game settings.', + 'English', 'triggers_en.md', 'triggers/en', ['alwaysintreble']) + using_website = Tutorial('Archipelago Website User Guide', + 'A guide to using the Archipelago website to generate multiworlds or h ost pre-generated multiworlds.', + 'English', 'using_website_en.md', 'using_website/en', ['alwaysintreble']) + tutorials = [setup, using_website, commands, advanced_settings, triggers, plando] + + class GenericWorld(World): game = "Archipelago" topology_present = False @@ -18,6 +39,7 @@ class GenericWorld(World): "Server": -2 } hidden = True + web = GenericWeb() def generate_early(self): self.world.player_types[self.player] = SlotType.spectator # mark as spectator diff --git a/WebHostLib/static/assets/tutorial/Archipelago/advanced_settings_en.md b/worlds/generic/docs/advanced_settings_en.md similarity index 100% rename from WebHostLib/static/assets/tutorial/Archipelago/advanced_settings_en.md rename to worlds/generic/docs/advanced_settings_en.md diff --git a/WebHostLib/static/assets/tutorial/Archipelago/commands_en.md b/worlds/generic/docs/commands_en.md similarity index 100% rename from WebHostLib/static/assets/tutorial/Archipelago/commands_en.md rename to worlds/generic/docs/commands_en.md diff --git a/WebHostLib/static/assets/tutorial/Archipelago/plando_en.md b/worlds/generic/docs/plando_en.md similarity index 100% rename from WebHostLib/static/assets/tutorial/Archipelago/plando_en.md rename to worlds/generic/docs/plando_en.md diff --git a/WebHostLib/static/assets/tutorial/Archipelago/setup_en.md b/worlds/generic/docs/setup_en.md similarity index 100% rename from WebHostLib/static/assets/tutorial/Archipelago/setup_en.md rename to worlds/generic/docs/setup_en.md diff --git a/WebHostLib/static/assets/tutorial/Archipelago/triggers_en.md b/worlds/generic/docs/triggers_en.md similarity index 100% rename from WebHostLib/static/assets/tutorial/Archipelago/triggers_en.md rename to worlds/generic/docs/triggers_en.md diff --git a/WebHostLib/static/assets/tutorial/Archipelago/using_website_en.md b/worlds/generic/docs/using_website_en.md similarity index 100% rename from WebHostLib/static/assets/tutorial/Archipelago/using_website_en.md rename to worlds/generic/docs/using_website_en.md diff --git a/worlds/hk/__init__.py b/worlds/hk/__init__.py index 6fb2cb9c11..015cb12c63 100644 --- a/worlds/hk/__init__.py +++ b/worlds/hk/__init__.py @@ -14,8 +14,8 @@ from .ExtractedData import locations, starts, multi_locations, location_to_regio event_names, item_effects, connectors, one_ways from .Charms import names as charm_names -from BaseClasses import Region, Entrance, Location, MultiWorld, Item, RegionType -from ..AutoWorld import World, LogicMixin +from BaseClasses import Region, Entrance, Location, MultiWorld, Item, RegionType, Tutorial +from ..AutoWorld import World, LogicMixin, WebWorld white_palace_locations = { "Soul_Totem-Path_of_Pain_Below_Thornskip", @@ -88,6 +88,17 @@ progression_charms = { } +class HKWeb(WebWorld): + tutorials = [Tutorial( + "Mod Setup and Use Guide", + "A guide to playing Hollow Knight with Archipelago.", + "English", + "setup_en.md", + "setup/en", + ["Ijwu"] + )] + + class HKWorld(World): """Beneath the fading town of Dirtmouth sleeps a vast, ancient kingdom. Many are drawn beneath the surface, searching for riches, or glory, or answers to old secrets. @@ -97,6 +108,8 @@ class HKWorld(World): game: str = "Hollow Knight" options = hollow_knight_options + web = HKWeb() + item_name_to_id = {name: data.id for name, data in item_table.items()} location_name_to_id = {location_name: location_id for location_id, location_name in enumerate(locations, start=0x1000000)} diff --git a/WebHostLib/static/assets/gameInfo/en_Hollow Knight.md b/worlds/hk/docs/en_Hollow Knight.md similarity index 100% rename from WebHostLib/static/assets/gameInfo/en_Hollow Knight.md rename to worlds/hk/docs/en_Hollow Knight.md diff --git a/WebHostLib/static/assets/tutorial/Hollow Knight/setup_en.md b/worlds/hk/docs/setup_en.md similarity index 100% rename from WebHostLib/static/assets/tutorial/Hollow Knight/setup_en.md rename to worlds/hk/docs/setup_en.md diff --git a/worlds/meritous/__init__.py b/worlds/meritous/__init__.py index 24b9808b81..b263219062 100644 --- a/worlds/meritous/__init__.py +++ b/worlds/meritous/__init__.py @@ -3,18 +3,29 @@ # This software is released under the MIT License. # https://opensource.org/licenses/MIT -from BaseClasses import Item, MultiWorld +from BaseClasses import Item, MultiWorld, Tutorial from Fill import fill_restrictive from .Items import item_table, item_groups, MeritousItem from .Locations import location_table, MeritousLocation from .Options import meritous_options, cost_scales from .Regions import create_regions from .Rules import set_rules -from ..AutoWorld import World +from ..AutoWorld import World, WebWorld client_version = 1 +class MeritousWeb(WebWorld): + tutorials = [Tutorial( + "Meritous Setup Tutorial", + "A guide to setting up the Archipelago Meritous software on your computer.", + "English", + "setup_en.md", + "setup/en", + ["KewlioMZX"] + )] + + class MeritousWorld(World): """ Meritous Gaiden is a procedurally generated bullet-hell dungeon crawl game. @@ -25,6 +36,8 @@ class MeritousWorld(World): game: str = "Meritous" topology_present: False + web = MeritousWeb() + item_name_to_id = item_table location_name_to_id = location_table item_name_groups = item_groups diff --git a/WebHostLib/static/assets/gameInfo/en_Meritous.md b/worlds/meritous/docs/en_Meritous.md similarity index 100% rename from WebHostLib/static/assets/gameInfo/en_Meritous.md rename to worlds/meritous/docs/en_Meritous.md diff --git a/WebHostLib/static/assets/tutorial/Meritous/setup_en.md b/worlds/meritous/docs/setup_en.md similarity index 100% rename from WebHostLib/static/assets/tutorial/Meritous/setup_en.md rename to worlds/meritous/docs/setup_en.md diff --git a/worlds/minecraft/__init__.py b/worlds/minecraft/__init__.py index 27f8955404..19cc9ba3dc 100644 --- a/worlds/minecraft/__init__.py +++ b/worlds/minecraft/__init__.py @@ -9,7 +9,7 @@ from .Regions import mc_regions, link_minecraft_structures, default_connections from .Rules import set_advancement_rules, set_completion_rules from worlds.generic.Rules import exclusion_rules -from BaseClasses import Region, Entrance, Item +from BaseClasses import Region, Entrance, Item, Tutorial from .Options import minecraft_options from ..AutoWorld import World, WebWorld @@ -19,6 +19,36 @@ class MinecraftWebWorld(WebWorld): theme = "jungle" bug_report_page = "https://github.com/KonoTyran/Minecraft_AP_Randomizer/issues/new?assignees=&labels=bug&template=bug_report.yaml&title=%5BBug%5D%3A+Brief+Description+of+bug+here" + setup = Tutorial( + "Multiworld Setup Tutorial", + "A guide to setting up the Archipelago Minecraft software on your computer. This guide covers" + "single-player, multiworkd, and related software.", + "English", + "minecraft_en.md", + "minecraft/en", + ["Kono Tyran"] + ) + + setup_es = Tutorial( + setup.tutorial_name, + setup.description, + "Español", + "minecraft_es.md", + "minecraft/es", + ["Edos"] + ) + + setup_sv = Tutorial( + setup.tutorial_name, + setup.description, + "Swedish", + "minecraft_sv.md", + "minecraft/sv", + ["Albinum"] + ) + + tutorials = [setup, setup_es, setup_sv] + class MinecraftWorld(World): """ diff --git a/WebHostLib/static/assets/gameInfo/en_Minecraft.md b/worlds/minecraft/docs/en_Minecraft.md similarity index 100% rename from WebHostLib/static/assets/gameInfo/en_Minecraft.md rename to worlds/minecraft/docs/en_Minecraft.md diff --git a/WebHostLib/static/assets/tutorial/Minecraft/minecraft_en.md b/worlds/minecraft/docs/minecraft_en.md similarity index 100% rename from WebHostLib/static/assets/tutorial/Minecraft/minecraft_en.md rename to worlds/minecraft/docs/minecraft_en.md diff --git a/WebHostLib/static/assets/tutorial/Minecraft/minecraft_es.md b/worlds/minecraft/docs/minecraft_es.md similarity index 100% rename from WebHostLib/static/assets/tutorial/Minecraft/minecraft_es.md rename to worlds/minecraft/docs/minecraft_es.md diff --git a/WebHostLib/static/assets/tutorial/Minecraft/minecraft_sv.md b/worlds/minecraft/docs/minecraft_sv.md similarity index 100% rename from WebHostLib/static/assets/tutorial/Minecraft/minecraft_sv.md rename to worlds/minecraft/docs/minecraft_sv.md diff --git a/worlds/oot/__init__.py b/worlds/oot/__init__.py index b5dab0d9c1..7bde676f34 100644 --- a/worlds/oot/__init__.py +++ b/worlds/oot/__init__.py @@ -27,11 +27,11 @@ from .HintList import getRequiredHints from .SaveContext import SaveContext from Utils import get_options, output_path -from BaseClasses import MultiWorld, CollectionState, RegionType +from BaseClasses import MultiWorld, CollectionState, RegionType, Tutorial from Options import Range, Toggle, OptionList from Fill import fill_restrictive, FillError from worlds.generic.Rules import exclusion_rules -from ..AutoWorld import World, AutoLogicRegister +from ..AutoWorld import World, AutoLogicRegister, WebWorld location_id_offset = 67000 @@ -66,6 +66,28 @@ class OOTCollectionState(metaclass=AutoLogicRegister): return ret +class OOTWeb(WebWorld): + setup = Tutorial( + "Multiworld Setup Tutorial", + "A guide to setting up the Archipelago Ocarina of Time software on your computer.", + "English", + "setup_en.md", + "setup/en", + ["Edos"] + ) + + setup_es = Tutorial( + setup.tutorial_name, + setup.description, + "Español", + "setup_es.md", + "setup/es", + setup.author + ) + + tutorials = [setup, setup_es] + + class OOTWorld(World): """ The Legend of Zelda: Ocarina of Time is a 3D action/adventure game. Travel through Hyrule in two time periods, @@ -80,6 +102,7 @@ class OOTWorld(World): location_name_to_id = location_name_to_id remote_items: bool = False remote_start_inventory: bool = False + web = OOTWeb() data_version = 2 diff --git a/WebHostLib/static/assets/gameInfo/en_Ocarina of Time.md b/worlds/oot/docs/en_Ocarina of Time.md similarity index 100% rename from WebHostLib/static/assets/gameInfo/en_Ocarina of Time.md rename to worlds/oot/docs/en_Ocarina of Time.md diff --git a/WebHostLib/static/assets/tutorial/Ocarina of Time/setup_en.md b/worlds/oot/docs/setup_en.md similarity index 100% rename from WebHostLib/static/assets/tutorial/Ocarina of Time/setup_en.md rename to worlds/oot/docs/setup_en.md diff --git a/WebHostLib/static/assets/tutorial/Ocarina of Time/setup_es.md b/worlds/oot/docs/setup_es.md similarity index 100% rename from WebHostLib/static/assets/tutorial/Ocarina of Time/setup_es.md rename to worlds/oot/docs/setup_es.md diff --git a/worlds/raft/__init__.py b/worlds/raft/__init__.py index 8a4a6443fd..5322a7e3bc 100644 --- a/worlds/raft/__init__.py +++ b/worlds/raft/__init__.py @@ -9,8 +9,20 @@ from .Regions import create_regions, getConnectionName from .Rules import set_rules from .Options import raft_options -from BaseClasses import Region, RegionType, Entrance, Location, MultiWorld, Item -from ..AutoWorld import World +from BaseClasses import Region, RegionType, Entrance, Location, MultiWorld, Item, Tutorial +from ..AutoWorld import World, WebWorld + + +class RaftWeb(WebWorld): + tutorials = [Tutorial( + "Multiworld Setup Guide", + "A guide to setting up Raft integration for Archipelago multiworld games.", + "English", + "setup_en.md", + "setup/en", + ["SunnyBat", "Awareqwx"] + )] + class RaftWorld(World): """ @@ -19,6 +31,7 @@ class RaftWorld(World): islands that you come across. """ game: str = "Raft" + web = RaftWeb() item_name_to_id = items_lookup_name_to_id.copy() lastItemId = max(filter(lambda val: val is not None, item_name_to_id.values())) diff --git a/WebHostLib/static/assets/gameInfo/en_Raft.md b/worlds/raft/docs/en_Raft.md similarity index 100% rename from WebHostLib/static/assets/gameInfo/en_Raft.md rename to worlds/raft/docs/en_Raft.md diff --git a/WebHostLib/static/assets/tutorial/Raft/setup_en.md b/worlds/raft/docs/setup_en.md similarity index 100% rename from WebHostLib/static/assets/tutorial/Raft/setup_en.md rename to worlds/raft/docs/setup_en.md diff --git a/worlds/rogue-legacy/__init__.py b/worlds/rogue-legacy/__init__.py index 323484941b..9cff3736ba 100644 --- a/worlds/rogue-legacy/__init__.py +++ b/worlds/rogue-legacy/__init__.py @@ -1,6 +1,6 @@ import typing -from BaseClasses import Item, MultiWorld +from BaseClasses import Item, MultiWorld, Tutorial from .Items import LegacyItem, ItemData, item_table, vendors_table, static_classes_table, progressive_classes_table, \ skill_unlocks_table, blueprints_table, runes_table, misc_items_table from .Locations import LegacyLocation, location_table, base_location_table @@ -8,7 +8,18 @@ from .Options import legacy_options from .Regions import create_regions from .Rules import set_rules from .Names import ItemName -from ..AutoWorld import World +from ..AutoWorld import World, WebWorld + + +class LegacyWeb(WebWorld): + tutorials = [Tutorial( + "Multiworld Setup Guide", + "A guide to setting up the Rogue Legacy Randomizer software on your computer. This guide covers single-player, multiworld, and related software.", + "English", + "rogue-legacy_en.md", + "rogue-legacy/en", + ["Phar"] + )] class LegacyWorld(World): @@ -22,6 +33,7 @@ class LegacyWorld(World): topology_present = False data_version = 3 required_client_version = (0, 2, 3) + web = LegacyWeb() item_name_to_id = {name: data.code for name, data in item_table.items()} location_name_to_id = location_table diff --git a/WebHostLib/static/assets/gameInfo/en_Rogue Legacy.md b/worlds/rogue-legacy/docs/en_Rogue Legacy.md similarity index 100% rename from WebHostLib/static/assets/gameInfo/en_Rogue Legacy.md rename to worlds/rogue-legacy/docs/en_Rogue Legacy.md diff --git a/WebHostLib/static/assets/tutorial/Rogue Legacy/rogue-legacy_en.md b/worlds/rogue-legacy/docs/rogue-legacy_en.md similarity index 100% rename from WebHostLib/static/assets/tutorial/Rogue Legacy/rogue-legacy_en.md rename to worlds/rogue-legacy/docs/rogue-legacy_en.md diff --git a/worlds/ror2/__init__.py b/worlds/ror2/__init__.py index 0c3f6e333a..27011c606f 100644 --- a/worlds/ror2/__init__.py +++ b/worlds/ror2/__init__.py @@ -3,13 +3,24 @@ from .Items import RiskOfRainItem, item_table, item_pool_weights from .Locations import location_table, RiskOfRainLocation, base_location_table from .Rules import set_rules -from BaseClasses import Region, Entrance, Item, MultiWorld +from BaseClasses import Region, Entrance, Item, MultiWorld, Tutorial from .Options import ror2_options -from ..AutoWorld import World +from ..AutoWorld import World, WebWorld client_version = 1 +class RiskOfWeb(WebWorld): + tutorials = [Tutorial( + "Multiworld Setup Guide", + "A guide to setting up the Risk of Rain 2 integration for Archipelago multiworld games.", + "English", + "setup_en.md", + "setup/en", + ["Ijwu"] + )] + + class RiskOfRainWorld(World): """ Escape a chaotic alien planet by fighting through hordes of frenzied monsters – with your friends, or on your own. @@ -25,6 +36,7 @@ class RiskOfRainWorld(World): data_version = 3 forced_auto_forfeit = True + web = RiskOfWeb() def generate_basic(self): # shortcut for starting_inventory... The start_with_revive option lets you start with a Dio's Best Friend diff --git a/WebHostLib/static/assets/gameInfo/en_Risk of Rain 2.md b/worlds/ror2/docs/en_Risk of Rain 2.md similarity index 100% rename from WebHostLib/static/assets/gameInfo/en_Risk of Rain 2.md rename to worlds/ror2/docs/en_Risk of Rain 2.md diff --git a/WebHostLib/static/assets/tutorial/Risk of Rain 2/setup_en.md b/worlds/ror2/docs/setup_en.md similarity index 100% rename from WebHostLib/static/assets/tutorial/Risk of Rain 2/setup_en.md rename to worlds/ror2/docs/setup_en.md diff --git a/worlds/sm/__init__.py b/worlds/sm/__init__.py index 50115093ca..5a95833044 100644 --- a/worlds/sm/__init__.py +++ b/worlds/sm/__init__.py @@ -17,8 +17,8 @@ from .Options import sm_options from .Rom import get_base_rom_path, ROM_PLAYER_LIMIT, SMDeltaPatch import Utils -from BaseClasses import Region, Entrance, Location, MultiWorld, Item, RegionType, CollectionState -from ..AutoWorld import World, AutoLogicRegister +from BaseClasses import Region, Entrance, Location, MultiWorld, Item, RegionType, CollectionState, Tutorial +from ..AutoWorld import World, AutoLogicRegister, WebWorld from logic.smboolmanager import SMBoolManager from graph.vanilla.graph_locations import locationsDict @@ -56,6 +56,17 @@ class SMCollectionState(metaclass=AutoLogicRegister): return tuple(player for player in multiword.get_all_ids() if multiword.game[player] == game_name) +class SMWeb(WebWorld): + tutorials = [Tutorial( + "Multiworld Setup Guide", + "A guide to setting up the Super Metroid Client on your computer. This guide covers single-player, multiworld, and related software.", + "English", + "multiworld_en.md", + "multiworld/en", + ["Farrak Kilhn"] + )] + + class SMWorld(World): game: str = "Super Metroid" topology_present = True @@ -65,6 +76,7 @@ class SMWorld(World): location_names: Set[str] = frozenset(locations_lookup_name_to_id) item_name_to_id = items_lookup_name_to_id location_name_to_id = locations_lookup_name_to_id + web = SMWeb() remote_items: bool = False remote_start_inventory: bool = False diff --git a/WebHostLib/static/assets/gameInfo/en_Super Metroid.md b/worlds/sm/docs/en_Super Metroid.md similarity index 100% rename from WebHostLib/static/assets/gameInfo/en_Super Metroid.md rename to worlds/sm/docs/en_Super Metroid.md diff --git a/WebHostLib/static/assets/tutorial/Super Metroid/multiworld_en.md b/worlds/sm/docs/multiworld_en.md similarity index 100% rename from WebHostLib/static/assets/tutorial/Super Metroid/multiworld_en.md rename to worlds/sm/docs/multiworld_en.md diff --git a/worlds/sm64ex/__init__.py b/worlds/sm64ex/__init__.py index 09976b57ca..7306f286a4 100644 --- a/worlds/sm64ex/__init__.py +++ b/worlds/sm64ex/__init__.py @@ -6,11 +6,23 @@ from .Locations import location_table, SM64Location from .Options import sm64_options from .Rules import set_rules from .Regions import create_regions, sm64courses -from BaseClasses import Region, RegionType, Entrance, Item, MultiWorld -from ..AutoWorld import World +from BaseClasses import Region, RegionType, Entrance, Item, MultiWorld, Tutorial +from ..AutoWorld import World, WebWorld client_version = 1 + +class SM64Web(WebWorld): + tutorials = [Tutorial( + "Multiworld Setup Guide", + "A guide to setting up SM64EX for MultiWorld.", + "English", + "setup_en.md", + "setup/en", + ["N00byKing"] + )] + + class SM64World(World): """ The first Super Mario game to feature 3D gameplay, it features freedom of movement within a large open world based on polygons, @@ -20,6 +32,8 @@ class SM64World(World): game: str = "Super Mario 64" topology_present = False + web = SM64Web() + item_name_to_id = item_table location_name_to_id = location_table diff --git a/WebHostLib/static/assets/gameInfo/en_Super Mario 64.md b/worlds/sm64ex/docs/en_Super Mario 64.md similarity index 100% rename from WebHostLib/static/assets/gameInfo/en_Super Mario 64.md rename to worlds/sm64ex/docs/en_Super Mario 64.md diff --git a/WebHostLib/static/assets/tutorial/Super Mario 64/setup_en.md b/worlds/sm64ex/docs/setup_en.md similarity index 100% rename from WebHostLib/static/assets/tutorial/Super Mario 64/setup_en.md rename to worlds/sm64ex/docs/setup_en.md diff --git a/worlds/smz3/__init__.py b/worlds/smz3/__init__.py index 8d3cd06bca..0c675c9acc 100644 --- a/worlds/smz3/__init__.py +++ b/worlds/smz3/__init__.py @@ -5,14 +5,14 @@ import random import threading from typing import Dict, Set, TextIO -from BaseClasses import Region, Entrance, Location, MultiWorld, Item, RegionType, CollectionState +from BaseClasses import Region, Entrance, Location, MultiWorld, Item, RegionType, CollectionState, Tutorial from worlds.generic.Rules import set_rule import worlds.smz3.TotalSMZ3.Item as TotalSMZ3Item from worlds.smz3.TotalSMZ3.World import World as TotalSMZ3World from worlds.smz3.TotalSMZ3.Config import Config, GameMode, GanonInvincible, Goal, KeyShuffle, MorphLocation, SMLogic, SwordLocation, Z3Logic from worlds.smz3.TotalSMZ3.Location import LocationType, locations_start_id, Location as TotalSMZ3Location from worlds.smz3.TotalSMZ3.Patch import Patch as TotalSMZ3Patch, getWord, getWordArray -from ..AutoWorld import World, AutoLogicRegister +from ..AutoWorld import World, AutoLogicRegister, WebWorld from .Rom import get_base_rom_bytes, SMZ3DeltaPatch from .ips import IPS_Patch from .Options import smz3_options @@ -34,6 +34,17 @@ class SMZ3CollectionState(metaclass=AutoLogicRegister): return ret +class SMZ3Web(WebWorld): + tutorials = [Tutorial( + "Multiworld Setup Guide", + "A guide to setting up the Archipelago Super Metroid and A Link to the Past Crossover randomizer on your computer. This guide covers single-player, multiworld, and related software.", + "English", + "multiworld_en.md", + "multiworld/en", + ["lordlou"] + )] + + class SMZ3World(World): """ A python port of Super Metroid & A Link To The Past Crossover Item Randomizer based on v11.2 of Total's SMZ3. @@ -47,6 +58,7 @@ class SMZ3World(World): location_names: Set[str] item_name_to_id = TotalSMZ3Item.lookup_name_to_id location_name_to_id: Dict[str, int] = {key : locations_start_id + value.Id for key, value in TotalSMZ3World(Config({}), "", 0, "").locationLookup.items()} + web = SMZ3Web() remote_items: bool = False remote_start_inventory: bool = False diff --git a/WebHostLib/static/assets/gameInfo/en_SMZ3.md b/worlds/smz3/docs/en_SMZ3.md similarity index 100% rename from WebHostLib/static/assets/gameInfo/en_SMZ3.md rename to worlds/smz3/docs/en_SMZ3.md diff --git a/WebHostLib/static/assets/tutorial/SMZ3/multiworld_en.md b/worlds/smz3/docs/multiworld_en.md similarity index 100% rename from WebHostLib/static/assets/tutorial/SMZ3/multiworld_en.md rename to worlds/smz3/docs/multiworld_en.md diff --git a/worlds/soe/__init__.py b/worlds/soe/__init__.py index fd94ebf29a..0f29bad3dc 100644 --- a/worlds/soe/__init__.py +++ b/worlds/soe/__init__.py @@ -1,6 +1,6 @@ from ..AutoWorld import World, WebWorld from ..generic.Rules import set_rule -from BaseClasses import Region, Location, Entrance, Item, RegionType +from BaseClasses import Region, Location, Entrance, Item, RegionType, Tutorial from Utils import output_path import typing import os @@ -134,6 +134,14 @@ def _get_item_grouping() -> typing.Dict[str, typing.Set[str]]: class SoEWebWorld(WebWorld): theme = 'jungle' + tutorials = [Tutorial( + "Multiworld Setup Guide", + "A guide to playing Secret of Evermore randomizer. This guide covers single-player, multiworld and related software.", + "English", + "multiworld_en.md", + "multiworld/en", + ["Black Sliver"] + )] class SoEWorld(World): diff --git a/WebHostLib/static/assets/gameInfo/en_Secret of Evermore.md b/worlds/soe/docs/en_Secret of Evermore.md similarity index 100% rename from WebHostLib/static/assets/gameInfo/en_Secret of Evermore.md rename to worlds/soe/docs/en_Secret of Evermore.md diff --git a/WebHostLib/static/assets/tutorial/Secret of Evermore/multiworld_en.md b/worlds/soe/docs/multiworld_en.md similarity index 100% rename from WebHostLib/static/assets/tutorial/Secret of Evermore/multiworld_en.md rename to worlds/soe/docs/multiworld_en.md diff --git a/worlds/spire/__init__.py b/worlds/spire/__init__.py index c1f9229c44..2b420d626c 100644 --- a/worlds/spire/__init__.py +++ b/worlds/spire/__init__.py @@ -1,19 +1,31 @@ import string -from BaseClasses import Item, MultiWorld, Region, Location, Entrance +from BaseClasses import Item, MultiWorld, Region, Location, Entrance, Tutorial from .Items import item_table, item_pool, event_item_pairs from .Locations import location_table from .Regions import create_regions from .Rules import set_rules -from ..AutoWorld import World +from ..AutoWorld import World, WebWorld from .Options import spire_options +class SpireWeb(WebWorld): + tutorials = [Tutorial( + "Multiworld Setup Guide", + "A guide to setting up Slay the Spire for Archipelago. This guide covers single-player, multiworld, and related software.", + "English", + "slay-the-spire_en.md", + "slay-the-spire/en", + ["Phar"] + )] + + class SpireWorld(World): options = spire_options game = "Slay the Spire" topology_present = False data_version = 1 + web = SpireWeb() item_name_to_id = {name: data.code for name, data in item_table.items()} location_name_to_id = location_table diff --git a/WebHostLib/static/assets/gameInfo/en_Slay the Spire.md b/worlds/spire/docs/en_Slay the Spire.md similarity index 100% rename from WebHostLib/static/assets/gameInfo/en_Slay the Spire.md rename to worlds/spire/docs/en_Slay the Spire.md diff --git a/WebHostLib/static/assets/tutorial/Slay the Spire/slay-the-spire_en.md b/worlds/spire/docs/slay-the-spire_en.md similarity index 100% rename from WebHostLib/static/assets/tutorial/Slay the Spire/slay-the-spire_en.md rename to worlds/spire/docs/slay-the-spire_en.md diff --git a/worlds/subnautica/__init__.py b/worlds/subnautica/__init__.py index 9289052115..3943ea23b6 100644 --- a/worlds/subnautica/__init__.py +++ b/worlds/subnautica/__init__.py @@ -11,8 +11,19 @@ from .Regions import create_regions from .Rules import set_rules from .Options import options -from BaseClasses import Region, Entrance, Location, MultiWorld, Item -from ..AutoWorld import World +from BaseClasses import Region, Entrance, Location, MultiWorld, Item, Tutorial +from ..AutoWorld import World, WebWorld + + +class SubnaticaWeb(WebWorld): + tutorials = [Tutorial( + "Multiworld Setup Guide", + "A guide to setting up the Subnautica randomizer connected to an Archipelago Multiworld", + "English", + "setup_en.md", + "setup/en", + ["Berserker"] + )] class SubnauticaWorld(World): @@ -22,6 +33,7 @@ class SubnauticaWorld(World): You must find a cure for yourself, build an escape rocket, and leave the planet. """ game: str = "Subnautica" + web = SubnaticaWeb() item_name_to_id = items_lookup_name_to_id location_name_to_id = locations_lookup_name_to_id diff --git a/WebHostLib/static/assets/gameInfo/en_Subnautica.md b/worlds/subnautica/docs/en_Subnautica.md similarity index 100% rename from WebHostLib/static/assets/gameInfo/en_Subnautica.md rename to worlds/subnautica/docs/en_Subnautica.md diff --git a/WebHostLib/static/assets/tutorial/Subnautica/setup_en.md b/worlds/subnautica/docs/setup_en.md similarity index 100% rename from WebHostLib/static/assets/tutorial/Subnautica/setup_en.md rename to worlds/subnautica/docs/setup_en.md diff --git a/worlds/timespinner/__init__.py b/worlds/timespinner/__init__.py index a3ce4db174..929cd62212 100644 --- a/worlds/timespinner/__init__.py +++ b/worlds/timespinner/__init__.py @@ -1,5 +1,5 @@ from typing import Dict, List, Set, Tuple, TextIO -from BaseClasses import Item, MultiWorld, Location +from BaseClasses import Item, MultiWorld, Location, Tutorial from ..AutoWorld import World, WebWorld from .LogicMixin import TimespinnerLogic from .Items import get_item_names_per_category, item_table, starter_melee_weapons, starter_spells, starter_progression_items, filler_items @@ -10,6 +10,25 @@ from .PyramidKeys import get_pyramid_keys_unlock class TimespinnerWebWorld(WebWorld): theme = "ice" + setup = Tutorial( + "Multiworld Setup Guide", + "A guide to setting up the Timespinner randomizer connected to an Archipelago Multiworld", + "English", + "setup_en.md", + "setup/en", + ["Jarno"] + ) + + setup_de = Tutorial( + setup.tutorial_name, + setup.description, + "Deutsch", + "setup_de.md", + "setup/en", + ["Grrmo", "Fynxes", "Blaze0168"] + ) + + tutorials = [setup, setup_de] class TimespinnerWorld(World): """ diff --git a/WebHostLib/static/assets/gameInfo/en_Timespinner.md b/worlds/timespinner/docs/en_Timespinner.md similarity index 100% rename from WebHostLib/static/assets/gameInfo/en_Timespinner.md rename to worlds/timespinner/docs/en_Timespinner.md diff --git a/WebHostLib/static/assets/tutorial/Timespinner/setup_de.md b/worlds/timespinner/docs/setup_de.md similarity index 98% rename from WebHostLib/static/assets/tutorial/Timespinner/setup_de.md rename to worlds/timespinner/docs/setup_de.md index ca430dbc9e..0fe3fe1735 100644 --- a/WebHostLib/static/assets/tutorial/Timespinner/setup_de.md +++ b/worlds/timespinner/docs/setup_de.md @@ -1,50 +1,50 @@ -# Timespinner Randomizer Installationsanweisungen - -## Benötigte Software - -- [Timespinner (Steam)](https://store.steampowered.com/app/368620/Timespinner/) - , [Timespinner (Humble)](https://www.humblebundle.com/store/timespinner) - oder [Timespinner (GOG)](https://www.gog.com/game/timespinner) (andere Versionen werden nicht unterstützt) -- [Timespinner Randomizer](https://github.com/JarnoWesthof/TsRandomizer) - -## Wie funktioniert's? - -Der Timespinner Randomizer lädt die Timespinner.exe im gleichen Verzeichnis und verändert seine Speicherinformationen um -die Randomisierung der Gegenstände zu erlauben - -## Installationsanweisungen - -1. Die aktuellsten Dateien des Randomizers findest du ganz oben auf dieser - Webseite: [Timespinner Randomizer Releases](https://github.com/JarnoWesthof/TsRandomizer/releases). Lade dir unter ' - Assets' die .zip Datei für dein Betriebssystem herunter -2. Entpacke die .zip Datei im Ordner, in dem das Spiel Timespinner installiert ist - -## Den Randomizer starten - -- auf Windows: Starte die Datei TsRandomizer.exe -- auf Linux: Starte die Datei TsRandomizer.bin.x86_64 -- auf Mac: Starte die Datei TsRandomizer.bin.osx - -... im Ordner in dem die Inhalte aus der .zip Datei entpackt wurden - -Weitere Informationen zum Randomizer findest du hier: [ReadMe](https://github.com/JarnoWesthof/TsRandomizer) - -## An einer Multiworld teilnehmen - -1. Starte den Randomizer wie unter [Den Randomizer starten](#Den-Randomizer-starten) beschrieben -2. Wähle "New Game" -3. Wechsle "<< Select Seed >>" zu "<< Archiplago >>" indem du "links" auf deinem Controller oder der Tastatur drückst -4. Wähle "<< Archipelago >>" um ein neues Menu zu öffnen, wo du deine Logininformationen für Archipelago eingeben kannst - * ANMERKUNG: Die Eingabefelder unterstützen das Einfügen von Informationen mittels 'Ctrl + V' -5. Wähle "Connect" -6. Wenn alles funktioniert hat, wechselt das Spiel zurück zur Auswahl des Schwierigkeitsgrads und das Spiel startet, - sobald du einen davon ausgewählt hast - -## Woher bekomme ich eine Konfigurationsdatei? - -Die [Player Settings](https://archipelago.gg/games/Timespinner/player-settings) Seite auf der Website erlaubt dir, -persönliche Einstellungen zu definieren und diese in eine Konfigurationsdatei zu exportieren - -* Die Timespinner Randomizer Option "StinkyMaw" ist in Archipelago Seeds aktuell immer an -* Die Timespinner Randomizer Optionen "ProgressiveVerticalMovement" & "ProgressiveKeycards" werden in Archipelago Seeds - aktuell nicht unterstützt +# Timespinner Randomizer Installationsanweisungen + +## Benötigte Software + +- [Timespinner (Steam)](https://store.steampowered.com/app/368620/Timespinner/) + , [Timespinner (Humble)](https://www.humblebundle.com/store/timespinner) + oder [Timespinner (GOG)](https://www.gog.com/game/timespinner) (andere Versionen werden nicht unterstützt) +- [Timespinner Randomizer](https://github.com/JarnoWesthof/TsRandomizer) + +## Wie funktioniert's? + +Der Timespinner Randomizer lädt die Timespinner.exe im gleichen Verzeichnis und verändert seine Speicherinformationen um +die Randomisierung der Gegenstände zu erlauben + +## Installationsanweisungen + +1. Die aktuellsten Dateien des Randomizers findest du ganz oben auf dieser + Webseite: [Timespinner Randomizer Releases](https://github.com/JarnoWesthof/TsRandomizer/releases). Lade dir unter ' + Assets' die .zip Datei für dein Betriebssystem herunter +2. Entpacke die .zip Datei im Ordner, in dem das Spiel Timespinner installiert ist + +## Den Randomizer starten + +- auf Windows: Starte die Datei TsRandomizer.exe +- auf Linux: Starte die Datei TsRandomizer.bin.x86_64 +- auf Mac: Starte die Datei TsRandomizer.bin.osx + +... im Ordner in dem die Inhalte aus der .zip Datei entpackt wurden + +Weitere Informationen zum Randomizer findest du hier: [ReadMe](https://github.com/JarnoWesthof/TsRandomizer) + +## An einer Multiworld teilnehmen + +1. Starte den Randomizer wie unter [Den Randomizer starten](#Den-Randomizer-starten) beschrieben +2. Wähle "New Game" +3. Wechsle "<< Select Seed >>" zu "<< Archiplago >>" indem du "links" auf deinem Controller oder der Tastatur drückst +4. Wähle "<< Archipelago >>" um ein neues Menu zu öffnen, wo du deine Logininformationen für Archipelago eingeben kannst + * ANMERKUNG: Die Eingabefelder unterstützen das Einfügen von Informationen mittels 'Ctrl + V' +5. Wähle "Connect" +6. Wenn alles funktioniert hat, wechselt das Spiel zurück zur Auswahl des Schwierigkeitsgrads und das Spiel startet, + sobald du einen davon ausgewählt hast + +## Woher bekomme ich eine Konfigurationsdatei? + +Die [Player Settings](https://archipelago.gg/games/Timespinner/player-settings) Seite auf der Website erlaubt dir, +persönliche Einstellungen zu definieren und diese in eine Konfigurationsdatei zu exportieren + +* Die Timespinner Randomizer Option "StinkyMaw" ist in Archipelago Seeds aktuell immer an +* Die Timespinner Randomizer Optionen "ProgressiveVerticalMovement" & "ProgressiveKeycards" werden in Archipelago Seeds + aktuell nicht unterstützt diff --git a/WebHostLib/static/assets/tutorial/Timespinner/setup_en.md b/worlds/timespinner/docs/setup_en.md similarity index 100% rename from WebHostLib/static/assets/tutorial/Timespinner/setup_en.md rename to worlds/timespinner/docs/setup_en.md diff --git a/worlds/v6/__init__.py b/worlds/v6/__init__.py index 1970c4820e..014b9c88cf 100644 --- a/worlds/v6/__init__.py +++ b/worlds/v6/__init__.py @@ -5,11 +5,23 @@ from .Locations import location_table, V6Location from .Options import v6_options from .Rules import set_rules from .Regions import create_regions -from BaseClasses import Region, RegionType, Entrance, Item, MultiWorld -from ..AutoWorld import World +from BaseClasses import Region, RegionType, Entrance, Item, MultiWorld, Tutorial +from ..AutoWorld import World, WebWorld client_version = 1 + +class V6Web(WebWorld): + tutorials = [Tutorial( + "Multiworld Setup Guide", + "A guide to setting up VVVVVV for Multiworld.", + "English", + "setup_en.md", + "setup/en", + ["N00byKing"] + )] + + class V6World(World): """ VVVVVV is a platform game all about exploring one simple mechanical idea - what if you reversed gravity instead of jumping? @@ -17,6 +29,7 @@ class V6World(World): game: str = "VVVVVV" topology_present = False + web = V6Web() item_name_to_id = item_table location_name_to_id = location_table diff --git a/WebHostLib/static/assets/gameInfo/en_VVVVVV.md b/worlds/v6/docs/en_VVVVVV.md similarity index 100% rename from WebHostLib/static/assets/gameInfo/en_VVVVVV.md rename to worlds/v6/docs/en_VVVVVV.md diff --git a/WebHostLib/static/assets/tutorial/VVVVVV/setup_en.md b/worlds/v6/docs/setup_en.md similarity index 100% rename from WebHostLib/static/assets/tutorial/VVVVVV/setup_en.md rename to worlds/v6/docs/setup_en.md diff --git a/worlds/witness/__init__.py b/worlds/witness/__init__.py index 6d02e77479..76132938ea 100644 --- a/worlds/witness/__init__.py +++ b/worlds/witness/__init__.py @@ -4,7 +4,7 @@ Archipelago init file for The Witness import typing -from BaseClasses import Region, RegionType, Location, MultiWorld, Item, Entrance +from BaseClasses import Region, RegionType, Location, MultiWorld, Item, Entrance, Tutorial from ..AutoWorld import World, WebWorld from .player_logic import StaticWitnessLogic, WitnessPlayerLogic from .locations import WitnessPlayerLocations, StaticWitnessLocations @@ -17,6 +17,14 @@ from .utils import best_junk_to_add_based_on_weights class WitnessWebWorld(WebWorld): theme = "jungle" + tutorials = [Tutorial( + "Multiworld Setup Guide", + "A guide to playing The Witness with Archipelago.", + "English", + "setup_en.md", + "setup/en", + ["NewSoupVi", "Jarno"] + )] class WitnessWorld(World): diff --git a/WebHostLib/static/assets/gameInfo/en_The Witness.md b/worlds/witness/docs/en_The Witness.md similarity index 100% rename from WebHostLib/static/assets/gameInfo/en_The Witness.md rename to worlds/witness/docs/en_The Witness.md diff --git a/WebHostLib/static/assets/tutorial/The Witness/setup_en.md b/worlds/witness/docs/setup_en.md similarity index 100% rename from WebHostLib/static/assets/tutorial/The Witness/setup_en.md rename to worlds/witness/docs/setup_en.md From 3f691d6977fd9507629ba653236036215d3b6081 Mon Sep 17 00:00:00 2001 From: CaitSith2 Date: Wed, 11 May 2022 16:37:18 -0700 Subject: [PATCH 066/149] Add "exclude" to item links (#497) --- BaseClasses.py | 4 ++++ Options.py | 9 +++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/BaseClasses.py b/BaseClasses.py index 854b34a894..e1df8cf331 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -218,12 +218,14 @@ class MultiWorld(): raise Exception(f"Cannot ItemLink across games. Link: {item_link['name']}") item_links[item_link["name"]]["players"][player] = item_link["replacement_item"] item_links[item_link["name"]]["item_pool"] &= set(item_link["item_pool"]) + item_links[item_link["name"]]["exclude"] |= set(item_link.get("exclude", [])) else: if item_link["name"] in self.player_name.values(): raise Exception(f"Cannot name a ItemLink group the same as a player ({item_link['name']}) ({self.get_player_name(player)}).") item_links[item_link["name"]] = { "players": {player: item_link["replacement_item"]}, "item_pool": set(item_link["item_pool"]), + "exclude": set(item_link.get("exclude", [])), "game": self.game[player] } @@ -232,6 +234,8 @@ class MultiWorld(): pool = set() for item in item_link["item_pool"]: pool |= current_item_name_groups.get(item, {item}) + for item in item_link["exclude"]: + pool -= current_item_name_groups.get(item, {item}) item_link["item_pool"] = pool for group_name, item_link in item_links.items(): diff --git a/Options.py b/Options.py index 5a96c62055..2ce42289ba 100644 --- a/Options.py +++ b/Options.py @@ -5,10 +5,9 @@ import numbers import typing import random -from schema import Schema, And, Or +from schema import Schema, And, Or, Optional from Utils import get_fuzzy_results - class AssembleOptions(abc.ABCMeta): def __new__(mcs, name, bases, attrs): options = attrs["options"] = {} @@ -642,6 +641,7 @@ class ItemLinks(OptionList): { "name": And(str, len), "item_pool": [And(str, len)], + Optional("exclude"): [And(str, len)], "replacement_item": Or(And(str, len), None) } ]) @@ -657,6 +657,11 @@ class ItemLinks(OptionList): if item_name not in world.item_names and item_name not in world.item_name_groups: raise Exception(f"Item {item_name} from item link {link} " f"is not a valid item name from {world.game}") + if "exclude" in link: + for item_name in link["exclude"]: + if item_name not in world.item_names and item_name not in world.item_name_groups: + raise Exception(f"Item {item_name} from item link {link} " + f"is not a valid item name from {world.game}") if link["replacement_item"] and link["replacement_item"] not in world.item_names: raise Exception(f"Item {link['replacement_item']} from item link {link} " f"is not a valid item name from {world.game}") From b0b41711d4910ce6982c04ba6100132da972744c Mon Sep 17 00:00:00 2001 From: weffjebster <94584218+weffjebster@users.noreply.github.com> Date: Sat, 14 May 2022 05:52:35 -0400 Subject: [PATCH 067/149] Adding damage rando v2 options to timespinner rando (#503) --- worlds/timespinner/Options.py | 126 ++++++++++++++++++++++++++++++++-- 1 file changed, 119 insertions(+), 7 deletions(-) diff --git a/worlds/timespinner/Options.py b/worlds/timespinner/Options.py index 84d99d5606..4915a749c3 100644 --- a/worlds/timespinner/Options.py +++ b/worlds/timespinner/Options.py @@ -1,6 +1,7 @@ -from typing import Dict +from typing import Dict, Union from BaseClasses import MultiWorld -from Options import Toggle, DefaultOnToggle, DeathLink, Choice, Range, Option +from Options import Toggle, DefaultOnToggle, DeathLink, Choice, Range, Option, OptionDict +from schema import Schema, And class StartWithJewelryBox(Toggle): "Start with Jewelry Box unlocked" @@ -54,9 +55,120 @@ class LoreChecks(Toggle): "Memories and journal entries contain items." display_name = "Lore Checks" -class DamageRando(Toggle): - "Each orb has a high chance of having lower base damage and a low chance of having much higher base damage." +class DamageRando(Choice): + "Randomly nerfs and buffs some orbs and their associated spells as well as some associated rings." display_name = "Damage Rando" + option_off = 0 + option_allnerfs = 1 + option_mostlynerfs = 2 + option_balanced = 3 + option_mostlybuffs = 4 + option_allbuffs = 5 + option_manual = 6 + +class DamageRandoOverrides(OptionDict): + "Manual +/-/normal odds for each orb. Put 0 if you don't want a certain nerf or buff to be a possibility." + schema = Schema({ + "Blue": { + "MinusOdds": And(int, lambda n: n >= 0), + "NormalOdds": And(int, lambda n: n >= 0), + "PlusOdds": And(int, lambda n: n >= 0) + }, + "Blade": { + "MinusOdds": And(int, lambda n: n >= 0), + "NormalOdds": And(int, lambda n: n >= 0), + "PlusOdds": And(int, lambda n: n >= 0) + }, + "Fire": { + "MinusOdds": And(int, lambda n: n >= 0), + "NormalOdds": And(int, lambda n: n >= 0), + "PlusOdds": And(int, lambda n: n >= 0) + }, + "Plasma": { + "MinusOdds": And(int, lambda n: n >= 0), + "NormalOdds": And(int, lambda n: n >= 0), + "PlusOdds": And(int, lambda n: n >= 0) + }, + "Iron": { + "MinusOdds": And(int, lambda n: n >= 0), + "NormalOdds": And(int, lambda n: n >= 0), + "PlusOdds": And(int, lambda n: n >= 0) + }, + "Ice": { + "MinusOdds": And(int, lambda n: n >= 0), + "NormalOdds": And(int, lambda n: n >= 0), + "PlusOdds": And(int, lambda n: n >= 0) + }, + "Wind": { + "MinusOdds": And(int, lambda n: n >= 0), + "NormalOdds": And(int, lambda n: n >= 0), + "PlusOdds": And(int, lambda n: n >= 0) + }, + "Gun": { + "MinusOdds": And(int, lambda n: n >= 0), + "NormalOdds": And(int, lambda n: n >= 0), + "PlusOdds": And(int, lambda n: n >= 0) + }, + "Umbra": { + "MinusOdds": And(int, lambda n: n >= 0), + "NormalOdds": And(int, lambda n: n >= 0), + "PlusOdds": And(int, lambda n: n >= 0) + }, + "Empire": { + "MinusOdds": And(int, lambda n: n >= 0), + "NormalOdds": And(int, lambda n: n >= 0), + "PlusOdds": And(int, lambda n: n >= 0) + }, + "Eye": { + "MinusOdds": And(int, lambda n: n >= 0), + "NormalOdds": And(int, lambda n: n >= 0), + "PlusOdds": And(int, lambda n: n >= 0) + }, + "Blood": { + "MinusOdds": And(int, lambda n: n >= 0), + "NormalOdds": And(int, lambda n: n >= 0), + "PlusOdds": And(int, lambda n: n >= 0) + }, + "ForbiddenTome": { + "MinusOdds": And(int, lambda n: n >= 0), + "NormalOdds": And(int, lambda n: n >= 0), + "PlusOdds": And(int, lambda n: n >= 0) + }, + "Shattered": { + "MinusOdds": And(int, lambda n: n >= 0), + "NormalOdds": And(int, lambda n: n >= 0), + "PlusOdds": And(int, lambda n: n >= 0) + }, + "Nether": { + "MinusOdds": And(int, lambda n: n >= 0), + "NormalOdds": And(int, lambda n: n >= 0), + "PlusOdds": And(int, lambda n: n >= 0) + }, + "Radiant": { + "MinusOdds": And(int, lambda n: n >= 0), + "NormalOdds": And(int, lambda n: n >= 0), + "PlusOdds": And(int, lambda n: n >= 0) + }, + }) + display_name = "Damage Rando Overrides" + default = { + "Blue": { "MinusOdds": 1, "NormalOdds": 1, "PlusOdds": 1 }, + "Blade": { "MinusOdds": 1, "NormalOdds": 1, "PlusOdds": 1 }, + "Fire": { "MinusOdds": 1, "NormalOdds": 1, "PlusOdds": 1 }, + "Plasma": { "MinusOdds": 1, "NormalOdds": 1, "PlusOdds": 1 }, + "Iron": { "MinusOdds": 1, "NormalOdds": 1, "PlusOdds": 1 }, + "Ice": { "MinusOdds": 1, "NormalOdds": 1, "PlusOdds": 1 }, + "Wind": { "MinusOdds": 1, "NormalOdds": 1, "PlusOdds": 1 }, + "Gun": { "MinusOdds": 1, "NormalOdds": 1, "PlusOdds": 1 }, + "Umbra": { "MinusOdds": 1, "NormalOdds": 1, "PlusOdds": 1 }, + "Empire": { "MinusOdds": 1, "NormalOdds": 1, "PlusOdds": 1 }, + "Eye": { "MinusOdds": 1, "NormalOdds": 1, "PlusOdds": 1 }, + "Blood": { "MinusOdds": 1, "NormalOdds": 1, "PlusOdds": 1 }, + "ForbiddenTome": { "MinusOdds": 1, "NormalOdds": 1, "PlusOdds": 1 }, + "Shattered": { "MinusOdds": 1, "NormalOdds": 1, "PlusOdds": 1 }, + "Nether": { "MinusOdds": 1, "NormalOdds": 1, "PlusOdds": 1 }, + "Radiant": { "MinusOdds": 1, "NormalOdds": 1, "PlusOdds": 1 }, + } class ShopFill(Choice): """Sets the items for sale in Merchant Crow's shops. @@ -111,6 +223,7 @@ timespinner_options: Dict[str, Option] = { "Cantoran": Cantoran, "LoreChecks": LoreChecks, "DamageRando": DamageRando, + "DamageRandoOverrides": DamageRandoOverrides, "ShopFill": ShopFill, "ShopWarpShards": ShopWarpShards, "ShopMultiplier": ShopMultiplier, @@ -122,10 +235,9 @@ timespinner_options: Dict[str, Option] = { def is_option_enabled(world: MultiWorld, player: int, name: str) -> bool: return get_option_value(world, player, name) > 0 -def get_option_value(world: MultiWorld, player: int, name: str) -> int: +def get_option_value(world: MultiWorld, player: int, name: str) -> Union[int, dict]: option = getattr(world, name, None) - if option == None: return 0 - return int(option[player].value) + return option[player].value \ No newline at end of file From 98ca001da6ebda8d8f4cb013c8cf7b1c32b7dd7f Mon Sep 17 00:00:00 2001 From: CaitSith2 Date: Fri, 13 May 2022 08:16:29 -0700 Subject: [PATCH 068/149] Fix for variable progression balancing when yaml has progression on/off. --- Options.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Options.py b/Options.py index 2ce42289ba..6bfbac89d7 100644 --- a/Options.py +++ b/Options.py @@ -409,9 +409,9 @@ class Range(NumericOption): raise Exception(f"random text \"{text}\" did not resolve to a recognized pattern. Acceptable values are: random, random-high, random-middle, random-low, random-range-low--, random-range-middle--, random-range-high--, or random-range--.") elif text == "default" and hasattr(cls, "default"): return cls(cls.default) - elif text == "high": + elif text in ["high", "true"]: return cls(cls.range_end) - elif text == "low": + elif text in ["low", "false"]: return cls(cls.range_start) return cls(int(text)) From 89b4060a060af7deaa8b2b9a6a5ac1f0a8fbb65a Mon Sep 17 00:00:00 2001 From: CaitSith2 Date: Fri, 13 May 2022 08:19:12 -0700 Subject: [PATCH 069/149] Fix Plando options pickling error --- WebHostLib/api/generate.py | 1 + 1 file changed, 1 insertion(+) diff --git a/WebHostLib/api/generate.py b/WebHostLib/api/generate.py index faad50e1c6..e01514d9e8 100644 --- a/WebHostLib/api/generate.py +++ b/WebHostLib/api/generate.py @@ -50,6 +50,7 @@ def generate_api(): return {"text": str(results), "detail": results}, 400 else: + meta["plando_options"] = list(meta.get("plando_options", [])) gen = Generation( options=pickle.dumps({name: vars(options) for name, options in gen_options.items()}), # convert to json compatible From b41f44401390ec315b571e752ec0d2018a4f0e1a Mon Sep 17 00:00:00 2001 From: metzner Date: Sat, 14 May 2022 04:28:20 +0200 Subject: [PATCH 070/149] Logic Fix (Potentially gamebreaking) --- worlds/witness/WitnessLogic.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/worlds/witness/WitnessLogic.txt b/worlds/witness/WitnessLogic.txt index e17f13338f..f163f4e0f4 100644 --- a/worlds/witness/WitnessLogic.txt +++ b/worlds/witness/WitnessLogic.txt @@ -555,7 +555,7 @@ Inside Mountain Top Layer (Inside Mountain) - Mountaintop - 0x17C34: Inside Mountain Top Layer Bridge (Inside Mountain) - Inside Mountain Top Layer - 0x09E39: 0x09E7A (Obscured Vision 1) - True - Obscured & Squares & Black/White Squares & Dots 0x09E71 (Obscured Vision 2) - 0x09E7A - Obscured & Squares & Black/White Squares & Dots -0x09E72 (Obscured Vision 3) - 0x09E71 - Obscured & Squares & Black/White Squares & Rotated Shapers & Dots +0x09E72 (Obscured Vision 3) - 0x09E71 - Obscured & Squares & Black/White Squares & Shapers & Dots 0x09E69 (Obscured Vision 4) - 0x09E72 - Obscured & Squares & Black/White Squares & Dots 0x09E7B (Obscured Vision 5) - 0x09E69 - Obscured & Squares & Black/White Squares & Dots 0x09E73 (Moving Background 1) - True - Moving & Stars & Squares & Black/White Squares & Stars + Same Colored Symbol From 00f5975a3cfafcec4b211d3f7a8312a7ab86a6b2 Mon Sep 17 00:00:00 2001 From: black-sliver <59490463+black-sliver@users.noreply.github.com> Date: Sat, 14 May 2022 10:59:47 +0200 Subject: [PATCH 071/149] CI: build release AppImage on ubuntu-18.04 Change to oldest available container to maximize compatibility --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 83d7f78ca4..f9cbc48274 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -26,7 +26,7 @@ jobs: # build-release-macos: # LF volunteer build-release-ubuntu1804: - runs-on: ubuntu-latest + runs-on: ubuntu-18.04 steps: - name: Set env run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV From dc10421531aa8c7780f2f5229655e657f974ceb0 Mon Sep 17 00:00:00 2001 From: PoryGone <98504756+PoryGone@users.noreply.github.com> Date: Sat, 14 May 2022 06:00:49 -0400 Subject: [PATCH 072/149] Sonic Adventure 2: Battle Implementation (#501) --- README.md | 1 + worlds/sa2b/Items.py | 76 +++ worlds/sa2b/Locations.py | 277 +++++++++ worlds/sa2b/Names/ItemName.py | 39 ++ worlds/sa2b/Names/LocationName.py | 264 ++++++++ worlds/sa2b/Options.py | 77 +++ worlds/sa2b/Regions.py | 579 ++++++++++++++++++ worlds/sa2b/Rules.py | 396 ++++++++++++ worlds/sa2b/__init__.py | 223 +++++++ .../sa2b/docs/en_Sonic Adventure 2 Battle.md | 30 + worlds/sa2b/docs/setup_en.md | 88 +++ 11 files changed, 2050 insertions(+) create mode 100644 worlds/sa2b/Items.py create mode 100644 worlds/sa2b/Locations.py create mode 100644 worlds/sa2b/Names/ItemName.py create mode 100644 worlds/sa2b/Names/LocationName.py create mode 100644 worlds/sa2b/Options.py create mode 100644 worlds/sa2b/Regions.py create mode 100644 worlds/sa2b/Rules.py create mode 100644 worlds/sa2b/__init__.py create mode 100644 worlds/sa2b/docs/en_Sonic Adventure 2 Battle.md create mode 100644 worlds/sa2b/docs/setup_en.md diff --git a/README.md b/README.md index 98caa273a2..e073c383f3 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,7 @@ Currently, the following games are supported: * ArchipIDLE * Hollow Knight * The Witness +* Sonic Adventure 2: Battle For setup and instructions check out our [tutorials page](https://archipelago.gg/tutorial/). Downloads can be found at [Releases](https://github.com/ArchipelagoMW/Archipelago/releases), including compiled diff --git a/worlds/sa2b/Items.py b/worlds/sa2b/Items.py new file mode 100644 index 0000000000..0d1f60ce63 --- /dev/null +++ b/worlds/sa2b/Items.py @@ -0,0 +1,76 @@ +import typing + +from BaseClasses import Item +from .Names import ItemName + + +class ItemData(typing.NamedTuple): + code: typing.Optional[int] + progression: bool + quantity: int = 1 + event: bool = False + + +class SA2BItem(Item): + game: str = "Sonic Adventure 2: Battle" + + def __init__(self, name, advancement: bool = False, code: int = None, player: int = None): + super(SA2BItem, self).__init__(name, advancement, code, player) + + if self.name == ItemName.sonic_light_shoes or self.name == ItemName.shadow_air_shoes: + self.pedestal_credit_text = "and the Soap Shoes" + + +# Separate tables for each type of item. +emblems_table = { + ItemName.emblem: ItemData(0xFF0000, True), +} + +upgrades_table = { + ItemName.sonic_gloves: ItemData(0xFF0001, False), + ItemName.sonic_light_shoes: ItemData(0xFF0002, True), + ItemName.sonic_ancient_light: ItemData(0xFF0003, False), + ItemName.sonic_bounce_bracelet: ItemData(0xFF0004, True), + ItemName.sonic_flame_ring: ItemData(0xFF0005, True), + ItemName.sonic_mystic_melody: ItemData(0xFF0006, True), + + ItemName.tails_laser_blaster: ItemData(0xFF0007, False), + ItemName.tails_booster: ItemData(0xFF0008, True), + ItemName.tails_mystic_melody: ItemData(0xFF0009, True), + ItemName.tails_bazooka: ItemData(0xFF000A, True), + + ItemName.knuckles_mystic_melody: ItemData(0xFF000B, True), + ItemName.knuckles_shovel_claws: ItemData(0xFF000C, True), + ItemName.knuckles_air_necklace: ItemData(0xFF000D, True), + ItemName.knuckles_hammer_gloves: ItemData(0xFF000E, True), + ItemName.knuckles_sunglasses: ItemData(0xFF000F, True), + + ItemName.shadow_flame_ring: ItemData(0xFF0010, True), + ItemName.shadow_air_shoes: ItemData(0xFF0011, True), + ItemName.shadow_ancient_light: ItemData(0xFF0012, False), + ItemName.shadow_mystic_melody: ItemData(0xFF0013, True), + + ItemName.eggman_laser_blaster: ItemData(0xFF0014, False), + ItemName.eggman_mystic_melody: ItemData(0xFF0015, True), + ItemName.eggman_jet_engine: ItemData(0xFF0016, True), + ItemName.eggman_large_cannon: ItemData(0xFF0017, True), + ItemName.eggman_protective_armor: ItemData(0xFF0018, False), + + ItemName.rouge_mystic_melody: ItemData(0xFF0019, True), + ItemName.rouge_pick_nails: ItemData(0xFF001A, True), + ItemName.rouge_treasure_scope: ItemData(0xFF001B, True), + ItemName.rouge_iron_boots: ItemData(0xFF001C, True), +} + +event_table = { + ItemName.maria: ItemData(0xFF001D, True), +} + +# Complete item table. +item_table = { + **emblems_table, + **upgrades_table, + **event_table, +} + +lookup_id_to_name: typing.Dict[int, str] = {data.code: item_name for item_name, data in item_table.items() if data.code} diff --git a/worlds/sa2b/Locations.py b/worlds/sa2b/Locations.py new file mode 100644 index 0000000000..11c301f891 --- /dev/null +++ b/worlds/sa2b/Locations.py @@ -0,0 +1,277 @@ +import typing + +from BaseClasses import Location +from .Names import LocationName + + +class SA2BLocation(Location): + game: str = "Sonic Adventure 2: Battle" + + +first_mission_location_table = { + LocationName.city_escape_1: 0xFF0000, + LocationName.wild_canyon_1: 0xFF0001, + LocationName.prison_lane_1: 0xFF0002, + LocationName.metal_harbor_1: 0xFF0003, + LocationName.green_forest_1: 0xFF0004, + LocationName.pumpkin_hill_1: 0xFF0005, + LocationName.mission_street_1: 0xFF0006, + LocationName.aquatic_mine_1: 0xFF0007, + LocationName.route_101_1: 0xFF0008, + LocationName.hidden_base_1: 0xFF0009, + LocationName.pyramid_cave_1: 0xFF000A, + LocationName.death_chamber_1: 0xFF000B, + LocationName.eternal_engine_1: 0xFF000C, + LocationName.meteor_herd_1: 0xFF000D, + LocationName.crazy_gadget_1: 0xFF000E, + LocationName.final_rush_1: 0xFF000F, + + LocationName.iron_gate_1: 0xFF0010, + LocationName.dry_lagoon_1: 0xFF0011, + LocationName.sand_ocean_1: 0xFF0012, + LocationName.radical_highway_1: 0xFF0013, + LocationName.egg_quarters_1: 0xFF0014, + LocationName.lost_colony_1: 0xFF0015, + LocationName.weapons_bed_1: 0xFF0016, + LocationName.security_hall_1: 0xFF0017, + LocationName.white_jungle_1: 0xFF0018, + LocationName.route_280_1: 0xFF0019, + LocationName.sky_rail_1: 0xFF001A, + LocationName.mad_space_1: 0xFF001B, + LocationName.cosmic_wall_1: 0xFF001C, + LocationName.final_chase_1: 0xFF001D, + + LocationName.cannon_core_1: 0xFF001E, +} + +second_mission_location_table = { + LocationName.city_escape_2: 0xFF0020, + LocationName.wild_canyon_2: 0xFF0021, + LocationName.prison_lane_2: 0xFF0022, + LocationName.metal_harbor_2: 0xFF0023, + LocationName.green_forest_2: 0xFF0024, + LocationName.pumpkin_hill_2: 0xFF0025, + LocationName.mission_street_2: 0xFF0026, + LocationName.aquatic_mine_2: 0xFF0027, + LocationName.route_101_2: 0xFF0028, + LocationName.hidden_base_2: 0xFF0029, + LocationName.pyramid_cave_2: 0xFF002A, + LocationName.death_chamber_2: 0xFF002B, + LocationName.eternal_engine_2: 0xFF002C, + LocationName.meteor_herd_2: 0xFF002D, + LocationName.crazy_gadget_2: 0xFF002E, + LocationName.final_rush_2: 0xFF002F, + + LocationName.iron_gate_2: 0xFF0030, + LocationName.dry_lagoon_2: 0xFF0031, + LocationName.sand_ocean_2: 0xFF0032, + LocationName.radical_highway_2: 0xFF0033, + LocationName.egg_quarters_2: 0xFF0034, + LocationName.lost_colony_2: 0xFF0035, + LocationName.weapons_bed_2: 0xFF0036, + LocationName.security_hall_2: 0xFF0037, + LocationName.white_jungle_2: 0xFF0038, + LocationName.route_280_2: 0xFF0039, + LocationName.sky_rail_2: 0xFF003A, + LocationName.mad_space_2: 0xFF003B, + LocationName.cosmic_wall_2: 0xFF003C, + LocationName.final_chase_2: 0xFF003D, + + LocationName.cannon_core_2: 0xFF003E, +} + +third_mission_location_table = { + LocationName.city_escape_3: 0xFF0040, + LocationName.wild_canyon_3: 0xFF0041, + LocationName.prison_lane_3: 0xFF0042, + LocationName.metal_harbor_3: 0xFF0043, + LocationName.green_forest_3: 0xFF0044, + LocationName.pumpkin_hill_3: 0xFF0045, + LocationName.mission_street_3: 0xFF0046, + LocationName.aquatic_mine_3: 0xFF0047, + LocationName.route_101_3: 0xFF0048, + LocationName.hidden_base_3: 0xFF0049, + LocationName.pyramid_cave_3: 0xFF004A, + LocationName.death_chamber_3: 0xFF004B, + LocationName.eternal_engine_3: 0xFF004C, + LocationName.meteor_herd_3: 0xFF004D, + LocationName.crazy_gadget_3: 0xFF004E, + LocationName.final_rush_3: 0xFF004F, + + LocationName.iron_gate_3: 0xFF0050, + LocationName.dry_lagoon_3: 0xFF0051, + LocationName.sand_ocean_3: 0xFF0052, + LocationName.radical_highway_3: 0xFF0053, + LocationName.egg_quarters_3: 0xFF0054, + LocationName.lost_colony_3: 0xFF0055, + LocationName.weapons_bed_3: 0xFF0056, + LocationName.security_hall_3: 0xFF0057, + LocationName.white_jungle_3: 0xFF0058, + LocationName.route_280_3: 0xFF0059, + LocationName.sky_rail_3: 0xFF005A, + LocationName.mad_space_3: 0xFF005B, + LocationName.cosmic_wall_3: 0xFF005C, + LocationName.final_chase_3: 0xFF005D, + + LocationName.cannon_core_3: 0xFF005E, +} + +fourth_mission_location_table = { + LocationName.city_escape_4: 0xFF0060, + LocationName.wild_canyon_4: 0xFF0061, + LocationName.prison_lane_4: 0xFF0062, + LocationName.metal_harbor_4: 0xFF0063, + LocationName.green_forest_4: 0xFF0064, + LocationName.pumpkin_hill_4: 0xFF0065, + LocationName.mission_street_4: 0xFF0066, + LocationName.aquatic_mine_4: 0xFF0067, + LocationName.route_101_4: 0xFF0068, + LocationName.hidden_base_4: 0xFF0069, + LocationName.pyramid_cave_4: 0xFF006A, + LocationName.death_chamber_4: 0xFF006B, + LocationName.eternal_engine_4: 0xFF006C, + LocationName.meteor_herd_4: 0xFF006D, + LocationName.crazy_gadget_4: 0xFF006E, + LocationName.final_rush_4: 0xFF006F, + + LocationName.iron_gate_4: 0xFF0070, + LocationName.dry_lagoon_4: 0xFF0071, + LocationName.sand_ocean_4: 0xFF0072, + LocationName.radical_highway_4: 0xFF0073, + LocationName.egg_quarters_4: 0xFF0074, + LocationName.lost_colony_4: 0xFF0075, + LocationName.weapons_bed_4: 0xFF0076, + LocationName.security_hall_4: 0xFF0077, + LocationName.white_jungle_4: 0xFF0078, + LocationName.route_280_4: 0xFF0079, + LocationName.sky_rail_4: 0xFF007A, + LocationName.mad_space_4: 0xFF007B, + LocationName.cosmic_wall_4: 0xFF007C, + LocationName.final_chase_4: 0xFF007D, + + LocationName.cannon_core_4: 0xFF007E, +} + +fifth_mission_location_table = { + LocationName.city_escape_5: 0xFF0080, + LocationName.wild_canyon_5: 0xFF0081, + LocationName.prison_lane_5: 0xFF0082, + LocationName.metal_harbor_5: 0xFF0083, + LocationName.green_forest_5: 0xFF0084, + LocationName.pumpkin_hill_5: 0xFF0085, + LocationName.mission_street_5: 0xFF0086, + LocationName.aquatic_mine_5: 0xFF0087, + LocationName.route_101_5: 0xFF0088, + LocationName.hidden_base_5: 0xFF0089, + LocationName.pyramid_cave_5: 0xFF008A, + LocationName.death_chamber_5: 0xFF008B, + LocationName.eternal_engine_5: 0xFF008C, + LocationName.meteor_herd_5: 0xFF008D, + LocationName.crazy_gadget_5: 0xFF008E, + LocationName.final_rush_5: 0xFF008F, + + LocationName.iron_gate_5: 0xFF0090, + LocationName.dry_lagoon_5: 0xFF0091, + LocationName.sand_ocean_5: 0xFF0092, + LocationName.radical_highway_5: 0xFF0093, + LocationName.egg_quarters_5: 0xFF0094, + LocationName.lost_colony_5: 0xFF0095, + LocationName.weapons_bed_5: 0xFF0096, + LocationName.security_hall_5: 0xFF0097, + LocationName.white_jungle_5: 0xFF0098, + LocationName.route_280_5: 0xFF0099, + LocationName.sky_rail_5: 0xFF009A, + LocationName.mad_space_5: 0xFF009B, + LocationName.cosmic_wall_5: 0xFF009C, + LocationName.final_chase_5: 0xFF009D, + + LocationName.cannon_core_5: 0xFF009E, +} + +upgrade_location_table = { + LocationName.city_escape_upgrade: 0xFF00A0, + LocationName.wild_canyon_upgrade: 0xFF00A1, + LocationName.prison_lane_upgrade: 0xFF00A2, + LocationName.metal_harbor_upgrade: 0xFF00A3, + LocationName.green_forest_upgrade: 0xFF00A4, + LocationName.pumpkin_hill_upgrade: 0xFF00A5, + LocationName.mission_street_upgrade: 0xFF00A6, + LocationName.aquatic_mine_upgrade: 0xFF00A7, + LocationName.hidden_base_upgrade: 0xFF00A9, + LocationName.pyramid_cave_upgrade: 0xFF00AA, + LocationName.death_chamber_upgrade: 0xFF00AB, + LocationName.eternal_engine_upgrade: 0xFF00AC, + LocationName.meteor_herd_upgrade: 0xFF00AD, + LocationName.crazy_gadget_upgrade: 0xFF00AE, + LocationName.final_rush_upgrade: 0xFF00AF, + + LocationName.iron_gate_upgrade: 0xFF00B0, + LocationName.dry_lagoon_upgrade: 0xFF00B1, + LocationName.sand_ocean_upgrade: 0xFF00B2, + LocationName.radical_highway_upgrade: 0xFF00B3, + LocationName.egg_quarters_upgrade: 0xFF00B4, + LocationName.lost_colony_upgrade: 0xFF00B5, + LocationName.weapons_bed_upgrade: 0xFF00B6, + LocationName.security_hall_upgrade: 0xFF00B7, + LocationName.white_jungle_upgrade: 0xFF00B8, + LocationName.sky_rail_upgrade: 0xFF00BA, + LocationName.mad_space_upgrade: 0xFF00BB, + LocationName.cosmic_wall_upgrade: 0xFF00BC, + LocationName.final_chase_upgrade: 0xFF00BD, +} + +chao_garden_location_table = { + LocationName.chao_beginner_race: 0xFF00C0, + LocationName.chao_jewel_race: 0xFF00C1, + LocationName.chao_challenge_race: 0xFF00C2, + LocationName.chao_hero_race: 0xFF00C3, + LocationName.chao_dark_race: 0xFF00C4, + + LocationName.chao_beginner_karate: 0xFF00C5, + LocationName.chao_standard_karate: 0xFF00C6, + LocationName.chao_expert_karate: 0xFF00C7, + LocationName.chao_super_karate: 0xFF00C8, +} + +other_location_table = { + # LocationName.green_hill: 0xFF001F, + LocationName.biolizard: 0xFF003F, +} + +all_locations = { + **first_mission_location_table, + **second_mission_location_table, + **third_mission_location_table, + **fourth_mission_location_table, + **fifth_mission_location_table, + **upgrade_location_table, + **chao_garden_location_table, + **other_location_table, +} + +location_table = {} + + +def setup_locations(world, player: int): + location_table = {**first_mission_location_table} + + if world.IncludeMissions[player].value >= 2: + location_table.update({**second_mission_location_table}) + + if world.IncludeMissions[player].value >= 3: + location_table.update({**third_mission_location_table}) + + if world.IncludeMissions[player].value >= 4: + location_table.update({**fourth_mission_location_table}) + + if world.IncludeMissions[player].value >= 5: + location_table.update({**fifth_mission_location_table}) + + location_table.update({**upgrade_location_table}) + # location_table.update(**chao_garden_location_table}) + location_table.update({**other_location_table}) + + return location_table + + +lookup_id_to_name: typing.Dict[int, str] = {id: name for name, _ in all_locations.items()} diff --git a/worlds/sa2b/Names/ItemName.py b/worlds/sa2b/Names/ItemName.py new file mode 100644 index 0000000000..db6cc30425 --- /dev/null +++ b/worlds/sa2b/Names/ItemName.py @@ -0,0 +1,39 @@ +# Emblem Definition +emblem = "Emblem" + +# Upgrade Definitions +sonic_gloves = "Sonic - Magic Glove" +sonic_light_shoes = "Sonic - Light Shoes" +sonic_ancient_light = "Sonic - Ancient Light" +sonic_bounce_bracelet = "Sonic - Bounce Bracelet" +sonic_flame_ring = "Sonic - Flame Ring" +sonic_mystic_melody = "Sonic - Mystic Melody" + +tails_laser_blaster = "Tails - Laser Blaster" +tails_booster = "Tails - Booster" +tails_mystic_melody = "Tails - Mystic Melody" +tails_bazooka = "Tails - Bazooka" + +knuckles_mystic_melody = "Knuckles - Mystic Melody" +knuckles_shovel_claws = "Knuckles - Shovel Claws" +knuckles_air_necklace = "Knuckles - Air Necklace" +knuckles_hammer_gloves = "Knuckles - Hammer Gloves" +knuckles_sunglasses = "Knuckles - Sunglasses" + +shadow_flame_ring = "Shadow - Flame Ring" +shadow_air_shoes = "Shadow - Air Shoes" +shadow_ancient_light = "Shadow - Ancient Light" +shadow_mystic_melody = "Shadow - Mystic Melody" + +eggman_laser_blaster = "Eggman - Laser Blaster" +eggman_mystic_melody = "Eggman - Mystic Melody" +eggman_jet_engine = "Eggman - Jet Engine" +eggman_large_cannon = "Eggman - Large Cannon" +eggman_protective_armor = "Eggman - Protective Armor" + +rouge_mystic_melody = "Rouge - Mystic Melody" +rouge_pick_nails = "Rouge - Pick Nails" +rouge_treasure_scope = "Rouge - Treasure Scope" +rouge_iron_boots = "Rouge - Iron Boots" + +maria = "What Maria Wanted" diff --git a/worlds/sa2b/Names/LocationName.py b/worlds/sa2b/Names/LocationName.py new file mode 100644 index 0000000000..cf9721d3cf --- /dev/null +++ b/worlds/sa2b/Names/LocationName.py @@ -0,0 +1,264 @@ +# Sonic Mission Definitions +city_escape_1 = "City Escape - 1" +city_escape_2 = "City Escape - 2" +city_escape_3 = "City Escape - 3" +city_escape_4 = "City Escape - 4" +city_escape_5 = "City Escape - 5" +city_escape_upgrade = "City Escape - Upgrade" +metal_harbor_1 = "Metal Harbor - 1" +metal_harbor_2 = "Metal Harbor - 2" +metal_harbor_3 = "Metal Harbor - 3" +metal_harbor_4 = "Metal Harbor - 4" +metal_harbor_5 = "Metal Harbor - 5" +metal_harbor_upgrade = "Metal Harbor - Upgrade" +green_forest_1 = "Green Forest - 1" +green_forest_2 = "Green Forest - 2" +green_forest_3 = "Green Forest - 3" +green_forest_4 = "Green Forest - 4" +green_forest_5 = "Green Forest - 5" +green_forest_upgrade = "Green Forest - Upgrade" +pyramid_cave_1 = "Pyramid Cave - 1" +pyramid_cave_2 = "Pyramid Cave - 2" +pyramid_cave_3 = "Pyramid Cave - 3" +pyramid_cave_4 = "Pyramid Cave - 4" +pyramid_cave_5 = "Pyramid Cave - 5" +pyramid_cave_upgrade = "Pyramid Cave - Upgrade" +crazy_gadget_1 = "Crazy Gadget - 1" +crazy_gadget_2 = "Crazy Gadget - 2" +crazy_gadget_3 = "Crazy Gadget - 3" +crazy_gadget_4 = "Crazy Gadget - 4" +crazy_gadget_5 = "Crazy Gadget - 5" +crazy_gadget_upgrade = "Crazy Gadget - Upgrade" +final_rush_1 = "Final Rush - 1" +final_rush_2 = "Final Rush - 2" +final_rush_3 = "Final Rush - 3" +final_rush_4 = "Final Rush - 4" +final_rush_5 = "Final Rush - 5" +final_rush_upgrade = "Final Rush - Upgrade" + +# Tails Mission Definitions +prison_lane_1 = "Prison Lane - 1" +prison_lane_2 = "Prison Lane - 2" +prison_lane_3 = "Prison Lane - 3" +prison_lane_4 = "Prison Lane - 4" +prison_lane_5 = "Prison Lane - 5" +prison_lane_upgrade = "Prison Lane - Upgrade" +mission_street_1 = "Mission Street - 1" +mission_street_2 = "Mission Street - 2" +mission_street_3 = "Mission Street - 3" +mission_street_4 = "Mission Street - 4" +mission_street_5 = "Mission Street - 5" +mission_street_upgrade = "Mission Street - Upgrade" +route_101_1 = "Route 101 - 1" +route_101_2 = "Route 101 - 2" +route_101_3 = "Route 101 - 3" +route_101_4 = "Route 101 - 4" +route_101_5 = "Route 101 - 5" +hidden_base_1 = "Hidden Base - 1" +hidden_base_2 = "Hidden Base - 2" +hidden_base_3 = "Hidden Base - 3" +hidden_base_4 = "Hidden Base - 4" +hidden_base_5 = "Hidden Base - 5" +hidden_base_upgrade = "Hidden Base - Upgrade" +eternal_engine_1 = "Eternal Engine - 1" +eternal_engine_2 = "Eternal Engine - 2" +eternal_engine_3 = "Eternal Engine - 3" +eternal_engine_4 = "Eternal Engine - 4" +eternal_engine_5 = "Eternal Engine - 5" +eternal_engine_upgrade = "Eternal Engine - Upgrade" + +# Knuckles Mission Definitions +wild_canyon_1 = "Wild Canyon - 1" +wild_canyon_2 = "Wild Canyon - 2" +wild_canyon_3 = "Wild Canyon - 3" +wild_canyon_4 = "Wild Canyon - 4" +wild_canyon_5 = "Wild Canyon - 5" +wild_canyon_upgrade = "Wild Canyon - Upgrade" +pumpkin_hill_1 = "Pumpkin Hill - 1" +pumpkin_hill_2 = "Pumpkin Hill - 2" +pumpkin_hill_3 = "Pumpkin Hill - 3" +pumpkin_hill_4 = "Pumpkin Hill - 4" +pumpkin_hill_5 = "Pumpkin Hill - 5" +pumpkin_hill_upgrade = "Pumpkin Hill - Upgrade" +aquatic_mine_1 = "Aquatic Mine - 1" +aquatic_mine_2 = "Aquatic Mine - 2" +aquatic_mine_3 = "Aquatic Mine - 3" +aquatic_mine_4 = "Aquatic Mine - 4" +aquatic_mine_5 = "Aquatic Mine - 5" +aquatic_mine_upgrade = "Aquatic Mine - Upgrade" +death_chamber_1 = "Death Chamber - 1" +death_chamber_2 = "Death Chamber - 2" +death_chamber_3 = "Death Chamber - 3" +death_chamber_4 = "Death Chamber - 4" +death_chamber_5 = "Death Chamber - 5" +death_chamber_upgrade = "Death Chamber - Upgrade" +meteor_herd_1 = "Meteor Herd - 1" +meteor_herd_2 = "Meteor Herd - 2" +meteor_herd_3 = "Meteor Herd - 3" +meteor_herd_4 = "Meteor Herd - 4" +meteor_herd_5 = "Meteor Herd - 5" +meteor_herd_upgrade = "Meteor Herd - Upgrade" + + +# Shadow Mission Definitions +radical_highway_1 = "Radical Highway - 1" +radical_highway_2 = "Radical Highway - 2" +radical_highway_3 = "Radical Highway - 3" +radical_highway_4 = "Radical Highway - 4" +radical_highway_5 = "Radical Highway - 5" +radical_highway_upgrade = "Radical Highway - Upgrade" +white_jungle_1 = "White Jungle - 1" +white_jungle_2 = "White Jungle - 2" +white_jungle_3 = "White Jungle - 3" +white_jungle_4 = "White Jungle - 4" +white_jungle_5 = "White Jungle - 5" +white_jungle_upgrade = "White Jungle - Upgrade" +sky_rail_1 = "Sky Rail - 1" +sky_rail_2 = "Sky Rail - 2" +sky_rail_3 = "Sky Rail - 3" +sky_rail_4 = "Sky Rail - 4" +sky_rail_5 = "Sky Rail - 5" +sky_rail_upgrade = "Sky Rail - Upgrade" +final_chase_1 = "Final Chase - 1" +final_chase_2 = "Final Chase - 2" +final_chase_3 = "Final Chase - 3" +final_chase_4 = "Final Chase - 4" +final_chase_5 = "Final Chase - 5" +final_chase_upgrade = "Final Chase - Upgrade" + +# Eggman Mission Definitions +iron_gate_1 = "Iron Gate - 1" +iron_gate_2 = "Iron Gate - 2" +iron_gate_3 = "Iron Gate - 3" +iron_gate_4 = "Iron Gate - 4" +iron_gate_5 = "Iron Gate - 5" +iron_gate_upgrade = "Iron Gate - Upgrade" +sand_ocean_1 = "Sand Ocean - 1" +sand_ocean_2 = "Sand Ocean - 2" +sand_ocean_3 = "Sand Ocean - 3" +sand_ocean_4 = "Sand Ocean - 4" +sand_ocean_5 = "Sand Ocean - 5" +sand_ocean_upgrade = "Sand Ocean - Upgrade" +lost_colony_1 = "Lost Colony - 1" +lost_colony_2 = "Lost Colony - 2" +lost_colony_3 = "Lost Colony - 3" +lost_colony_4 = "Lost Colony - 4" +lost_colony_5 = "Lost Colony - 5" +lost_colony_upgrade = "Lost Colony - Upgrade" +weapons_bed_1 = "Weapons Bed - 1" +weapons_bed_2 = "Weapons Bed - 2" +weapons_bed_3 = "Weapons Bed - 3" +weapons_bed_4 = "Weapons Bed - 4" +weapons_bed_5 = "Weapons Bed - 5" +weapons_bed_upgrade = "Weapons Bed - Upgrade" +cosmic_wall_1 = "Cosmic Wall - 1" +cosmic_wall_2 = "Cosmic Wall - 2" +cosmic_wall_3 = "Cosmic Wall - 3" +cosmic_wall_4 = "Cosmic Wall - 4" +cosmic_wall_5 = "Cosmic Wall - 5" +cosmic_wall_upgrade = "Cosmic Wall - Upgrade" + +# Rouge Mission Definitions +dry_lagoon_1 = "Dry Lagoon - 1" +dry_lagoon_2 = "Dry Lagoon - 2" +dry_lagoon_3 = "Dry Lagoon - 3" +dry_lagoon_4 = "Dry Lagoon - 4" +dry_lagoon_5 = "Dry Lagoon - 5" +dry_lagoon_upgrade = "Dry Lagoon - Upgrade" +egg_quarters_1 = "Egg Quarters - 1" +egg_quarters_2 = "Egg Quarters - 2" +egg_quarters_3 = "Egg Quarters - 3" +egg_quarters_4 = "Egg Quarters - 4" +egg_quarters_5 = "Egg Quarters - 5" +egg_quarters_upgrade = "Egg Quarters - Upgrade" +security_hall_1 = "Security Hall - 1" +security_hall_2 = "Security Hall - 2" +security_hall_3 = "Security Hall - 3" +security_hall_4 = "Security Hall - 4" +security_hall_5 = "Security Hall - 5" +security_hall_upgrade = "Security Hall - Upgrade" +route_280_1 = "Route 280 - 1" +route_280_2 = "Route 280 - 2" +route_280_3 = "Route 280 - 3" +route_280_4 = "Route 280 - 4" +route_280_5 = "Route 280 - 5" +mad_space_1 = "Mad Space - 1" +mad_space_2 = "Mad Space - 2" +mad_space_3 = "Mad Space - 3" +mad_space_4 = "Mad Space - 4" +mad_space_5 = "Mad Space - 5" +mad_space_upgrade = "Mad Space - Upgrade" + +# Final Mission Definitions +cannon_core_1 = "Cannon Core - 1" +cannon_core_2 = "Cannon Core - 2" +cannon_core_3 = "Cannon Core - 3" +cannon_core_4 = "Cannon Core - 4" +cannon_core_5 = "Cannon Core - 5" + +# Chao Garden Definitions +chao_beginner_race = "Chao Garden - Beginner Race" +chao_jewel_race = "Chao Garden - Jewel Race" +chao_challenge_race = "Chao Garden - Challenge Race" +chao_hero_race = "Chao Garden - Hero Race" +chao_dark_race = "Chao Garden - Dark Race" +chao_beginner_karate = "Chao Garden - Beginner Karate" +chao_standard_karate = "Chao Garden - Standard Karate" +chao_expert_karate = "Chao Garden - Expert Karate" +chao_super_karate = "Chao Garden - Super Karate" + +# Other Definitions +green_hill = "Green Hill" +biolizard = "Biolizard" + + +# Region Definitions +menu_region = "Menu" +gate_0_region = "Gate 0" +gate_1_region = "Gate 1" +gate_2_region = "Gate 2" +gate_3_region = "Gate 3" +gate_4_region = "Gate 4" +gate_5_region = "Gate 5" + +city_escape_region = "City Escape" +metal_harbor_region = "Metal Harbor" +green_forest_region = "Green Forest" +pyramid_cave_region = "Pyramid Cave" +crazy_gadget_region = "Crazy Gadget" +final_rush_region = "Final Rush" + +prison_lane_region = "Prison Lane" +mission_street_region = "Mission Street" +route_101_region = "Route 101" +hidden_base_region = "Hidden Base" +eternal_engine_region = "Eternal Engine" + +wild_canyon_region = "Wild Canyon" +pumpkin_hill_region = "Pumpkin Hill" +aquatic_mine_region = "Aquatic Mine" +death_chamber_region = "Death Chamber" +meteor_herd_region = "Meteor Herd" + +radical_highway_region = "Radical Highway" +white_jungle_region = "White Jungle" +sky_rail_region = "Sky Rail" +final_chase_region = "Final Chase" + +iron_gate_region = "Iron Gate" +sand_ocean_region = "Sand Ocean" +lost_colony_region = "Lost Colony" +weapons_bed_region = "Weapons Bed" +cosmic_wall_region = "Cosmic Wall" + +dry_lagoon_region = "Dry Lagoon" +egg_quarters_region = "Egg Quarters" +security_hall_region = "Security Hall" +route_280_region = "Route 280" +mad_space_region = "Mad Space" + +cannon_core_region = "Cannon Core" + +biolizard_region = "Biolizard" + +chao_garden_region = "Chao Garden" diff --git a/worlds/sa2b/Options.py b/worlds/sa2b/Options.py new file mode 100644 index 0000000000..ea1306c3f7 --- /dev/null +++ b/worlds/sa2b/Options.py @@ -0,0 +1,77 @@ +import typing + +from Options import Choice, Range, Option, Toggle, DeathLink, DefaultOnToggle, OptionList + + +class IncludeMissions(Range): + """ + Allows logic to place items in a range of Missions for each level + Each mission setting includes lower settings + 1: Base Story Missions + 2: 100 Ring Missions + 3: Lost Chao Missions + 4: Timer Missions + 5: Hard Mode Missions + """ + display_name = "Include Missions" + range_start = 1 + range_end = 5 + default = 2 + + +class EmblemPercentageForCannonsCore(Range): + """ + Allows logic to gate the final mission behind a number of Emblems + """ + display_name = "Emblem Percentage for Cannons Core" + range_start = 0 + range_end = 75 + default = 50 + + +class NumberOfLevelGates(Range): + """ + Allows logic to gate some levels behind emblem requirements + """ + display_name = "Number of Level Gates" + range_start = 0 + range_end = 5 + default = 3 + + +class LevelGateDistribution(Choice): + """ + Determines how levels are distributed between level gate regions + Early: Earlier regions will have more levels than later regions + Even: Levels will be evenly distributed between all regions + Late: Later regions will have more levels than earlier regions + """ + display_name = "Level Gate Distribution" + option_early = 0 + option_even = 1 + option_late = 2 + default = 1 + + +class MusicShuffle(Choice): + """ + What type of Music Shuffle is used + Off: No music is shuffled. + Levels: Level music is shuffled. + Full: Level, Menu, and Additional music is shuffled. + """ + display_name = "Music Shuffle Type" + option_none = 0 + option_levels = 1 + option_full = 2 + default = 0 + + +sa2b_options: typing.Dict[str, type(Option)] = { + "DeathLink": DeathLink, + "MusicShuffle": MusicShuffle, + "IncludeMissions": IncludeMissions, + "EmblemPercentageForCannonsCore": EmblemPercentageForCannonsCore, + "NumberOfLevelGates": NumberOfLevelGates, + "LevelGateDistribution": LevelGateDistribution, +} diff --git a/worlds/sa2b/Regions.py b/worlds/sa2b/Regions.py new file mode 100644 index 0000000000..aa13fd8a69 --- /dev/null +++ b/worlds/sa2b/Regions.py @@ -0,0 +1,579 @@ +import typing + +from BaseClasses import MultiWorld, Region, Entrance +from .Items import SA2BItem +from .Locations import SA2BLocation +from .Names import LocationName, ItemName + + +class LevelGate: + gate_levels: typing.List[int] + gate_emblem_count: int + + def __init__(self, emblems): + self.gate_emblem_count = emblems + self.gate_levels = list() + + +shuffleable_regions = [ + LocationName.city_escape_region, + LocationName.wild_canyon_region, + LocationName.prison_lane_region, + LocationName.metal_harbor_region, + LocationName.green_forest_region, + LocationName.pumpkin_hill_region, + LocationName.mission_street_region, + LocationName.aquatic_mine_region, + LocationName.route_101_region, + LocationName.hidden_base_region, + LocationName.pyramid_cave_region, + LocationName.death_chamber_region, + LocationName.eternal_engine_region, + LocationName.meteor_herd_region, + LocationName.crazy_gadget_region, + LocationName.final_rush_region, + LocationName.iron_gate_region, + LocationName.dry_lagoon_region, + LocationName.sand_ocean_region, + LocationName.radical_highway_region, + LocationName.egg_quarters_region, + LocationName.lost_colony_region, + LocationName.weapons_bed_region, + LocationName.security_hall_region, + LocationName.white_jungle_region, + LocationName.route_280_region, + LocationName.sky_rail_region, + LocationName.mad_space_region, + LocationName.cosmic_wall_region, + LocationName.final_chase_region, +] + +gate_0_blacklist_regions = [ + LocationName.hidden_base_region, + LocationName.eternal_engine_region, + LocationName.crazy_gadget_region, + LocationName.security_hall_region, + LocationName.cosmic_wall_region, +] + +gate_0_whitelist_regions = [ + LocationName.city_escape_region, + LocationName.wild_canyon_region, + LocationName.prison_lane_region, + LocationName.metal_harbor_region, + LocationName.green_forest_region, + LocationName.pumpkin_hill_region, + LocationName.mission_street_region, + LocationName.aquatic_mine_region, + LocationName.route_101_region, + LocationName.pyramid_cave_region, + LocationName.death_chamber_region, + LocationName.meteor_herd_region, + LocationName.final_rush_region, + LocationName.iron_gate_region, + LocationName.dry_lagoon_region, + LocationName.sand_ocean_region, + LocationName.radical_highway_region, + LocationName.egg_quarters_region, + LocationName.lost_colony_region, + LocationName.weapons_bed_region, + LocationName.white_jungle_region, + LocationName.route_280_region, + LocationName.sky_rail_region, + LocationName.mad_space_region, + LocationName.final_chase_region, +] + + +def create_regions(world, player: int, active_locations): + menu_region = create_region(world, player, active_locations, 'Menu', None, None) + gate_0_region = create_region(world, player, active_locations, 'Gate 0', None, None) + gate_1_region = create_region(world, player, active_locations, 'Gate 1', None, None) + gate_2_region = create_region(world, player, active_locations, 'Gate 2', None, None) + gate_3_region = create_region(world, player, active_locations, 'Gate 3', None, None) + gate_4_region = create_region(world, player, active_locations, 'Gate 4', None, None) + gate_5_region = create_region(world, player, active_locations, 'Gate 5', None, None) + + city_escape_region_locations = [ + LocationName.city_escape_1, + LocationName.city_escape_2, + LocationName.city_escape_3, + LocationName.city_escape_4, + LocationName.city_escape_5, + LocationName.city_escape_upgrade, + ] + city_escape_region = create_region(world, player, active_locations, LocationName.city_escape_region, + city_escape_region_locations, None) + + metal_harbor_region_locations = [ + LocationName.metal_harbor_1, + LocationName.metal_harbor_2, + LocationName.metal_harbor_3, + LocationName.metal_harbor_4, + LocationName.metal_harbor_5, + LocationName.metal_harbor_upgrade, + ] + metal_harbor_region = create_region(world, player, active_locations, LocationName.metal_harbor_region, + metal_harbor_region_locations, None) + + green_forest_region_locations = [ + LocationName.green_forest_1, + LocationName.green_forest_2, + LocationName.green_forest_3, + LocationName.green_forest_4, + LocationName.green_forest_5, + LocationName.green_forest_upgrade, + ] + green_forest_region = create_region(world, player, active_locations, LocationName.green_forest_region, + green_forest_region_locations, None) + + pyramid_cave_region_locations = [ + LocationName.pyramid_cave_1, + LocationName.pyramid_cave_2, + LocationName.pyramid_cave_3, + LocationName.pyramid_cave_4, + LocationName.pyramid_cave_5, + LocationName.pyramid_cave_upgrade, + ] + pyramid_cave_region = create_region(world, player, active_locations, LocationName.pyramid_cave_region, + pyramid_cave_region_locations, None) + + crazy_gadget_region_locations = [ + LocationName.crazy_gadget_1, + LocationName.crazy_gadget_2, + LocationName.crazy_gadget_3, + LocationName.crazy_gadget_4, + LocationName.crazy_gadget_5, + LocationName.crazy_gadget_upgrade, + ] + crazy_gadget_region = create_region(world, player, active_locations, LocationName.crazy_gadget_region, + crazy_gadget_region_locations, None) + + final_rush_region_locations = [ + LocationName.final_rush_1, + LocationName.final_rush_2, + LocationName.final_rush_3, + LocationName.final_rush_4, + LocationName.final_rush_5, + LocationName.final_rush_upgrade, + ] + final_rush_region = create_region(world, player, active_locations, LocationName.final_rush_region, + final_rush_region_locations, None) + + prison_lane_region_locations = [ + LocationName.prison_lane_1, + LocationName.prison_lane_2, + LocationName.prison_lane_3, + LocationName.prison_lane_4, + LocationName.prison_lane_5, + LocationName.prison_lane_upgrade, + ] + prison_lane_region = create_region(world, player, active_locations, LocationName.prison_lane_region, + prison_lane_region_locations, None) + + mission_street_region_locations = [ + LocationName.mission_street_1, + LocationName.mission_street_2, + LocationName.mission_street_3, + LocationName.mission_street_4, + LocationName.mission_street_5, + LocationName.mission_street_upgrade, + ] + mission_street_region = create_region(world, player, active_locations, LocationName.mission_street_region, + mission_street_region_locations, None) + + route_101_region_locations = [ + LocationName.route_101_1, + LocationName.route_101_2, + LocationName.route_101_3, + LocationName.route_101_4, + LocationName.route_101_5, + ] + route_101_region = create_region(world, player, active_locations, LocationName.route_101_region, + route_101_region_locations, None) + + hidden_base_region_locations = [ + LocationName.hidden_base_1, + LocationName.hidden_base_2, + LocationName.hidden_base_3, + LocationName.hidden_base_4, + LocationName.hidden_base_5, + LocationName.hidden_base_upgrade, + ] + hidden_base_region = create_region(world, player, active_locations, LocationName.hidden_base_region, + hidden_base_region_locations, None) + + eternal_engine_region_locations = [ + LocationName.eternal_engine_1, + LocationName.eternal_engine_2, + LocationName.eternal_engine_3, + LocationName.eternal_engine_4, + LocationName.eternal_engine_5, + LocationName.eternal_engine_upgrade, + ] + eternal_engine_region = create_region(world, player, active_locations, LocationName.eternal_engine_region, + eternal_engine_region_locations, None) + + wild_canyon_region_locations = [ + LocationName.wild_canyon_1, + LocationName.wild_canyon_2, + LocationName.wild_canyon_3, + LocationName.wild_canyon_4, + LocationName.wild_canyon_5, + LocationName.wild_canyon_upgrade, + ] + wild_canyon_region = create_region(world, player, active_locations, LocationName.wild_canyon_region, + wild_canyon_region_locations, None) + + pumpkin_hill_region_locations = [ + LocationName.pumpkin_hill_1, + LocationName.pumpkin_hill_2, + LocationName.pumpkin_hill_3, + LocationName.pumpkin_hill_4, + LocationName.pumpkin_hill_5, + LocationName.pumpkin_hill_upgrade, + ] + pumpkin_hill_region = create_region(world, player, active_locations, LocationName.pumpkin_hill_region, + pumpkin_hill_region_locations, None) + + aquatic_mine_region_locations = [ + LocationName.aquatic_mine_1, + LocationName.aquatic_mine_2, + LocationName.aquatic_mine_3, + LocationName.aquatic_mine_4, + LocationName.aquatic_mine_5, + LocationName.aquatic_mine_upgrade, + ] + aquatic_mine_region = create_region(world, player, active_locations, LocationName.aquatic_mine_region, + aquatic_mine_region_locations, None) + + death_chamber_region_locations = [ + LocationName.death_chamber_1, + LocationName.death_chamber_2, + LocationName.death_chamber_3, + LocationName.death_chamber_4, + LocationName.death_chamber_5, + LocationName.death_chamber_upgrade, + ] + death_chamber_region = create_region(world, player, active_locations, LocationName.death_chamber_region, + death_chamber_region_locations, None) + + meteor_herd_region_locations = [ + LocationName.meteor_herd_1, + LocationName.meteor_herd_2, + LocationName.meteor_herd_3, + LocationName.meteor_herd_4, + LocationName.meteor_herd_5, + LocationName.meteor_herd_upgrade, + ] + meteor_herd_region = create_region(world, player, active_locations, LocationName.meteor_herd_region, + meteor_herd_region_locations, None) + + radical_highway_region_locations = [ + LocationName.radical_highway_1, + LocationName.radical_highway_2, + LocationName.radical_highway_3, + LocationName.radical_highway_4, + LocationName.radical_highway_5, + LocationName.radical_highway_upgrade, + ] + radical_highway_region = create_region(world, player, active_locations, LocationName.radical_highway_region, + radical_highway_region_locations, None) + + white_jungle_region_locations = [ + LocationName.white_jungle_1, + LocationName.white_jungle_2, + LocationName.white_jungle_3, + LocationName.white_jungle_4, + LocationName.white_jungle_5, + LocationName.white_jungle_upgrade, + ] + white_jungle_region = create_region(world, player, active_locations, LocationName.white_jungle_region, + white_jungle_region_locations, None) + + sky_rail_region_locations = [ + LocationName.sky_rail_1, + LocationName.sky_rail_2, + LocationName.sky_rail_3, + LocationName.sky_rail_4, + LocationName.sky_rail_5, + LocationName.sky_rail_upgrade, + ] + sky_rail_region = create_region(world, player, active_locations, LocationName.sky_rail_region, + sky_rail_region_locations, None) + + final_chase_region_locations = [ + LocationName.final_chase_1, + LocationName.final_chase_2, + LocationName.final_chase_3, + LocationName.final_chase_4, + LocationName.final_chase_5, + LocationName.final_chase_upgrade, + ] + final_chase_region = create_region(world, player, active_locations, LocationName.final_chase_region, + final_chase_region_locations, None) + + iron_gate_region_locations = [ + LocationName.iron_gate_1, + LocationName.iron_gate_2, + LocationName.iron_gate_3, + LocationName.iron_gate_4, + LocationName.iron_gate_5, + LocationName.iron_gate_upgrade, + ] + iron_gate_region = create_region(world, player, active_locations, LocationName.iron_gate_region, + iron_gate_region_locations, None) + + sand_ocean_region_locations = [ + LocationName.sand_ocean_1, + LocationName.sand_ocean_2, + LocationName.sand_ocean_3, + LocationName.sand_ocean_4, + LocationName.sand_ocean_5, + LocationName.sand_ocean_upgrade, + ] + sand_ocean_region = create_region(world, player, active_locations, LocationName.sand_ocean_region, + sand_ocean_region_locations, None) + + lost_colony_region_locations = [ + LocationName.lost_colony_1, + LocationName.lost_colony_2, + LocationName.lost_colony_3, + LocationName.lost_colony_4, + LocationName.lost_colony_5, + LocationName.lost_colony_upgrade, + ] + lost_colony_region = create_region(world, player, active_locations, LocationName.lost_colony_region, + lost_colony_region_locations, None) + + weapons_bed_region_locations = [ + LocationName.weapons_bed_1, + LocationName.weapons_bed_2, + LocationName.weapons_bed_3, + LocationName.weapons_bed_4, + LocationName.weapons_bed_5, + LocationName.weapons_bed_upgrade, + ] + weapons_bed_region = create_region(world, player, active_locations, LocationName.weapons_bed_region, + weapons_bed_region_locations, None) + + cosmic_wall_region_locations = [ + LocationName.cosmic_wall_1, + LocationName.cosmic_wall_2, + LocationName.cosmic_wall_3, + LocationName.cosmic_wall_4, + LocationName.cosmic_wall_5, + LocationName.cosmic_wall_upgrade, + ] + cosmic_wall_region = create_region(world, player, active_locations, LocationName.cosmic_wall_region, + cosmic_wall_region_locations, None) + + dry_lagoon_region_locations = [ + LocationName.dry_lagoon_1, + LocationName.dry_lagoon_2, + LocationName.dry_lagoon_3, + LocationName.dry_lagoon_4, + LocationName.dry_lagoon_5, + LocationName.dry_lagoon_upgrade, + ] + dry_lagoon_region = create_region(world, player, active_locations, LocationName.dry_lagoon_region, + dry_lagoon_region_locations, None) + + egg_quarters_region_locations = [ + LocationName.egg_quarters_1, + LocationName.egg_quarters_2, + LocationName.egg_quarters_3, + LocationName.egg_quarters_4, + LocationName.egg_quarters_5, + LocationName.egg_quarters_upgrade, + ] + egg_quarters_region = create_region(world, player, active_locations, LocationName.egg_quarters_region, + egg_quarters_region_locations, None) + + security_hall_region_locations = [ + LocationName.security_hall_1, + LocationName.security_hall_2, + LocationName.security_hall_3, + LocationName.security_hall_4, + LocationName.security_hall_5, + LocationName.security_hall_upgrade, + ] + security_hall_region = create_region(world, player, active_locations, LocationName.security_hall_region, + security_hall_region_locations, None) + + route_280_region_locations = [ + LocationName.route_280_1, + LocationName.route_280_2, + LocationName.route_280_3, + LocationName.route_280_4, + LocationName.route_280_5, + ] + route_280_region = create_region(world, player, active_locations, LocationName.route_280_region, + route_280_region_locations, None) + + mad_space_region_locations = [ + LocationName.mad_space_1, + LocationName.mad_space_2, + LocationName.mad_space_3, + LocationName.mad_space_4, + LocationName.mad_space_5, + LocationName.mad_space_upgrade, + ] + mad_space_region = create_region(world, player, active_locations, LocationName.mad_space_region, + mad_space_region_locations, None) + + cannon_core_region_locations = [ + LocationName.cannon_core_1, + LocationName.cannon_core_2, + LocationName.cannon_core_3, + LocationName.cannon_core_4, + LocationName.cannon_core_5, + ] + cannon_core_region = create_region(world, player, active_locations, LocationName.cannon_core_region, + cannon_core_region_locations, None) + + chao_garden_region_locations = [ + LocationName.chao_beginner_race, + LocationName.chao_jewel_race, + LocationName.chao_challenge_race, + LocationName.chao_hero_race, + LocationName.chao_dark_race, + LocationName.chao_beginner_karate, + LocationName.chao_standard_karate, + LocationName.chao_expert_karate, + LocationName.chao_super_karate, + ] + chao_garden_region = create_region(world, player, active_locations, LocationName.chao_garden_region, + chao_garden_region_locations, None) + + biolizard_region_locations = [ + LocationName.biolizard, + ] + biolizard_region = create_region(world, player, active_locations, LocationName.biolizard_region, + biolizard_region_locations, None) + + # Set up the regions correctly. + world.regions += [ + menu_region, + gate_0_region, + gate_1_region, + gate_2_region, + gate_3_region, + gate_4_region, + gate_5_region, + city_escape_region, + metal_harbor_region, + green_forest_region, + pyramid_cave_region, + crazy_gadget_region, + final_rush_region, + prison_lane_region, + mission_street_region, + route_101_region, + hidden_base_region, + eternal_engine_region, + wild_canyon_region, + pumpkin_hill_region, + aquatic_mine_region, + death_chamber_region, + meteor_herd_region, + radical_highway_region, + white_jungle_region, + sky_rail_region, + final_chase_region, + iron_gate_region, + sand_ocean_region, + lost_colony_region, + weapons_bed_region, + cosmic_wall_region, + dry_lagoon_region, + egg_quarters_region, + security_hall_region, + route_280_region, + mad_space_region, + cannon_core_region, + chao_garden_region, + biolizard_region, + ] + + +def connect_regions(world, player, gates: typing.List[LevelGate], cannon_core_emblems): + names: typing.Dict[str, int] = {} + + connect(world, player, names, 'Menu', LocationName.gate_0_region) + connect(world, player, names, LocationName.gate_0_region, LocationName.cannon_core_region, + lambda state: (state.has(ItemName.emblem, player, cannon_core_emblems))) + + connect(world, player, names, LocationName.cannon_core_region, LocationName.biolizard_region, + lambda state: (state.can_reach(LocationName.cannon_core_1, "Location", player))) + + for i in range(len(gates[0].gate_levels)): + connect(world, player, names, LocationName.gate_0_region, shuffleable_regions[gates[0].gate_levels[i]]) + + if len(gates) >= 2: + connect(world, player, names, 'Menu', LocationName.gate_1_region, + lambda state: (state.has(ItemName.emblem, player, gates[1].gate_emblem_count))) + for i in range(len(gates[1].gate_levels)): + connect(world, player, names, LocationName.gate_1_region, shuffleable_regions[gates[1].gate_levels[i]]) + + if len(gates) >= 3: + connect(world, player, names, 'Menu', LocationName.gate_2_region, + lambda state: (state.has(ItemName.emblem, player, gates[2].gate_emblem_count))) + for i in range(len(gates[2].gate_levels)): + connect(world, player, names, LocationName.gate_2_region, shuffleable_regions[gates[2].gate_levels[i]]) + + if len(gates) >= 4: + connect(world, player, names, 'Menu', LocationName.gate_3_region, + lambda state: (state.has(ItemName.emblem, player, gates[3].gate_emblem_count))) + for i in range(len(gates[3].gate_levels)): + connect(world, player, names, LocationName.gate_3_region, shuffleable_regions[gates[3].gate_levels[i]]) + + if len(gates) >= 5: + connect(world, player, names, 'Menu', LocationName.gate_4_region, + lambda state: (state.has(ItemName.emblem, player, gates[4].gate_emblem_count))) + for i in range(len(gates[4].gate_levels)): + connect(world, player, names, LocationName.gate_4_region, shuffleable_regions[gates[4].gate_levels[i]]) + + if len(gates) >= 6: + connect(world, player, names, 'Menu', LocationName.gate_5_region, + lambda state: (state.has(ItemName.emblem, player, gates[5].gate_emblem_count))) + for i in range(len(gates[5].gate_levels)): + connect(world, player, names, LocationName.gate_5_region, shuffleable_regions[gates[5].gate_levels[i]]) + + +def create_region(world: MultiWorld, player: int, active_locations, name: str, locations=None, exits=None): + # Shamelessly stolen from the ROR2 definition + ret = Region(name, None, name, player) + ret.world = world + if locations: + for location in locations: + loc_id = active_locations.get(location, 0) + if loc_id: + location = SA2BLocation(player, location, loc_id, ret) + ret.locations.append(location) + if exits: + for exit in exits: + ret.exits.append(Entrance(player, exit, ret)) + + return ret + + +def connect(world: MultiWorld, player: int, used_names: typing.Dict[str, int], source: str, target: str, + rule: typing.Optional[typing.Callable] = None): + source_region = world.get_region(source, player) + target_region = world.get_region(target, player) + + if target not in used_names: + used_names[target] = 1 + name = target + else: + used_names[target] += 1 + name = target + (' ' * used_names[target]) + + connection = Entrance(player, name, source_region) + + if rule: + connection.access_rule = rule + + source_region.exits.append(connection) + connection.connect(target_region) diff --git a/worlds/sa2b/Rules.py b/worlds/sa2b/Rules.py new file mode 100644 index 0000000000..9720e1b531 --- /dev/null +++ b/worlds/sa2b/Rules.py @@ -0,0 +1,396 @@ +from BaseClasses import MultiWorld +from .Names import LocationName, ItemName +from .Locations import first_mission_location_table, second_mission_location_table, third_mission_location_table, \ + fourth_mission_location_table, fifth_mission_location_table, \ + upgrade_location_table, chao_garden_location_table +from ..AutoWorld import LogicMixin +from ..generic.Rules import add_rule, set_rule + + +def set_mission_progress_rules(world: MultiWorld, player: int): + for (k1, v1), (k2, v2), (k3, v3), (k4, v4), (k5, v5) in \ + zip(sorted(first_mission_location_table.items()), + sorted(second_mission_location_table.items()), + sorted(third_mission_location_table.items()), + sorted(fourth_mission_location_table.items()), + sorted(fifth_mission_location_table.items())): + + if world.IncludeMissions[player].value >= 2: + set_rule(world.get_location(k2, player), lambda state, k1=k1: state.can_reach(k1, "Location", player)) + + if world.IncludeMissions[player].value >= 3: + set_rule(world.get_location(k3, player), lambda state, k2=k2: state.can_reach(k2, "Location", player)) + + if world.IncludeMissions[player].value >= 4: + set_rule(world.get_location(k4, player), lambda state, k3=k3: state.can_reach(k3, "Location", player)) + + if world.IncludeMissions[player].value >= 5: + set_rule(world.get_location(k5, player), lambda state, k4=k4: state.can_reach(k4, "Location", player)) + + +def set_mission_upgrade_rules(world: MultiWorld, player: int): + # Mission 1 Upgrade Requirements + add_rule(world.get_location(LocationName.metal_harbor_1, player), + lambda state: state.has(ItemName.sonic_light_shoes, player)) + add_rule(world.get_location(LocationName.pumpkin_hill_1, player), + lambda state: state.has(ItemName.knuckles_shovel_claws, player)) + add_rule(world.get_location(LocationName.mission_street_1, player), + lambda state: state.has(ItemName.tails_booster, player)) + add_rule(world.get_location(LocationName.aquatic_mine_1, player), + lambda state: state.has(ItemName.knuckles_shovel_claws, player)) + add_rule(world.get_location(LocationName.hidden_base_1, player), + lambda state: state.has(ItemName.tails_booster, player)) + add_rule(world.get_location(LocationName.pyramid_cave_1, player), + lambda state: state.has(ItemName.sonic_bounce_bracelet, player)) + add_rule(world.get_location(LocationName.death_chamber_1, player), + lambda state: state.has(ItemName.knuckles_shovel_claws, player) and + state.has(ItemName.knuckles_hammer_gloves, player)) + add_rule(world.get_location(LocationName.eternal_engine_1, player), + lambda state: state.has(ItemName.tails_booster, player) and + state.has(ItemName.tails_bazooka, player)) + add_rule(world.get_location(LocationName.meteor_herd_1, player), + lambda state: state.has(ItemName.knuckles_shovel_claws, player) and + state.has(ItemName.knuckles_hammer_gloves, player)) + add_rule(world.get_location(LocationName.crazy_gadget_1, player), + lambda state: state.has(ItemName.sonic_light_shoes, player) and + state.has(ItemName.sonic_bounce_bracelet, player) and + state.has(ItemName.sonic_flame_ring, player)) + add_rule(world.get_location(LocationName.final_rush_1, player), + lambda state: state.has(ItemName.sonic_bounce_bracelet, player)) + + add_rule(world.get_location(LocationName.egg_quarters_1, player), + lambda state: state.has(ItemName.rouge_pick_nails, player)) + add_rule(world.get_location(LocationName.lost_colony_1, player), + lambda state: state.has(ItemName.eggman_jet_engine, player)) + add_rule(world.get_location(LocationName.weapons_bed_1, player), + lambda state: state.has(ItemName.eggman_jet_engine, player) and + state.has(ItemName.eggman_large_cannon, player)) + add_rule(world.get_location(LocationName.security_hall_1, player), + lambda state: state.has(ItemName.rouge_pick_nails, player)) + add_rule(world.get_location(LocationName.white_jungle_1, player), + lambda state: state.has(ItemName.shadow_air_shoes, player)) + add_rule(world.get_location(LocationName.mad_space_1, player), + lambda state: state.has(ItemName.rouge_pick_nails, player) and + state.has(ItemName.rouge_iron_boots, player)) + add_rule(world.get_location(LocationName.cosmic_wall_1, player), + lambda state: state.has(ItemName.eggman_jet_engine, player)) + + add_rule(world.get_location(LocationName.cannon_core_1, player), + lambda state: state.has(ItemName.tails_booster, player) and + state.has(ItemName.eggman_jet_engine, player) and + state.has(ItemName.knuckles_hammer_gloves, player) and + state.has(ItemName.knuckles_air_necklace, player) and + state.has(ItemName.sonic_bounce_bracelet, player)) + + # Mission 2 Upgrade Requirements + if world.IncludeMissions[player].value >= 2: + add_rule(world.get_location(LocationName.metal_harbor_2, player), + lambda state: state.has(ItemName.sonic_light_shoes, player)) + add_rule(world.get_location(LocationName.mission_street_2, player), + lambda state: state.has(ItemName.tails_booster, player)) + add_rule(world.get_location(LocationName.hidden_base_2, player), + lambda state: state.has(ItemName.tails_booster, player)) + add_rule(world.get_location(LocationName.death_chamber_2, player), + lambda state: state.has(ItemName.knuckles_shovel_claws, player) and + state.has(ItemName.knuckles_hammer_gloves, player)) + add_rule(world.get_location(LocationName.eternal_engine_2, player), + lambda state: state.has(ItemName.tails_booster, player) and + state.has(ItemName.tails_bazooka, player)) + add_rule(world.get_location(LocationName.crazy_gadget_2, player), + lambda state: state.has(ItemName.sonic_bounce_bracelet, player)) + + add_rule(world.get_location(LocationName.lost_colony_2, player), + lambda state: state.has(ItemName.eggman_jet_engine, player)) + add_rule(world.get_location(LocationName.weapons_bed_2, player), + lambda state: state.has(ItemName.eggman_jet_engine, player) and + state.has(ItemName.eggman_large_cannon, player)) + add_rule(world.get_location(LocationName.security_hall_2, player), + lambda state: state.has(ItemName.rouge_pick_nails, player)) + add_rule(world.get_location(LocationName.mad_space_2, player), + lambda state: state.has(ItemName.rouge_iron_boots, player)) + add_rule(world.get_location(LocationName.cosmic_wall_2, player), + lambda state: state.has(ItemName.eggman_jet_engine, player)) + + add_rule(world.get_location(LocationName.cannon_core_2, player), + lambda state: state.has(ItemName.tails_booster, player) and + state.has(ItemName.eggman_jet_engine, player)) + + # Mission 3 Upgrade Requirements + if world.IncludeMissions[player].value >= 3: + add_rule(world.get_location(LocationName.city_escape_3, player), + lambda state: state.has(ItemName.sonic_mystic_melody, player)) + add_rule(world.get_location(LocationName.wild_canyon_3, player), + lambda state: state.has(ItemName.knuckles_shovel_claws, player) and + state.has(ItemName.knuckles_hammer_gloves, player) and + state.has(ItemName.knuckles_mystic_melody, player)) + add_rule(world.get_location(LocationName.prison_lane_3, player), + lambda state: state.has(ItemName.tails_booster, player) and + state.has(ItemName.tails_mystic_melody, player)) + add_rule(world.get_location(LocationName.metal_harbor_3, player), + lambda state: state.has(ItemName.sonic_light_shoes, player) and + state.has(ItemName.sonic_bounce_bracelet, player) and + state.has(ItemName.sonic_mystic_melody, player)) + add_rule(world.get_location(LocationName.green_forest_3, player), + lambda state: state.has(ItemName.sonic_bounce_bracelet, player) and + state.has(ItemName.sonic_mystic_melody, player)) + add_rule(world.get_location(LocationName.pumpkin_hill_3, player), + lambda state: state.has(ItemName.knuckles_mystic_melody, player)) + add_rule(world.get_location(LocationName.mission_street_3, player), + lambda state: state.has(ItemName.tails_booster, player) and + state.has(ItemName.tails_mystic_melody, player)) + add_rule(world.get_location(LocationName.aquatic_mine_3, player), + lambda state: state.has(ItemName.knuckles_mystic_melody, player)) + add_rule(world.get_location(LocationName.hidden_base_3, player), + lambda state: state.has(ItemName.tails_booster, player) and + state.has(ItemName.tails_mystic_melody, player)) + add_rule(world.get_location(LocationName.pyramid_cave_3, player), + lambda state: state.has(ItemName.sonic_bounce_bracelet, player) and + state.has(ItemName.sonic_mystic_melody, player)) + add_rule(world.get_location(LocationName.death_chamber_3, player), + lambda state: state.has(ItemName.knuckles_mystic_melody, player) and + state.has(ItemName.knuckles_air_necklace, player) and + state.has(ItemName.knuckles_hammer_gloves, player)) + add_rule(world.get_location(LocationName.eternal_engine_3, player), + lambda state: state.has(ItemName.tails_booster, player) and + state.has(ItemName.tails_mystic_melody, player)) + add_rule(world.get_location(LocationName.meteor_herd_3, player), + lambda state: state.has(ItemName.knuckles_mystic_melody, player)) + add_rule(world.get_location(LocationName.crazy_gadget_3, player), + lambda state: state.has(ItemName.sonic_light_shoes, player) and + state.has(ItemName.sonic_bounce_bracelet, player) and + state.has(ItemName.sonic_flame_ring, player) and + state.has(ItemName.sonic_mystic_melody, player)) + add_rule(world.get_location(LocationName.final_rush_3, player), + lambda state: state.has(ItemName.sonic_light_shoes, player) and + state.has(ItemName.sonic_bounce_bracelet, player) and + state.has(ItemName.sonic_mystic_melody, player)) + + add_rule(world.get_location(LocationName.iron_gate_3, player), + lambda state: state.has(ItemName.eggman_mystic_melody, player) and + state.has(ItemName.eggman_jet_engine, player) and + state.has(ItemName.eggman_large_cannon, player)) + add_rule(world.get_location(LocationName.dry_lagoon_3, player), + lambda state: state.has(ItemName.rouge_mystic_melody, player) and + state.has(ItemName.rouge_pick_nails, player) and + state.has(ItemName.rouge_iron_boots, player)) + add_rule(world.get_location(LocationName.sand_ocean_3, player), + lambda state: state.has(ItemName.eggman_jet_engine, player) and + state.has(ItemName.eggman_large_cannon, player)) + add_rule(world.get_location(LocationName.radical_highway_3, player), + lambda state: state.has(ItemName.shadow_mystic_melody, player)) + add_rule(world.get_location(LocationName.egg_quarters_3, player), + lambda state: state.has(ItemName.rouge_mystic_melody, player) and + state.has(ItemName.rouge_pick_nails, player) and + state.has(ItemName.rouge_iron_boots, player)) + add_rule(world.get_location(LocationName.lost_colony_3, player), + lambda state: state.has(ItemName.eggman_mystic_melody, player) and + state.has(ItemName.eggman_jet_engine, player)) + add_rule(world.get_location(LocationName.weapons_bed_3, player), + lambda state: state.has(ItemName.eggman_mystic_melody, player) and + state.has(ItemName.eggman_jet_engine, player) and + state.has(ItemName.eggman_large_cannon, player)) + add_rule(world.get_location(LocationName.security_hall_3, player), + lambda state: state.has(ItemName.rouge_treasure_scope, player)) + add_rule(world.get_location(LocationName.white_jungle_3, player), + lambda state: state.has(ItemName.shadow_air_shoes, player) and + state.has(ItemName.shadow_mystic_melody, player)) + add_rule(world.get_location(LocationName.sky_rail_3, player), + lambda state: state.has(ItemName.shadow_air_shoes, player) and + state.has(ItemName.shadow_mystic_melody, player)) + add_rule(world.get_location(LocationName.mad_space_3, player), + lambda state: state.has(ItemName.rouge_mystic_melody, player) and + state.has(ItemName.rouge_iron_boots, player)) + add_rule(world.get_location(LocationName.cosmic_wall_3, player), + lambda state: state.has(ItemName.eggman_mystic_melody, player) and + state.has(ItemName.eggman_jet_engine, player)) + add_rule(world.get_location(LocationName.final_chase_3, player), + lambda state: state.has(ItemName.shadow_air_shoes, player) and + state.has(ItemName.shadow_mystic_melody, player)) + + add_rule(world.get_location(LocationName.cannon_core_3, player), + lambda state: state.has(ItemName.tails_booster, player) and + state.has(ItemName.eggman_mystic_melody, player) and + state.has(ItemName.eggman_jet_engine, player) and + state.has(ItemName.eggman_large_cannon, player) and + state.has(ItemName.rouge_mystic_melody, player) and + state.has(ItemName.knuckles_mystic_melody, player) and + state.has(ItemName.knuckles_hammer_gloves, player) and + state.has(ItemName.knuckles_air_necklace, player) and + state.has(ItemName.sonic_bounce_bracelet, player) and + state.has(ItemName.sonic_light_shoes, player)) + + # Mission 4 Upgrade Requirements + if world.IncludeMissions[player].value >= 4: + add_rule(world.get_location(LocationName.metal_harbor_4, player), + lambda state: state.has(ItemName.sonic_light_shoes, player)) + add_rule(world.get_location(LocationName.pumpkin_hill_4, player), + lambda state: state.has(ItemName.knuckles_shovel_claws, player)) + add_rule(world.get_location(LocationName.mission_street_4, player), + lambda state: state.has(ItemName.tails_booster, player)) + add_rule(world.get_location(LocationName.aquatic_mine_4, player), + lambda state: state.has(ItemName.knuckles_shovel_claws, player)) + add_rule(world.get_location(LocationName.hidden_base_4, player), + lambda state: state.has(ItemName.tails_booster, player)) + add_rule(world.get_location(LocationName.pyramid_cave_4, player), + lambda state: state.has(ItemName.sonic_bounce_bracelet, player)) + add_rule(world.get_location(LocationName.death_chamber_4, player), + lambda state: state.has(ItemName.knuckles_shovel_claws, player) and + state.has(ItemName.knuckles_hammer_gloves, player)) + add_rule(world.get_location(LocationName.eternal_engine_4, player), + lambda state: state.has(ItemName.tails_booster, player) and + state.has(ItemName.tails_bazooka, player)) + add_rule(world.get_location(LocationName.meteor_herd_4, player), + lambda state: state.has(ItemName.knuckles_shovel_claws, player) and + state.has(ItemName.knuckles_hammer_gloves, player)) + add_rule(world.get_location(LocationName.crazy_gadget_4, player), + lambda state: state.has(ItemName.sonic_light_shoes, player) and + state.has(ItemName.sonic_bounce_bracelet, player) and + state.has(ItemName.sonic_flame_ring, player)) + add_rule(world.get_location(LocationName.final_rush_4, player), + lambda state: state.has(ItemName.sonic_bounce_bracelet, player)) + + add_rule(world.get_location(LocationName.egg_quarters_4, player), + lambda state: state.has(ItemName.rouge_pick_nails, player)) + add_rule(world.get_location(LocationName.lost_colony_4, player), + lambda state: state.has(ItemName.eggman_jet_engine, player)) + add_rule(world.get_location(LocationName.weapons_bed_4, player), + lambda state: state.has(ItemName.eggman_jet_engine, player) and + state.has(ItemName.eggman_large_cannon, player)) + add_rule(world.get_location(LocationName.security_hall_4, player), + lambda state: state.has(ItemName.rouge_pick_nails, player)) + add_rule(world.get_location(LocationName.white_jungle_4, player), + lambda state: state.has(ItemName.shadow_air_shoes, player)) + add_rule(world.get_location(LocationName.mad_space_4, player), + lambda state: state.has(ItemName.rouge_pick_nails, player) and + state.has(ItemName.rouge_iron_boots, player)) + add_rule(world.get_location(LocationName.cosmic_wall_4, player), + lambda state: state.has(ItemName.eggman_jet_engine, player)) + + add_rule(world.get_location(LocationName.cannon_core_4, player), + lambda state: state.has(ItemName.tails_booster, player) and + state.has(ItemName.eggman_jet_engine, player) and + state.has(ItemName.knuckles_hammer_gloves, player) and + state.has(ItemName.knuckles_air_necklace, player) and + state.has(ItemName.sonic_bounce_bracelet, player)) + + # Mission 5 Upgrade Requirements + if world.IncludeMissions[player].value >= 5: + add_rule(world.get_location(LocationName.city_escape_5, player), + lambda state: state.has(ItemName.sonic_flame_ring, player)) + add_rule(world.get_location(LocationName.wild_canyon_5, player), + lambda state: state.has(ItemName.knuckles_shovel_claws, player) and + state.has(ItemName.knuckles_sunglasses, player)) + add_rule(world.get_location(LocationName.metal_harbor_5, player), + lambda state: state.has(ItemName.sonic_light_shoes, player)) + add_rule(world.get_location(LocationName.pumpkin_hill_5, player), + lambda state: state.has(ItemName.knuckles_shovel_claws, player) and + state.has(ItemName.knuckles_sunglasses, player)) + add_rule(world.get_location(LocationName.mission_street_5, player), + lambda state: state.has(ItemName.tails_booster, player) and + state.has(ItemName.tails_bazooka, player)) + add_rule(world.get_location(LocationName.aquatic_mine_5, player), + lambda state: state.has(ItemName.knuckles_mystic_melody, player) and + state.has(ItemName.knuckles_air_necklace, player) and + state.has(ItemName.knuckles_sunglasses, player)) + add_rule(world.get_location(LocationName.hidden_base_5, player), + lambda state: state.has(ItemName.tails_booster, player)) + add_rule(world.get_location(LocationName.pyramid_cave_5, player), + lambda state: state.has(ItemName.sonic_bounce_bracelet, player)) + add_rule(world.get_location(LocationName.death_chamber_5, player), + lambda state: state.has(ItemName.knuckles_hammer_gloves, player) and + state.has(ItemName.knuckles_shovel_claws, player) and + state.has(ItemName.knuckles_mystic_melody, player) and + state.has(ItemName.knuckles_air_necklace, player)) + add_rule(world.get_location(LocationName.eternal_engine_5, player), + lambda state: state.has(ItemName.tails_booster, player) and + state.has(ItemName.tails_bazooka, player)) + add_rule(world.get_location(LocationName.meteor_herd_5, player), + lambda state: state.has(ItemName.knuckles_hammer_gloves, player) and + state.has(ItemName.knuckles_sunglasses, player)) + add_rule(world.get_location(LocationName.crazy_gadget_5, player), + lambda state: state.has(ItemName.sonic_light_shoes, player) and + state.has(ItemName.sonic_bounce_bracelet, player) and + state.has(ItemName.sonic_flame_ring, player)) + add_rule(world.get_location(LocationName.final_rush_5, player), + lambda state: state.has(ItemName.sonic_bounce_bracelet, player)) + + add_rule(world.get_location(LocationName.iron_gate_5, player), + lambda state: state.has(ItemName.eggman_large_cannon, player)) + add_rule(world.get_location(LocationName.dry_lagoon_5, player), + lambda state: state.has(ItemName.rouge_treasure_scope, player)) + add_rule(world.get_location(LocationName.egg_quarters_5, player), + lambda state: state.has(ItemName.rouge_treasure_scope, player)) + add_rule(world.get_location(LocationName.lost_colony_5, player), + lambda state: state.has(ItemName.eggman_jet_engine, player) and + state.has(ItemName.eggman_large_cannon, player)) + add_rule(world.get_location(LocationName.weapons_bed_5, player), + lambda state: state.has(ItemName.eggman_jet_engine, player) and + state.has(ItemName.eggman_large_cannon, player)) + add_rule(world.get_location(LocationName.security_hall_5, player), + lambda state: state.has(ItemName.rouge_pick_nails, player) and + state.has(ItemName.rouge_treasure_scope, player)) + add_rule(world.get_location(LocationName.white_jungle_5, player), + lambda state: state.has(ItemName.shadow_air_shoes, player) and + state.has(ItemName.shadow_flame_ring, player)) + add_rule(world.get_location(LocationName.mad_space_5, player), + lambda state: state.has(ItemName.rouge_pick_nails, player) and + state.has(ItemName.rouge_iron_boots, player)) + add_rule(world.get_location(LocationName.cosmic_wall_5, player), + lambda state: state.has(ItemName.eggman_jet_engine, player)) + + add_rule(world.get_location(LocationName.cannon_core_5, player), + lambda state: state.has(ItemName.tails_booster, player) and + state.has(ItemName.eggman_jet_engine, player) and + state.has(ItemName.knuckles_hammer_gloves, player) and + state.has(ItemName.knuckles_air_necklace, player) and + state.has(ItemName.sonic_bounce_bracelet, player)) + + add_rule(world.get_location(LocationName.city_escape_upgrade, player), + lambda state: state.has(ItemName.sonic_bounce_bracelet, player) and + state.has(ItemName.sonic_flame_ring, player)) + add_rule(world.get_location(LocationName.wild_canyon_upgrade, player), + lambda state: state.has(ItemName.knuckles_shovel_claws, player)) + add_rule(world.get_location(LocationName.prison_lane_upgrade, player), + lambda state: state.has(ItemName.tails_bazooka, player)) + add_rule(world.get_location(LocationName.hidden_base_upgrade, player), + lambda state: state.has(ItemName.tails_booster, player) and + state.has(ItemName.tails_bazooka, player)) + add_rule(world.get_location(LocationName.eternal_engine_upgrade, player), + lambda state: state.has(ItemName.tails_booster, player)) + add_rule(world.get_location(LocationName.meteor_herd_upgrade, player), + lambda state: state.has(ItemName.knuckles_hammer_gloves, player)) + add_rule(world.get_location(LocationName.crazy_gadget_upgrade, player), + lambda state: state.has(ItemName.sonic_bounce_bracelet, player)) + add_rule(world.get_location(LocationName.final_rush_upgrade, player), + lambda state: state.has(ItemName.sonic_bounce_bracelet, player)) + + add_rule(world.get_location(LocationName.iron_gate_upgrade, player), + lambda state: state.has(ItemName.eggman_large_cannon, player)) + add_rule(world.get_location(LocationName.dry_lagoon_upgrade, player), + lambda state: state.has(ItemName.rouge_pick_nails, player)) + add_rule(world.get_location(LocationName.sand_ocean_upgrade, player), + lambda state: state.has(ItemName.eggman_jet_engine, player)) + add_rule(world.get_location(LocationName.radical_highway_upgrade, player), + lambda state: state.has(ItemName.shadow_air_shoes, player)) + add_rule(world.get_location(LocationName.security_hall_upgrade, player), + lambda state: state.has(ItemName.rouge_mystic_melody, player) and + state.has(ItemName.rouge_iron_boots, player)) + add_rule(world.get_location(LocationName.cosmic_wall_upgrade, player), + lambda state: state.has(ItemName.eggman_jet_engine, player)) + + +def set_rules(world: MultiWorld, player: int): + # Mission Progression Rules (Mission 1 begets Mission 2, etc.) + set_mission_progress_rules(world, player) + + # Upgrade Requirements for each location + set_mission_upgrade_rules(world, player) + + # TODO: Place Level Emblem Requirements Here + + # (Edge Case) + # Create some reasonable arbitrary logic for Chao Races to prevent having to grind Chaos Drives in the first level + # for loc in chao_garden_location_table: + # world.get_location(loc, player).add_item_rule(loc, lambda item: False) + + world.completion_condition[player] = lambda state: state.has(ItemName.maria, player) diff --git a/worlds/sa2b/__init__.py b/worlds/sa2b/__init__.py new file mode 100644 index 0000000000..70b7f32fcd --- /dev/null +++ b/worlds/sa2b/__init__.py @@ -0,0 +1,223 @@ +import os +import typing +import math + +from BaseClasses import Item, MultiWorld, Tutorial +from .Items import SA2BItem, ItemData, item_table, upgrades_table +from .Locations import SA2BLocation, all_locations, setup_locations +from .Options import sa2b_options +from .Regions import create_regions, shuffleable_regions, connect_regions, LevelGate, gate_0_whitelist_regions, \ + gate_0_blacklist_regions +from .Rules import set_rules +from .Names import ItemName, LocationName +from ..AutoWorld import WebWorld, World +import Patch + + +class SA2BWeb(WebWorld): + theme = "partyTime" + + setup_en = Tutorial( + "Multiworld Setup Guide", + "A guide to setting up the Sonic Adventure 2: Battle randomizer connected to an Archipelago Multiworld.", + "English", + "setup_en.md", + "setup/en", + ["RaspberrySpaceJam", "PoryGone"] + ) + + tutorials = [setup_en] + + +def check_for_impossible_shuffle(shuffled_levels: typing.List[int], gate_0_range: int, world: MultiWorld): + blacklist_level_count = 0 + + for i in range(gate_0_range): + if shuffled_levels[i] in gate_0_blacklist_regions: + blacklist_level_count += 1 + + if blacklist_level_count == gate_0_range: + index_to_swap = world.random.randint(0, gate_0_range) + for i in range(len(shuffled_levels)): + if shuffled_levels[i] in gate_0_whitelist_regions: + shuffled_levels[i], shuffled_levels[index_to_swap] = shuffled_levels[index_to_swap], shuffled_levels[i] + break + + +class SA2BWorld(World): + """ + Sonic Adventure 2 Battle is an action platforming game. Play as Sonic, Tails, Knuckles, Shadow, Rogue, and Eggman across 31 stages and prevent the destruction of the earth. + """ + game: str = "Sonic Adventure 2 Battle" + options = sa2b_options + topology_present = False + data_version = 1 + + item_name_to_id = {name: data.code for name, data in item_table.items()} + location_name_to_id = all_locations + + music_map: typing.Dict[int, int] + emblems_for_cannons_core: int + region_emblem_map: typing.Dict[int, int] + web = SA2BWeb() + + def _get_slot_data(self): + return { + "ModVersion": 100, + "MusicMap": self.music_map, + "MusicShuffle": self.world.MusicShuffle[self.player], + "DeathLink": self.world.DeathLink[self.player], + "IncludeMissions": self.world.IncludeMissions[self.player].value, + "EmblemPercentageForCannonsCore": self.world.EmblemPercentageForCannonsCore[self.player].value, + "NumberOfLevelGates": self.world.NumberOfLevelGates[self.player].value, + "LevelGateDistribution": self.world.LevelGateDistribution[self.player], + "EmblemsForCannonsCore": self.emblems_for_cannons_core, + "RegionEmblemMap": self.region_emblem_map, + } + + def _create_items(self, name: str): + data = item_table[name] + return [self.create_item(name)] * data.quantity + + def fill_slot_data(self) -> dict: + slot_data = self._get_slot_data() + slot_data["MusicMap"] = self.music_map + for option_name in sa2b_options: + option = getattr(self.world, option_name)[self.player] + slot_data[option_name] = option.value + + return slot_data + + def get_levels_per_gate(self) -> list: + levels_per_gate = list() + max_gate_index = self.world.NumberOfLevelGates[self.player] + average_level_count = 30 / (max_gate_index + 1) + levels_added = 0 + + for i in range(max_gate_index + 1): + levels_per_gate.append(average_level_count) + levels_added += average_level_count + additional_count_iterator = 0 + while levels_added < 30: + levels_per_gate[additional_count_iterator] += 1 + levels_added += 1 + additional_count_iterator += 1 if additional_count_iterator < max_gate_index else -max_gate_index + + if self.world.LevelGateDistribution[self.player] == 0 or self.world.LevelGateDistribution[self.player] == 2: + early_distribution = self.world.LevelGateDistribution[self.player] == 0 + levels_to_distribute = 5 + gate_index_offset = 0 + while levels_to_distribute > 0: + if levels_per_gate[0 + gate_index_offset] == 1 or \ + levels_per_gate[max_gate_index - gate_index_offset] == 1: + break + if early_distribution: + levels_per_gate[0 + gate_index_offset] += 1 + levels_per_gate[max_gate_index - gate_index_offset] -= 1 + else: + levels_per_gate[0 + gate_index_offset] -= 1 + levels_per_gate[max_gate_index - gate_index_offset] += 1 + gate_index_offset += 1 + if gate_index_offset > math.floor(max_gate_index / 2): + gate_index_offset = 0 + levels_to_distribute -= 1 + + return levels_per_gate + + def generate_basic(self): + self.world.get_location(LocationName.biolizard, self.player).place_locked_item(self.create_item(ItemName.maria)) + + itempool: typing.List[SA2BItem] = [] + + # First Missions + total_required_locations = 31 + + # Mission Locations + total_required_locations *= self.world.IncludeMissions[self.player].value + + # Upgrades + total_required_locations += 28 + + # Fill item pool with all required items + for item in {**upgrades_table}: + itempool += self._create_items(item) + + total_emblem_count = total_required_locations - len(itempool) + + # itempool += [self.create_item(ItemName.emblem)] * total_emblem_count + + self.emblems_for_cannons_core = math.floor( + total_emblem_count * (self.world.EmblemPercentageForCannonsCore[self.player].value / 100.0)) + + shuffled_region_list = list(range(30)) + emblem_requirement_list = list() + self.world.random.shuffle(shuffled_region_list) + levels_per_gate = self.get_levels_per_gate() + + check_for_impossible_shuffle(shuffled_region_list, math.ceil(levels_per_gate[0]), self.world) + levels_added_to_gate = 0 + total_levels_added = 0 + current_gate = 0 + current_gate_emblems = 0 + gates = list() + gates.append(LevelGate(0)) + for i in range(30): + gates[current_gate].gate_levels.append(shuffled_region_list[i]) + emblem_requirement_list.append(current_gate_emblems) + levels_added_to_gate += 1 + total_levels_added += 1 + if levels_added_to_gate >= levels_per_gate[current_gate]: + current_gate += 1 + if current_gate > self.world.NumberOfLevelGates[self.player].value: + current_gate = self.world.NumberOfLevelGates[self.player].value + else: + current_gate_emblems = max( + math.floor(total_emblem_count * math.pow(total_levels_added / 30.0, 2.0)), current_gate) + gates.append(LevelGate(current_gate_emblems)) + levels_added_to_gate = 0 + + self.region_emblem_map = dict(zip(shuffled_region_list, emblem_requirement_list)) + + connect_regions(self.world, self.player, gates, self.emblems_for_cannons_core) + + max_required_emblems = max(max(emblem_requirement_list), self.emblems_for_cannons_core) + itempool += [self.create_item(ItemName.emblem)] * max_required_emblems + itempool += [self.create_item(ItemName.emblem, True)] * (total_emblem_count - max_required_emblems) + + self.world.itempool += itempool + + if self.world.MusicShuffle[self.player] == "levels": + musiclist_o = list(range(0, 47)) + musiclist_s = musiclist_o.copy() + self.world.random.shuffle(musiclist_s) + self.music_map = dict(zip(musiclist_o, musiclist_s)) + elif self.world.MusicShuffle[self.player] == "full": + musiclist_o = list(range(0, 78)) + musiclist_s = musiclist_o.copy() + self.world.random.shuffle(musiclist_s) + self.music_map = dict(zip(musiclist_o, musiclist_s)) + else: + self.music_map = dict() + + def create_regions(self): + location_table = setup_locations(self.world, self.player) + create_regions(self.world, self.player, location_table) + + def create_item(self, name: str, force_non_progression=False) -> Item: + data = item_table[name] + created_item = SA2BItem(name, data.progression, data.code, self.player) + if name == ItemName.emblem: + created_item.skip_in_prog_balancing = True + if force_non_progression: + created_item.advancement = False + return created_item + + def set_rules(self): + set_rules(self.world, self.player) + + @classmethod + def stage_fill_hook(cls, world, progitempool, nonexcludeditempool, localrestitempool, nonlocalrestitempool, + restitempool, fill_locations): + if world.get_game_players("Sonic Adventure 2 Battle"): + progitempool.sort( + key=lambda item: 0 if (item.name != 'Emblem') else 1) diff --git a/worlds/sa2b/docs/en_Sonic Adventure 2 Battle.md b/worlds/sa2b/docs/en_Sonic Adventure 2 Battle.md new file mode 100644 index 0000000000..38b24c2336 --- /dev/null +++ b/worlds/sa2b/docs/en_Sonic Adventure 2 Battle.md @@ -0,0 +1,30 @@ +# Sonic Adventure 2: Battle + +## Where is the settings page? + +The [player settings page for this game](../player-settings) contains all the options you need to configure and export a config file. + +## What does randomization do to this game? + +The randomizer shuffles emblems and upgrade items into the AP item pool. The story mode is disabled, but stage select is available from the start. Levels can be locked behind gates requiring a certain number of emblems to unlock. Cannons Core will be locked behind a percentage of all available emblems, and completing Cannons Core will unlock the Biolizard boss. Progress towards unlocking Cannons Core and the next stage gate will be displayed on the Stage Select screen. + +## What is the goal of Sonic Adventure 2: Battle when randomized? + +The goal is to unlock and complete Cannons Core Mission 1, then complete the Biolizard boss fight. + +## What items and locations get shuffled? + +All 30 story stages leading up to Cannons Core will be shuffled and can be optionally placed behind emblem requirement gates. All emblems from the selected mission range and all 28 character upgrade items get shuffled. + +## Which items can be in another player's world? + +Any shuffled item can be in other players' worlds. + +## What does another world's item look like in Sonic Adventure 2: Battle + +Emblems have no visualization in the randomizer and items all retain their original appearance. You won't know if an item belongs to another player until you collect. + +## When the player receives an emblem or item, what happens? + +When the player collects an emblem or item, text will appear on screen to indicate who the item was for and what the item was. When collecting items in a level, the orignal item collection text will display and will likely not be correct. + diff --git a/worlds/sa2b/docs/setup_en.md b/worlds/sa2b/docs/setup_en.md new file mode 100644 index 0000000000..a5346e7082 --- /dev/null +++ b/worlds/sa2b/docs/setup_en.md @@ -0,0 +1,88 @@ +# Sonic Adventure 2: Battle Randomizer Setup Guide + +## Required Software + +- Sonic Adventure 2: Battle from: [Sonic Adventure 2: Battle Steam Store Page](https://store.steampowered.com/app/213610/Sonic_Adventure_2/) + - Currently the DLC is not required for this mod, but it will be required in a future release. +- Sonic Adventure 2 Mod Loader from: [Sonic Retro Mod Loader Page](http://info.sonicretro.org/SA2_Mod_Loader ) +- Microsoft Visual C++ 2013 from: [Microsoft Visual C++ 2013 Redistributable Page](https://www.microsoft.com/en-us/download/details.aspx?id=40784 ) +- Archipelago Mod for Sonic Adventure 2: Battle + from: [Sonic Adventure 2: Battle Archipelago Randomizer Mod Releases Page](https://github.com/PoryGone/SA2B_Archipelago/releases/) + +Optional: +- Sonic Adventure 2: Battle Archipelago PopTracker pack from: [SA2B_AP_Tracker Releases Page](https://github.com/PoryGone/SA2B_AP_Tracker/releases/) + +## Installation Procedures + +1. Install Sonic Adventure 2: Battle from Steam. + +2. Launch the game at least once without mods. + +3. Install Sonic Adventure 2 Mod Loader as per its instructions. + +4. The folder you installed the Sonic Adventure 2 Mod Loader into will now have a `/mods` directory. + +5. Unpack the Archipelago Mod into this folder, so that `/mods/SA2B_Archipelago` is a valid path. + +6. In the SA2B_Archipelago folder, run the `CopyAPCppDLL.bat` script (a window will very quickly pop up and go away). + +7. Launch the `SA2ModManager.exe` and make sure the SA2B_Archipelago mod is listed and enabled. + +## Joining a MultiWorld Game + +1. Before launching the game, run the `SA2ModManager.exe`, select the SA2B_Archipelago mod, and hit the `Configure...` button. + +2. For the `Server IP` field under `AP Settings`, enter the address of the server, such as archipelago.gg:38281, your server host should be able to tell you this. + +3. For the `PlayerName` field under `AP Settings`, enter your "name" field from the yaml, or website config. + +4. For the `Password` field under `AP Settings`, enter the server password if one exists, otherwise leave blank. + +5. Click The `Save` button then hit `Save & Play` to launch the game. + +6. Create a new save to connect to the MultiWorld game. A "Connected to Archipelago" message will appear if you sucessfully connect. If you close the game during play, you can reconnect to the MultiWorld game by selecting the same save file slot. + +## Additional Options + +Some additional settings related to the Archipelago messages in game can be adjusted in the SA2ModManager if you select `Configure...` on the SA2B_Archipelago mod. This settings will be under a `General Settings` tab. + + - Message Display Count: This is the maximum number of Archipelago messages that can be displayed on screen at any given time. + + - Message Display Duration: This dictates how long Archipelago messages are displayed on screen (in seconds). + + - Message Font Size: The is the size of the font used to display the messages from Archipelago. + +## Troubleshooting + +- "The following mods didn't load correctly: SA2B_Archipelago: DLL error - The specified module could not be found." + - Make sure the `APCpp.dll` is in the same folder as the `sonic2app.exe`. (See Installation Procedures step 6) + +- Game is running too fast (Like Sonic). + - If using an NVidia graphics card: + 1. Open the NVIDIA Control Panel. + 2. Select `Manage 3D Settings` under `3D settings` on the left. + 3. Select the `Program Settings` tab in the main window. + 4. Click the `Add` button and select `sonic2app.exe` (or browse to the exe location), then click `Add Selected Program`. + 5. Under `Specify the settings for this program:`, find the `Max Frame Rate` feature and click the Setting column for that feature. + 6. Choose the `On` radial option and in the input box next to the slide enter a value of 60 (or 59 if 60 causes the game to crash). + +- Controller input is not working. + 1. Run the Launcher.exe which should be in the same folder as the SA2ModManager. + 2. Select the `Player` tab and reselect the controller for the player 1 input method. + 3. Click the `Save settings and launch SONIC ADVENTURE 2` button. (Any mod manager settings will apply even if the game is launched this way rather than through the mod manager) + +- Game crashes after display logos. + - This may be caused by a high monitor refresh rate. + - Change the monitor refresh rate to 60 Hz [Change display refresh rate on Windows] (https://support.microsoft.com/en-us/windows/change-your-display-refresh-rate-in-windows-c8ea729e-0678-015c-c415-f806f04aae5a) + - This may also be fixed by setting Windows 7 compatibility mode on the sonic app: + 1. Right click on the sonic2app.exe and select `Properties`. + 2. Select the `Compatibility` tab. + 3. Check the `Run this program in compatility mode for:` box and select Windows 7 in the drop down. + 4. Click the `Apply` button. + +- No resolution options in the Launcher.exe. + - In the `Graphics device` dropdown, select the device and display you plan to run the game on. The `Resolution` dropdown should populate once a graphics device is selected. + +## Save File Safeguard (Advanced Option) + +The mod contains a save file safeguard which associates a savefile to a specific Archipelago seed. By default, save files can only connect to Archipelago servers that match their seed. The safeguard can be disabled in the mod config.ini by setting `IgnoreFileSafety` to true. This is NOT recommended for the standard user as it will allow any save file to connect and send items to the Archipelago server. From d1eda38745274ebf8f6e5881eb92b3ac4e46a3c2 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Wed, 27 Apr 2022 22:11:11 +0200 Subject: [PATCH 073/149] Clients: centralize UI and input behaviour --- CommonClient.py | 54 +++++++++++++++++++++++++++++------------------ FF1Client.py | 32 +++++++++++++--------------- FactorioClient.py | 36 ++++++++++++++++--------------- OoTClient.py | 33 +++++++++++++++-------------- SNIClient.py | 36 +++++++++++++++---------------- kvui.py | 37 -------------------------------- 6 files changed, 102 insertions(+), 126 deletions(-) diff --git a/CommonClient.py b/CommonClient.py index 1603c87faf..a8374f3d0d 100644 --- a/CommonClient.py +++ b/CommonClient.py @@ -119,9 +119,11 @@ class CommonContext(): starting_reconnect_delay: int = 5 current_reconnect_delay: int = starting_reconnect_delay command_processor: int = ClientCommandProcessor - game = None + game: typing.Optional[str] = None ui = None - keep_alive_task = None + ui_task: typing.Optional[asyncio.Task] = None + input_task: typing.Optional[asyncio.Task] = None + keep_alive_task: typing.Optional[asyncio.Task] = None items_handling: typing.Optional[int] = None current_energy_link_value = 0 # to display in UI, gets set by server @@ -309,6 +311,10 @@ class CommonContext(): self.input_queue.put_nowait(None) self.input_requests -= 1 self.keep_alive_task.cancel() + if self.ui_task: + await self.ui_task + if self.input_task: + self.input_task.cancel() # DeathLink hooks @@ -343,6 +349,27 @@ class CommonContext(): if old_tags != self.tags and self.server and not self.server.socket.closed: await self.send_msgs([{"cmd": "ConnectUpdate", "tags": self.tags}]) + def run_gui(self): + """Import kivy UI system and start running it as self.ui_task.""" + from kvui import GameManager + + class TextManager(GameManager): + logging_pairs = [ + ("Client", "Archipelago") + ] + base_title = "Archipelago Text Client" + + self.ui = TextManager(self) + self.ui_task = asyncio.create_task(self.ui.async_run(), name="UI") + + def run_cli(self): + if sys.stdin: + # steam overlay breaks when starting console_loop + if 'gameoverlayrenderer' in os.environ.get('LD_PRELOAD', ''): + logger.info("Skipping terminal input, due to conflicting Steam Overlay detected. Please use GUI only.") + else: + self.input_task = asyncio.create_task(console_loop(self), name="Input") + async def keep_alive(ctx: CommonContext, seconds_between_checks=100): """some ISPs/network configurations drop TCP connections if no payload is sent (ignore TCP-keep-alive) @@ -565,7 +592,6 @@ async def process_server_cmd(ctx: CommonContext, args: dict): async def console_loop(ctx: CommonContext): - import sys commandprocessor = ctx.command_processor(ctx) queue = asyncio.Queue() stream_input(sys.stdin, queue) @@ -620,26 +646,14 @@ if __name__ == '__main__': async def main(args): ctx = TextContext(args.connect, args.password) ctx.server_task = asyncio.create_task(server_loop(ctx), name="server loop") - input_task = None - steam_overlay = False if gui_enabled: - from kvui import TextManager - ctx.ui = TextManager(ctx) - ui_task = asyncio.create_task(ctx.ui.async_run(), name="UI") - steam_overlay = 'gameoverlayrenderer' in os.environ.get('LD_PRELOAD', '') - else: - ui_task = None - if sys.stdin and not steam_overlay: # steam overlay breaks when starting console_loop - input_task = asyncio.create_task(console_loop(ctx), name="Input") + ctx.run_gui() + ctx.run_cli() + await ctx.exit_event.wait() - await ctx.shutdown() - if ui_task: - await ui_task - if input_task: - input_task.cancel() import colorama @@ -648,7 +662,5 @@ if __name__ == '__main__': args, rest = parser.parse_known_args() colorama.init() - loop = asyncio.get_event_loop() - loop.run_until_complete(main(args)) - loop.close() + asyncio.run(main(args)) colorama.deinit() diff --git a/FF1Client.py b/FF1Client.py index c40449682a..f9f4d00ee0 100644 --- a/FF1Client.py +++ b/FF1Client.py @@ -102,6 +102,18 @@ class FF1Context(CommonContext): f"{receiving_player_name}" self._set_message(msg, item.item) + def run_gui(self): + from kvui import GameManager + + class FF1Manager(GameManager): + logging_pairs = [ + ("Client", "Archipelago") + ] + base_title = "Archipelago Final Fantasy 1 Client" + + self.ui = FF1Manager(self) + self.ui_task = asyncio.create_task(self.ui.async_run(), name="UI") + def get_payload(ctx: FF1Context): current_time = time.time() @@ -232,14 +244,8 @@ if __name__ == '__main__': ctx = FF1Context(args.connect, args.password) ctx.server_task = asyncio.create_task(server_loop(ctx), name="ServerLoop") if gui_enabled: - input_task = None - from kvui import FF1Manager - ctx.ui = FF1Manager(ctx) - ui_task = asyncio.create_task(ctx.ui.async_run(), name="UI") - else: - input_task = asyncio.create_task(console_loop(ctx), name="Input") - ui_task = None - + ctx.run_gui() + ctx.run_cli() ctx.nes_sync_task = asyncio.create_task(nes_sync_task(ctx), name="NES Sync") await ctx.exit_event.wait() @@ -250,12 +256,6 @@ if __name__ == '__main__': if ctx.nes_sync_task: await ctx.nes_sync_task - if ui_task: - await ui_task - - if input_task: - input_task.cancel() - import colorama @@ -263,7 +263,5 @@ if __name__ == '__main__': args, rest = parser.parse_known_args() colorama.init() - loop = asyncio.get_event_loop() - loop.run_until_complete(main(args)) - loop.close() + asyncio.run(main(args)) colorama.deinit() diff --git a/FactorioClient.py b/FactorioClient.py index 0b85dca331..dd1792ca2a 100644 --- a/FactorioClient.py +++ b/FactorioClient.py @@ -125,6 +125,20 @@ class FactorioContext(CommonContext): f"{Utils.format_SI_prefix(args['value'])}J remaining.") self.rcon_client.send_command(f"/ap-energylink {gained}") + def run_gui(self): + from kvui import GameManager + + class FactorioManager(GameManager): + logging_pairs = [ + ("Client", "Archipelago"), + ("FactorioServer", "Factorio Server Log"), + ("FactorioWatcher", "Bridge Data Log"), + ] + base_title = "Archipelago Factorio Client" + + self.ui = FactorioManager(self) + self.ui_task = asyncio.create_task(self.ui.async_run(), name="UI") + async def game_watcher(ctx: FactorioContext): bridge_logger = logging.getLogger("FactorioWatcher") @@ -346,15 +360,11 @@ async def factorio_spinup_server(ctx: FactorioContext) -> bool: async def main(args): ctx = FactorioContext(args.connect, args.password) ctx.server_task = asyncio.create_task(server_loop(ctx), name="ServerLoop") - input_task = None + if gui_enabled: - from kvui import FactorioManager - ctx.ui = FactorioManager(ctx) - ui_task = asyncio.create_task(ctx.ui.async_run(), name="UI") - else: - ui_task = None - if sys.stdin: - input_task = asyncio.create_task(console_loop(ctx), name="Input") + ctx.run_gui() + ctx.run_cli() + factorio_server_task = asyncio.create_task(factorio_spinup_server(ctx), name="FactorioSpinupServer") successful_launch = await factorio_server_task if successful_launch: @@ -370,12 +380,6 @@ async def main(args): await ctx.shutdown() - if ui_task: - await ui_task - - if input_task: - input_task.cancel() - class FactorioJSONtoTextParser(JSONtoTextParser): def _handle_color(self, node: JSONMessagePart): @@ -416,7 +420,5 @@ if __name__ == '__main__': server_args = ("--rcon-port", rcon_port, "--rcon-password", rcon_password, *rest) - loop = asyncio.get_event_loop() - loop.run_until_complete(main(args)) - loop.close() + asyncio.run(main(args)) colorama.deinit() diff --git a/OoTClient.py b/OoTClient.py index a469f225c3..ca758c7bb6 100644 --- a/OoTClient.py +++ b/OoTClient.py @@ -48,9 +48,11 @@ deathlink_sent_this_death: we interacted with the multiworld on this death, wait oot_loc_name_to_id = network_data_package["games"]["Ocarina of Time"]["location_name_to_id"] + def get_item_value(ap_id): return ap_id - 66000 + class OoTCommandProcessor(ClientCommandProcessor): def __init__(self, ctx): super().__init__(ctx) @@ -91,6 +93,18 @@ class OoTContext(CommonContext): self.deathlink_pending = True super().on_deathlink(data) + def run_gui(self): + from kvui import GameManager + + class OoTManager(GameManager): + logging_pairs = [ + ("Client", "Archipelago") + ] + base_title = "Archipelago Ocarina of Time Client" + + self.ui = OoTManager(self) + self.ui_task = asyncio.create_task(self.ui.async_run(), name="UI") + def get_payload(ctx: OoTContext): if ctx.deathlink_enabled and ctx.deathlink_pending: @@ -253,13 +267,8 @@ if __name__ == '__main__': ctx = OoTContext(args.connect, args.password) ctx.server_task = asyncio.create_task(server_loop(ctx), name="Server Loop") if gui_enabled: - input_task = None - from kvui import OoTManager - ctx.ui = OoTManager(ctx) - ui_task = asyncio.create_task(ctx.ui.async_run(), name="UI") - else: - input_task = asyncio.create_task(console_loop(ctx), name="Input") - ui_task = None + ctx.run_gui() + ctx.run_cli() ctx.n64_sync_task = asyncio.create_task(n64_sync_task(ctx), name="N64 Sync") @@ -271,17 +280,9 @@ if __name__ == '__main__': if ctx.n64_sync_task: await ctx.n64_sync_task - if ui_task: - await ui_task - - if input_task: - input_task.cancel() - import colorama colorama.init() - loop = asyncio.get_event_loop() - loop.run_until_complete(main()) - loop.close() + asyncio.run(main()) colorama.deinit() diff --git a/SNIClient.py b/SNIClient.py index 9ba9871762..1fa46899ff 100644 --- a/SNIClient.py +++ b/SNIClient.py @@ -186,6 +186,19 @@ class Context(CommonContext): # Once the games handled by SNIClient gets made to be remote items, this will no longer be needed. asyncio.create_task(self.send_msgs([{"cmd": "LocationScouts", "locations": list(new_locations)}])) + def run_gui(self): + from kvui import GameManager + + class SNIManager(GameManager): + logging_pairs = [ + ("Client", "Archipelago"), + ("SNES", "SNES"), + ] + base_title = "Archipelago SNI Client" + + self.ui = SNIManager(self) + self.ui_task = asyncio.create_task(self.ui.async_run(), name="UI") + async def deathlink_kill_player(ctx: Context): ctx.death_state = DeathState.killing_player @@ -1291,15 +1304,10 @@ async def main(): ctx = Context(args.snes, args.connect, args.password) if ctx.server_task is None: ctx.server_task = asyncio.create_task(server_loop(ctx), name="ServerLoop") - input_task = None + if gui_enabled: - from kvui import SNIManager - ctx.ui = SNIManager(ctx) - ui_task = asyncio.create_task(ctx.ui.async_run(), name="UI") - else: - ui_task = None - if sys.stdin: - input_task = asyncio.create_task(console_loop(ctx), name="Input") + ctx.run_gui() + ctx.run_cli() snes_connect_task = asyncio.create_task(snes_connect(ctx, ctx.snes_address), name="SNES Connect") watcher_task = asyncio.create_task(game_watcher(ctx), name="GameWatcher") @@ -1315,12 +1323,6 @@ async def main(): await watcher_task await ctx.shutdown() - if ui_task: - await ui_task - - if input_task: - input_task.cancel() - def get_alttp_settings(romfile: str): lastSettings = Utils.get_adjuster_settings(GAME_ALTTP) @@ -1432,7 +1434,7 @@ def get_alttp_settings(romfile: str): if hasattr(lastSettings, "world"): delattr(lastSettings, "world") else: - adjusted = False; + adjusted = False if adjusted: try: shutil.move(adjustedromfile, romfile) @@ -1446,7 +1448,5 @@ def get_alttp_settings(romfile: str): if __name__ == '__main__': colorama.init() - loop = asyncio.get_event_loop() - loop.run_until_complete(main()) - loop.close() + asyncio.run(main()) colorama.deinit() diff --git a/kvui.py b/kvui.py index 9e619305dc..c11301031d 100644 --- a/kvui.py +++ b/kvui.py @@ -369,15 +369,6 @@ class GameManager(App): self.energy_link_label.text = f"EL: {Utils.format_SI_prefix(self.ctx.current_energy_link_value)}J" -class FactorioManager(GameManager): - logging_pairs = [ - ("Client", "Archipelago"), - ("FactorioServer", "Factorio Server Log"), - ("FactorioWatcher", "Bridge Data Log"), - ] - base_title = "Archipelago Factorio Client" - - class ChecksFinderManager(GameManager): logging_pairs = [ ("Client", "Archipelago") @@ -385,34 +376,6 @@ class ChecksFinderManager(GameManager): base_title = "Archipelago ChecksFinder Client" -class SNIManager(GameManager): - logging_pairs = [ - ("Client", "Archipelago"), - ("SNES", "SNES"), - ] - base_title = "Archipelago SNI Client" - - -class TextManager(GameManager): - logging_pairs = [ - ("Client", "Archipelago") - ] - base_title = "Archipelago Text Client" - - -class FF1Manager(GameManager): - logging_pairs = [ - ("Client", "Archipelago") - ] - base_title = "Archipelago Final Fantasy 1 Client" - -class OoTManager(GameManager): - logging_pairs = [ - ("Client", "Archipelago") - ] - base_title = "Archipelago Ocarina of Time Client" - - class LogtoUI(logging.Handler): def __init__(self, on_log): super(LogtoUI, self).__init__(logging.INFO) From 0bc230153094ba6608b3f097b94ecaef7e712edd Mon Sep 17 00:00:00 2001 From: jtoyoda Date: Sat, 14 May 2022 09:55:11 -0600 Subject: [PATCH 074/149] Updating docs to remove reference to the AP preset --- worlds/ff1/docs/multiworld_en.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/worlds/ff1/docs/multiworld_en.md b/worlds/ff1/docs/multiworld_en.md index 44d95dbe30..1528791e21 100644 --- a/worlds/ff1/docs/multiworld_en.md +++ b/worlds/ff1/docs/multiworld_en.md @@ -29,7 +29,8 @@ the [Final Fantasy Randomizer Homepage](https://finalfantasyrandomizer.com/). Generate a game by going to the site and performing the following steps: 1. Select the randomization options (also known as `Flags` in the community) of your choice. If you do not know what you - prefer, or it is your first time playing select the "Archipelago" preset on the main page. + prefer, or it is your first time we suggest starting with the 'Shard Hunt' preset (which requires you to collect a + number of shards to go to the end dungeon) or the 'Beginner' preset if you prefer to kill the original fiends. 2. Go to the `Beta` tab and ensure `Archipelago` is enabled. Set your player name to any name that represents you. 3. Upload you `Final Fantasy(USA).nes` (and click `Remember ROM` for the future!) 4. Press the `NEW` button beside `Seed` a few times From 5f4b2cfa5222ef8cb94f0e5f764167e1ef7a396f Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sat, 14 May 2022 20:52:57 +0200 Subject: [PATCH 075/149] Main: compress world type output log (#509) --- Main.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Main.py b/Main.py index 190255001f..d6bdcea293 100644 --- a/Main.py +++ b/Main.py @@ -86,12 +86,12 @@ def main(args, seed=None, baked_server_options: Optional[Dict[str, object]] = No numlength = 8 for name, cls in AutoWorld.AutoWorldRegister.world_types.items(): if not cls.hidden: - logger.info(f" {name:{longest_name}}: {len(cls.item_names):3} Items | " - f"{len(cls.location_names):3} Locations") - logger.info(f" Item IDs: {min(cls.item_id_to_name):{numlength}} - " - f"{max(cls.item_id_to_name):{numlength}} | " - f"Location IDs: {min(cls.location_id_to_name):{numlength}} - " - f"{max(cls.location_id_to_name):{numlength}}") + logger.info(f" {name:{longest_name}}: {len(cls.item_names):3} " + f"Items (IDs: {min(cls.item_id_to_name):{numlength}} - " + f"{max(cls.item_id_to_name):{numlength}}) | " + f"{len(cls.location_names):3} " + f"Locations (IDs: {min(cls.location_id_to_name):{numlength}} - " + f"{max(cls.location_id_to_name):{numlength}})") AutoWorld.call_stage(world, "assert_generate") From 44638ccc1a137342ae3189a9e0d18cc42bf6d630 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sat, 14 May 2022 23:04:16 +0200 Subject: [PATCH 076/149] Fill: fix priority_locations being undone by prog_balancing shop shuffle and other late-fills (#513) --- Fill.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Fill.py b/Fill.py index dbe6b3428f..cdb39b6544 100644 --- a/Fill.py +++ b/Fill.py @@ -166,7 +166,7 @@ def distribute_items_restrictive(world: MultiWorld) -> None: defaultlocations = locations[LocationProgressType.DEFAULT] excludedlocations = locations[LocationProgressType.EXCLUDED] - fill_restrictive(world, world.state, prioritylocations, progitempool) + fill_restrictive(world, world.state, prioritylocations, progitempool, lock=True) if prioritylocations: defaultlocations = prioritylocations + defaultlocations From b2e65a19a220afbd7051c6d4a9e1ca5b7240891f Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sat, 14 May 2022 23:05:21 +0200 Subject: [PATCH 077/149] Webhost serialize fixes (#512) * Main: compress world type output log * WebHost: ensure plando_options is serializable to json --- WebHostLib/api/generate.py | 1 - WebHostLib/generate.py | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/WebHostLib/api/generate.py b/WebHostLib/api/generate.py index e01514d9e8..faad50e1c6 100644 --- a/WebHostLib/api/generate.py +++ b/WebHostLib/api/generate.py @@ -50,7 +50,6 @@ def generate_api(): return {"text": str(results), "detail": results}, 400 else: - meta["plando_options"] = list(meta.get("plando_options", [])) gen = Generation( options=pickle.dumps({name: vars(options) for name, options in gen_options.items()}), # convert to json compatible diff --git a/WebHostLib/generate.py b/WebHostLib/generate.py index 00904762f8..d8d46037ad 100644 --- a/WebHostLib/generate.py +++ b/WebHostLib/generate.py @@ -37,7 +37,7 @@ def get_meta(options_source: dict) -> dict: "collect_mode": options_source.get("collect_mode", "disabled"), "item_cheat": bool(int(options_source.get("item_cheat", 1))), "server_password": options_source.get("server_password", None), - "plando_options": plando_options + "plando_options": list(plando_options) } return meta From e147495fb9c94c29454c3c07fbe15cdc5525ae4e Mon Sep 17 00:00:00 2001 From: lordlou <87331798+lordlou@users.noreply.github.com> Date: Sun, 15 May 2022 10:29:56 -0400 Subject: [PATCH 078/149] Sm unbeatable seed fix (#514) --- worlds/sm/__init__.py | 22 ++++++++++++++++++- .../sm/variaRandomizer/utils/doorsmanager.py | 3 +-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/worlds/sm/__init__.py b/worlds/sm/__init__.py index 5a95833044..c08ab2dced 100644 --- a/worlds/sm/__init__.py +++ b/worlds/sm/__init__.py @@ -5,7 +5,7 @@ import copy import os import threading import base64 -from typing import Set, List +from typing import Set, List, TextIO logger = logging.getLogger("Super Metroid") @@ -68,6 +68,12 @@ class SMWeb(WebWorld): class SMWorld(World): + """ + This is Very Adaptive Randomizer of Items and Areas for Super Metroid (VARIA SM). It supports + a wide range of options to randomize Item locations, required skills and even the connections + between the main Areas! + """ + game: str = "Super Metroid" topology_present = True data_version = 1 @@ -565,6 +571,20 @@ class SMWorld(World): if location.game == location.item.game == "Super Metroid" and location.item.type == "Nothing": location.address = location.item.code = None + def write_spoiler(self, spoiler_handle: TextIO): + if self.world.area_randomization[self.player].value != 0: + spoiler_handle.write('\n\nArea Transitions:\n\n') + spoiler_handle.write('\n'.join(['%s%s %s %s' % (f'{self.world.get_player_name(self.player)}: ' + if self.world.players > 1 else '', src.Name, + '<=>', + dest.Name) for src, dest in self.variaRando.randoExec.areaGraph.InterAreaTransitions if not src.Boss])) + + if self.world.boss_randomization[self.player].value != 0: + spoiler_handle.write('\n\nBoss Transitions:\n\n') + spoiler_handle.write('\n'.join(['%s%s %s %s' % (f'{self.world.get_player_name(self.player)}: ' + if self.world.players > 1 else '', src.Name, + '<=>', + dest.Name) for src, dest in self.variaRando.randoExec.areaGraph.InterAreaTransitions if src.Boss])) def create_locations(self, player: int): for name, id in locations_lookup_name_to_id.items(): diff --git a/worlds/sm/variaRandomizer/utils/doorsmanager.py b/worlds/sm/variaRandomizer/utils/doorsmanager.py index 49b4540bac..bb2f5f6121 100644 --- a/worlds/sm/variaRandomizer/utils/doorsmanager.py +++ b/worlds/sm/variaRandomizer/utils/doorsmanager.py @@ -254,8 +254,7 @@ class DoorsManager(): @staticmethod def setDoorsColor(player=0): - if player not in DoorsManager.doorsDict.keys(): - DoorsManager.doorsDict[player] = copy.deepcopy(DoorsManager.doors) + DoorsManager.doorsDict[player] = copy.deepcopy(DoorsManager.doors) currentDoors = DoorsManager.doorsDict[player] # depending on loaded patches, force some doors to blue, excluding them from randomization From 2b6fc6dd3a37df02d35deb44b3417a33ed892ff3 Mon Sep 17 00:00:00 2001 From: beauxq Date: Sat, 14 May 2022 16:50:36 -0700 Subject: [PATCH 079/149] only accept true and false for a range if they make sense --- Options.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/Options.py b/Options.py index 6bfbac89d7..632b90d384 100644 --- a/Options.py +++ b/Options.py @@ -409,10 +409,19 @@ class Range(NumericOption): raise Exception(f"random text \"{text}\" did not resolve to a recognized pattern. Acceptable values are: random, random-high, random-middle, random-low, random-range-low--, random-range-middle--, random-range-high--, or random-range--.") elif text == "default" and hasattr(cls, "default"): return cls(cls.default) - elif text in ["high", "true"]: + elif text == "high": return cls(cls.range_end) - elif text in ["low", "false"]: + elif text == "low": return cls(cls.range_start) + elif cls.range_start == 0 \ + and hasattr(cls, "default") \ + and cls.default != 0 \ + and text in ("true", "false"): + # these are the conditions where "true" and "false" make sense + if text == "true": + return cls(cls.default) + else: # "false" + return cls(0) return cls(int(text)) @classmethod From c0fb7d9f9acc880c8b18da187f23ca1b337fb24b Mon Sep 17 00:00:00 2001 From: CaitSith2 Date: Sun, 15 May 2022 07:41:11 -0700 Subject: [PATCH 080/149] Add local and non_local items to item_links (#506) * Add local and non_local items to item_links * Whoops, don't pass list of list to verify_items. * Give a did you mean result in the exception. --- BaseClasses.py | 20 +++++++++++++++- Main.py | 3 ++- Options.py | 53 +++++++++++++++++++++++++++++++---------- worlds/generic/Rules.py | 14 +++++++++++ 4 files changed, 76 insertions(+), 14 deletions(-) diff --git a/BaseClasses.py b/BaseClasses.py index e1df8cf331..6cd0db6b7a 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -23,6 +23,8 @@ class Group(TypedDict, total=False): players: Set[int] item_pool: Set[str] replacement_items: Dict[int, Optional[str]] + local_items: Set[str] + non_local_items: Set[str] class MultiWorld(): @@ -219,6 +221,8 @@ class MultiWorld(): item_links[item_link["name"]]["players"][player] = item_link["replacement_item"] item_links[item_link["name"]]["item_pool"] &= set(item_link["item_pool"]) item_links[item_link["name"]]["exclude"] |= set(item_link.get("exclude", [])) + item_links[item_link["name"]]["local_items"] &= set(item_link.get("local_items", [])) + item_links[item_link["name"]]["non_local_items"] &= set(item_link.get("non_local_items", [])) else: if item_link["name"] in self.player_name.values(): raise Exception(f"Cannot name a ItemLink group the same as a player ({item_link['name']}) ({self.get_player_name(player)}).") @@ -226,23 +230,37 @@ class MultiWorld(): "players": {player: item_link["replacement_item"]}, "item_pool": set(item_link["item_pool"]), "exclude": set(item_link.get("exclude", [])), - "game": self.game[player] + "game": self.game[player], + "local_items": set(item_link.get("local_items", [])), + "non_local_items": set(item_link.get("non_local_items", [])) } for name, item_link in item_links.items(): current_item_name_groups = AutoWorld.AutoWorldRegister.world_types[item_link["game"]].item_name_groups pool = set() + local_items = set() + non_local_items = set() for item in item_link["item_pool"]: pool |= current_item_name_groups.get(item, {item}) for item in item_link["exclude"]: pool -= current_item_name_groups.get(item, {item}) + for item in item_link["local_items"]: + local_items |= current_item_name_groups.get(item, {item}) + for item in item_link["non_local_items"]: + non_local_items |= current_item_name_groups.get(item, {item}) + local_items &= pool + non_local_items &= pool item_link["item_pool"] = pool + item_link["local_items"] = local_items + item_link["non_local_items"] = non_local_items for group_name, item_link in item_links.items(): game = item_link["game"] group_id, group = self.add_group(group_name, game, set(item_link["players"])) group["item_pool"] = item_link["item_pool"] group["replacement_items"] = item_link["players"] + group["local_items"] = item_link["local_items"] + group["non_local_items"] = item_link["non_local_items"] # intended for unittests def set_default_common_options(self): diff --git a/Main.py b/Main.py index d6bdcea293..04ac212431 100644 --- a/Main.py +++ b/Main.py @@ -17,7 +17,7 @@ from worlds.alttp.Regions import lookup_vanilla_location_to_entrance from Fill import distribute_items_restrictive, flood_items, balance_multiworld_progression, distribute_planned from worlds.alttp.Shops import SHOP_ID_START, total_shop_slots, FillDisabledShopSlots from Utils import output_path, get_options, __version__, version_tuple -from worlds.generic.Rules import locality_rules, exclusion_rules +from worlds.generic.Rules import locality_rules, exclusion_rules, group_locality_rules from worlds import AutoWorld ordered_areas = ( @@ -127,6 +127,7 @@ def main(args, seed=None, baked_server_options: Optional[Dict[str, object]] = No if world.players > 1: for player in world.player_ids: locality_rules(world, player) + group_locality_rules(world) else: world.non_local_items[1].value = set() world.local_items[1].value = set() diff --git a/Options.py b/Options.py index 632b90d384..4cab676970 100644 --- a/Options.py +++ b/Options.py @@ -651,10 +651,30 @@ class ItemLinks(OptionList): "name": And(str, len), "item_pool": [And(str, len)], Optional("exclude"): [And(str, len)], - "replacement_item": Or(And(str, len), None) + "replacement_item": Or(And(str, len), None), + Optional("local_items"): [And(str, len)], + Optional("non_local_items"): [And(str, len)] } ]) + @staticmethod + def verify_items(items: typing.List[str], item_link: str, pool_name: str, world, allow_item_groups: bool = True) -> typing.Set: + pool = set() + for item_name in items: + if item_name not in world.item_names and (not allow_item_groups or item_name not in world.item_name_groups): + picks = get_fuzzy_results(item_name, world.item_names, limit=1) + picks_group = get_fuzzy_results(item_name, world.item_name_groups.keys(), limit=1) + picks_group = f" or '{picks_group[0][0]}' ({picks_group[0][1]}% sure)" if allow_item_groups else "" + + raise Exception(f"Item {item_name} from item link {item_link} " + f"is not a valid item from {world.game} for {pool_name}. " + f"Did you mean '{picks[0][0]}' ({picks[0][1]}% sure){picks_group}") + if allow_item_groups: + pool |= world.item_name_groups.get(item_name, {item_name}) + else: + pool |= {item_name} + return pool + def verify(self, world): super(ItemLinks, self).verify(world) existing_links = set() @@ -662,18 +682,27 @@ class ItemLinks(OptionList): if link["name"] in existing_links: raise Exception(f"You cannot have more than one link named {link['name']}.") existing_links.add(link["name"]) - for item_name in link["item_pool"]: - if item_name not in world.item_names and item_name not in world.item_name_groups: - raise Exception(f"Item {item_name} from item link {link} " - f"is not a valid item name from {world.game}") + + pool = self.verify_items(link["item_pool"], link["name"], "item_pool", world) + local_items = set() + non_local_items = set() + if "exclude" in link: - for item_name in link["exclude"]: - if item_name not in world.item_names and item_name not in world.item_name_groups: - raise Exception(f"Item {item_name} from item link {link} " - f"is not a valid item name from {world.game}") - if link["replacement_item"] and link["replacement_item"] not in world.item_names: - raise Exception(f"Item {link['replacement_item']} from item link {link} " - f"is not a valid item name from {world.game}") + pool -= self.verify_items(link["exclude"], link["name"], "exclude", world) + if link["replacement_item"]: + self.verify_items([link["replacement_item"]], link["name"], "replacement_item", world, False) + if "local_items" in link: + local_items = self.verify_items(link["local_items"], link["name"], "local_items", world) + local_items &= pool + if "non_local_items" in link: + non_local_items = self.verify_items(link["non_local_items"], link["name"], "non_local_items", world) + non_local_items &= pool + + intersection = local_items.intersection(non_local_items) + if intersection: + raise Exception(f"item_link {link['name']} has {intersection} items in both its local_items and non_local_items pool.") + + per_game_common_options = { diff --git a/worlds/generic/Rules.py b/worlds/generic/Rules.py index 2a607d9860..e82242091d 100644 --- a/worlds/generic/Rules.py +++ b/worlds/generic/Rules.py @@ -12,6 +12,20 @@ else: ItemRule = typing.Callable[[object], bool] +def group_locality_rules(world): + for group_id, group in world.groups.items(): + if set(world.player_ids) == set(group["players"]): + continue + if group["local_items"]: + for location in world.get_locations(): + if location.player not in group["players"]: + forbid_items_for_player(location, group["local_items"], group_id) + if group["non_local_items"]: + for location in world.get_locations(): + if location.player in group["players"]: + forbid_items_for_player(location, group["non_local_items"], group_id) + + def locality_rules(world, player: int): if world.local_items[player].value: for location in world.get_locations(): From 07f66fb15ae39c19cd332fda18be2c028ef45dde Mon Sep 17 00:00:00 2001 From: Jarno Westhof Date: Sun, 15 May 2022 23:39:38 +0200 Subject: [PATCH 081/149] [Timespinner] Make DamageRandoOverrides a bit easier to work with and compatible with older yamls (#517) --- worlds/timespinner/Options.py | 38 ++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/worlds/timespinner/Options.py b/worlds/timespinner/Options.py index 4915a749c3..60c3d331f0 100644 --- a/worlds/timespinner/Options.py +++ b/worlds/timespinner/Options.py @@ -1,7 +1,7 @@ from typing import Dict, Union from BaseClasses import MultiWorld from Options import Toggle, DefaultOnToggle, DeathLink, Choice, Range, Option, OptionDict -from schema import Schema, And +from schema import Schema, And, Optional class StartWithJewelryBox(Toggle): "Start with Jewelry Box unlocked" @@ -65,86 +65,88 @@ class DamageRando(Choice): option_mostlybuffs = 4 option_allbuffs = 5 option_manual = 6 + alias_false = 0 + alias_true = 2 class DamageRandoOverrides(OptionDict): - "Manual +/-/normal odds for each orb. Put 0 if you don't want a certain nerf or buff to be a possibility." + "Manual +/-/normal odds for an orb. Put 0 if you don't want a certain nerf or buff to be a possibility. Orbs that you don't specify will roll with 1/1/1 as odds" schema = Schema({ - "Blue": { + Optional("Blue"): { "MinusOdds": And(int, lambda n: n >= 0), "NormalOdds": And(int, lambda n: n >= 0), "PlusOdds": And(int, lambda n: n >= 0) }, - "Blade": { + Optional("Blade"): { "MinusOdds": And(int, lambda n: n >= 0), "NormalOdds": And(int, lambda n: n >= 0), "PlusOdds": And(int, lambda n: n >= 0) }, - "Fire": { + Optional("Fire"): { "MinusOdds": And(int, lambda n: n >= 0), "NormalOdds": And(int, lambda n: n >= 0), "PlusOdds": And(int, lambda n: n >= 0) }, - "Plasma": { + Optional("Plasma"): { "MinusOdds": And(int, lambda n: n >= 0), "NormalOdds": And(int, lambda n: n >= 0), "PlusOdds": And(int, lambda n: n >= 0) }, - "Iron": { + Optional("Iron"): { "MinusOdds": And(int, lambda n: n >= 0), "NormalOdds": And(int, lambda n: n >= 0), "PlusOdds": And(int, lambda n: n >= 0) }, - "Ice": { + Optional("Ice"): { "MinusOdds": And(int, lambda n: n >= 0), "NormalOdds": And(int, lambda n: n >= 0), "PlusOdds": And(int, lambda n: n >= 0) }, - "Wind": { + Optional("Wind"): { "MinusOdds": And(int, lambda n: n >= 0), "NormalOdds": And(int, lambda n: n >= 0), "PlusOdds": And(int, lambda n: n >= 0) }, - "Gun": { + Optional("Gun"): { "MinusOdds": And(int, lambda n: n >= 0), "NormalOdds": And(int, lambda n: n >= 0), "PlusOdds": And(int, lambda n: n >= 0) }, - "Umbra": { + Optional("Umbra"): { "MinusOdds": And(int, lambda n: n >= 0), "NormalOdds": And(int, lambda n: n >= 0), "PlusOdds": And(int, lambda n: n >= 0) }, - "Empire": { + Optional("Empire"): { "MinusOdds": And(int, lambda n: n >= 0), "NormalOdds": And(int, lambda n: n >= 0), "PlusOdds": And(int, lambda n: n >= 0) }, - "Eye": { + Optional("Eye"): { "MinusOdds": And(int, lambda n: n >= 0), "NormalOdds": And(int, lambda n: n >= 0), "PlusOdds": And(int, lambda n: n >= 0) }, - "Blood": { + Optional("Blood"): { "MinusOdds": And(int, lambda n: n >= 0), "NormalOdds": And(int, lambda n: n >= 0), "PlusOdds": And(int, lambda n: n >= 0) }, - "ForbiddenTome": { + Optional("ForbiddenTome"): { "MinusOdds": And(int, lambda n: n >= 0), "NormalOdds": And(int, lambda n: n >= 0), "PlusOdds": And(int, lambda n: n >= 0) }, - "Shattered": { + Optional("Shattered"): { "MinusOdds": And(int, lambda n: n >= 0), "NormalOdds": And(int, lambda n: n >= 0), "PlusOdds": And(int, lambda n: n >= 0) }, - "Nether": { + Optional("Nether"): { "MinusOdds": And(int, lambda n: n >= 0), "NormalOdds": And(int, lambda n: n >= 0), "PlusOdds": And(int, lambda n: n >= 0) }, - "Radiant": { + Optional("Radiant"): { "MinusOdds": And(int, lambda n: n >= 0), "NormalOdds": And(int, lambda n: n >= 0), "PlusOdds": And(int, lambda n: n >= 0) From dcc703f4542a963905cabe1fc2fca8f233fcec8d Mon Sep 17 00:00:00 2001 From: wafflesoup Date: Mon, 16 May 2022 09:18:07 -0500 Subject: [PATCH 082/149] Webworld docs: Removed extra space --- worlds/generic/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/worlds/generic/__init__.py b/worlds/generic/__init__.py index 72bedf6b93..ee3ff46368 100644 --- a/worlds/generic/__init__.py +++ b/worlds/generic/__init__.py @@ -23,7 +23,7 @@ class GenericWeb(WebWorld): triggers = Tutorial('Archipelago Triggers Guide', 'A guide to setting up and using triggers in your game settings.', 'English', 'triggers_en.md', 'triggers/en', ['alwaysintreble']) using_website = Tutorial('Archipelago Website User Guide', - 'A guide to using the Archipelago website to generate multiworlds or h ost pre-generated multiworlds.', + 'A guide to using the Archipelago website to generate multiworlds or host pre-generated multiworlds.', 'English', 'using_website_en.md', 'using_website/en', ['alwaysintreble']) tutorials = [setup, using_website, commands, advanced_settings, triggers, plando] From ff82145633d7647bd0a36fd9f31f94f84fc2f902 Mon Sep 17 00:00:00 2001 From: metzner Date: Mon, 16 May 2022 21:07:46 +0200 Subject: [PATCH 083/149] The Witness: Updated Setup Guide, now referencing the PopTracker map- & auto-tracking package! --- worlds/witness/docs/setup_en.md | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/worlds/witness/docs/setup_en.md b/worlds/witness/docs/setup_en.md index fe4ef56a65..c5c31a8907 100644 --- a/worlds/witness/docs/setup_en.md +++ b/worlds/witness/docs/setup_en.md @@ -3,8 +3,12 @@ ## Required Software - [The Witness (Steam)](https://store.steampowered.com/app/210970/The_Witness/) -- [The Witness Archipalego Randomizer](https://github.com/JarnoWesthof/The-Witness-Randomizer-for-Archipelago) +- [The Witness Archipalego Randomizer](https://github.com/JarnoWesthof/The-Witness-Randomizer-for-Archipelago/releases) + +## Optional Software + - [ArchipelagoTextClient](https://github.com/ArchipelagoMW/Archipelago/releases) +- [The Witness Map- and Auto-Tracker](https://github.com/NewSoupVi/witness_archipelago_tracker/releases), for use with [PopTracker](https://github.com/black-sliver/PopTracker/releases) ## Joining a MultiWorld Game @@ -15,12 +19,23 @@ It is recommended to do every single one of these steps when you connect to a wo 2. Start a fresh save (unless you have absolutely no other choice) 3. Do not move 4. Launch [The Witness Archipalego Randomizer](https://github.com/JarnoWesthof/The-Witness-Randomizer-for-Archipelago) -5. Enter the Archipelago Adress, Slot Name and Password +5. Enter the Archipelago address, slot name and password 6. Press "Randomize" 7. Wait for the randomization to fully finish before moving in-game That's it! Have fun! -## ArchipelagoTextClient +## Archipelago Text Client -Its recommended to have Archipelago's Text Client open on the side to keep track of what item you receive and send as The Witness has no in-game messages. \ No newline at end of file +It is recommended to have Archipelago's Text Client open on the side to keep track of what items you receive and send, as The Witness has no in-game messages. +
    Or use the Auto-Tracker! +## Auto-Tracking + +The Witness has a fully functional map tracker that supports auto-tracking. + +1. Download [The Witness Map- and Auto-Tracker](https://github.com/NewSoupVi/witness_archipelago_tracker/releases) and [PopTracker](https://github.com/black-sliver/PopTracker/releases). +2. Open PopTracker, and load the Witness pack. +3. Click on the "AP" symbol at the top. +4. Enter the AP address, slot name and password. + +The rest should take care of itself! Items and checks will be marked automatically, and it even knows your settings - It will hide checks & adjust logic accordingly. \ No newline at end of file From 48a7587c5ad2843c24f90655b69980d5f92d3e0e Mon Sep 17 00:00:00 2001 From: alwaysintreble Date: Tue, 17 May 2022 18:37:12 -0500 Subject: [PATCH 084/149] Fix broken plando guide links --- worlds/generic/docs/plando_en.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/worlds/generic/docs/plando_en.md b/worlds/generic/docs/plando_en.md index dc04fab05a..e3ee76040c 100644 --- a/worlds/generic/docs/plando_en.md +++ b/worlds/generic/docs/plando_en.md @@ -159,12 +159,12 @@ into any locations within the game slots named BobsSlaytheSpire and BobsRogueLeg ## Boss Plando As this is currently only supported by A Link to the Past instead of explaining here please refer to the -[relevant guide](/tutorial/zelda3/plando/en) +relevant guide: [A Link to the Past Plando Guide](/tutorial/A_Link_to_the_Past/plando/en) ## Text Plando As this is currently only supported by A Link to the Past instead of explaining here please refer to the -[relevant guide](/tutorial/zelda3/plando/en) +relevant guide: [A Link to the Past Plando Guide](/tutorial/A_Link_to_the_Past/plando/en) ## Connections Plando From 05efbe0af89428c6898a2267e712a8ac73695053 Mon Sep 17 00:00:00 2001 From: PoryGone <98504756+PoryGone@users.noreply.github.com> Date: Wed, 18 May 2022 08:56:43 -0400 Subject: [PATCH 085/149] SA2B Style Improvements (#525) --- worlds/sa2b/Locations.py | 8 ++++---- worlds/sa2b/Options.py | 12 ++++++------ worlds/sa2b/Rules.py | 17 +++++++++-------- worlds/sa2b/__init__.py | 30 +++++++++++++++--------------- worlds/sa2b/docs/setup_en.md | 12 ++++++------ 5 files changed, 40 insertions(+), 39 deletions(-) diff --git a/worlds/sa2b/Locations.py b/worlds/sa2b/Locations.py index 11c301f891..1496783730 100644 --- a/worlds/sa2b/Locations.py +++ b/worlds/sa2b/Locations.py @@ -255,16 +255,16 @@ location_table = {} def setup_locations(world, player: int): location_table = {**first_mission_location_table} - if world.IncludeMissions[player].value >= 2: + if world.include_missions[player].value >= 2: location_table.update({**second_mission_location_table}) - if world.IncludeMissions[player].value >= 3: + if world.include_missions[player].value >= 3: location_table.update({**third_mission_location_table}) - if world.IncludeMissions[player].value >= 4: + if world.include_missions[player].value >= 4: location_table.update({**fourth_mission_location_table}) - if world.IncludeMissions[player].value >= 5: + if world.include_missions[player].value >= 5: location_table.update({**fifth_mission_location_table}) location_table.update({**upgrade_location_table}) diff --git a/worlds/sa2b/Options.py b/worlds/sa2b/Options.py index ea1306c3f7..b6b9f170df 100644 --- a/worlds/sa2b/Options.py +++ b/worlds/sa2b/Options.py @@ -68,10 +68,10 @@ class MusicShuffle(Choice): sa2b_options: typing.Dict[str, type(Option)] = { - "DeathLink": DeathLink, - "MusicShuffle": MusicShuffle, - "IncludeMissions": IncludeMissions, - "EmblemPercentageForCannonsCore": EmblemPercentageForCannonsCore, - "NumberOfLevelGates": NumberOfLevelGates, - "LevelGateDistribution": LevelGateDistribution, + "death_link": DeathLink, + "music_shuffle": MusicShuffle, + "include_missions": IncludeMissions, + "emblem_percentage_for_cannons_core": EmblemPercentageForCannonsCore, + "number_of_level_gates": NumberOfLevelGates, + "level_gate_distribution": LevelGateDistribution, } diff --git a/worlds/sa2b/Rules.py b/worlds/sa2b/Rules.py index 9720e1b531..467840a59f 100644 --- a/worlds/sa2b/Rules.py +++ b/worlds/sa2b/Rules.py @@ -15,16 +15,16 @@ def set_mission_progress_rules(world: MultiWorld, player: int): sorted(fourth_mission_location_table.items()), sorted(fifth_mission_location_table.items())): - if world.IncludeMissions[player].value >= 2: + if world.include_missions[player].value >= 2: set_rule(world.get_location(k2, player), lambda state, k1=k1: state.can_reach(k1, "Location", player)) - if world.IncludeMissions[player].value >= 3: + if world.include_missions[player].value >= 3: set_rule(world.get_location(k3, player), lambda state, k2=k2: state.can_reach(k2, "Location", player)) - if world.IncludeMissions[player].value >= 4: + if world.include_missions[player].value >= 4: set_rule(world.get_location(k4, player), lambda state, k3=k3: state.can_reach(k3, "Location", player)) - if world.IncludeMissions[player].value >= 5: + if world.include_missions[player].value >= 5: set_rule(world.get_location(k5, player), lambda state, k4=k4: state.can_reach(k4, "Location", player)) @@ -83,7 +83,7 @@ def set_mission_upgrade_rules(world: MultiWorld, player: int): state.has(ItemName.sonic_bounce_bracelet, player)) # Mission 2 Upgrade Requirements - if world.IncludeMissions[player].value >= 2: + if world.include_missions[player].value >= 2: add_rule(world.get_location(LocationName.metal_harbor_2, player), lambda state: state.has(ItemName.sonic_light_shoes, player)) add_rule(world.get_location(LocationName.mission_street_2, player), @@ -116,7 +116,7 @@ def set_mission_upgrade_rules(world: MultiWorld, player: int): state.has(ItemName.eggman_jet_engine, player)) # Mission 3 Upgrade Requirements - if world.IncludeMissions[player].value >= 3: + if world.include_missions[player].value >= 3: add_rule(world.get_location(LocationName.city_escape_3, player), lambda state: state.has(ItemName.sonic_mystic_melody, player)) add_rule(world.get_location(LocationName.wild_canyon_3, player), @@ -220,7 +220,7 @@ def set_mission_upgrade_rules(world: MultiWorld, player: int): state.has(ItemName.sonic_light_shoes, player)) # Mission 4 Upgrade Requirements - if world.IncludeMissions[player].value >= 4: + if world.include_missions[player].value >= 4: add_rule(world.get_location(LocationName.metal_harbor_4, player), lambda state: state.has(ItemName.sonic_light_shoes, player)) add_rule(world.get_location(LocationName.pumpkin_hill_4, player), @@ -274,7 +274,7 @@ def set_mission_upgrade_rules(world: MultiWorld, player: int): state.has(ItemName.sonic_bounce_bracelet, player)) # Mission 5 Upgrade Requirements - if world.IncludeMissions[player].value >= 5: + if world.include_missions[player].value >= 5: add_rule(world.get_location(LocationName.city_escape_5, player), lambda state: state.has(ItemName.sonic_flame_ring, player)) add_rule(world.get_location(LocationName.wild_canyon_5, player), @@ -341,6 +341,7 @@ def set_mission_upgrade_rules(world: MultiWorld, player: int): add_rule(world.get_location(LocationName.cannon_core_5, player), lambda state: state.has(ItemName.tails_booster, player) and state.has(ItemName.eggman_jet_engine, player) and + state.has(ItemName.knuckles_mystic_melody, player) and state.has(ItemName.knuckles_hammer_gloves, player) and state.has(ItemName.knuckles_air_necklace, player) and state.has(ItemName.sonic_bounce_bracelet, player)) diff --git a/worlds/sa2b/__init__.py b/worlds/sa2b/__init__.py index 70b7f32fcd..5899192b0d 100644 --- a/worlds/sa2b/__init__.py +++ b/worlds/sa2b/__init__.py @@ -65,12 +65,12 @@ class SA2BWorld(World): return { "ModVersion": 100, "MusicMap": self.music_map, - "MusicShuffle": self.world.MusicShuffle[self.player], - "DeathLink": self.world.DeathLink[self.player], - "IncludeMissions": self.world.IncludeMissions[self.player].value, - "EmblemPercentageForCannonsCore": self.world.EmblemPercentageForCannonsCore[self.player].value, - "NumberOfLevelGates": self.world.NumberOfLevelGates[self.player].value, - "LevelGateDistribution": self.world.LevelGateDistribution[self.player], + "MusicShuffle": self.world.music_shuffle[self.player].value, + "DeathLink": self.world.death_link[self.player].value, + "IncludeMissions": self.world.include_missions[self.player].value, + "EmblemPercentageForCannonsCore": self.world.emblem_percentage_for_cannons_core[self.player].value, + "NumberOfLevelGates": self.world.number_of_level_gates[self.player].value, + "LevelGateDistribution": self.world.level_gate_distribution[self.player].value, "EmblemsForCannonsCore": self.emblems_for_cannons_core, "RegionEmblemMap": self.region_emblem_map, } @@ -90,7 +90,7 @@ class SA2BWorld(World): def get_levels_per_gate(self) -> list: levels_per_gate = list() - max_gate_index = self.world.NumberOfLevelGates[self.player] + max_gate_index = self.world.number_of_level_gates[self.player] average_level_count = 30 / (max_gate_index + 1) levels_added = 0 @@ -103,8 +103,8 @@ class SA2BWorld(World): levels_added += 1 additional_count_iterator += 1 if additional_count_iterator < max_gate_index else -max_gate_index - if self.world.LevelGateDistribution[self.player] == 0 or self.world.LevelGateDistribution[self.player] == 2: - early_distribution = self.world.LevelGateDistribution[self.player] == 0 + if self.world.level_gate_distribution[self.player] == 0 or self.world.level_gate_distribution[self.player] == 2: + early_distribution = self.world.level_gate_distribution[self.player] == 0 levels_to_distribute = 5 gate_index_offset = 0 while levels_to_distribute > 0: @@ -133,7 +133,7 @@ class SA2BWorld(World): total_required_locations = 31 # Mission Locations - total_required_locations *= self.world.IncludeMissions[self.player].value + total_required_locations *= self.world.include_missions[self.player].value # Upgrades total_required_locations += 28 @@ -147,7 +147,7 @@ class SA2BWorld(World): # itempool += [self.create_item(ItemName.emblem)] * total_emblem_count self.emblems_for_cannons_core = math.floor( - total_emblem_count * (self.world.EmblemPercentageForCannonsCore[self.player].value / 100.0)) + total_emblem_count * (self.world.emblem_percentage_for_cannons_core[self.player].value / 100.0)) shuffled_region_list = list(range(30)) emblem_requirement_list = list() @@ -168,8 +168,8 @@ class SA2BWorld(World): total_levels_added += 1 if levels_added_to_gate >= levels_per_gate[current_gate]: current_gate += 1 - if current_gate > self.world.NumberOfLevelGates[self.player].value: - current_gate = self.world.NumberOfLevelGates[self.player].value + if current_gate > self.world.number_of_level_gates[self.player].value: + current_gate = self.world.number_of_level_gates[self.player].value else: current_gate_emblems = max( math.floor(total_emblem_count * math.pow(total_levels_added / 30.0, 2.0)), current_gate) @@ -186,12 +186,12 @@ class SA2BWorld(World): self.world.itempool += itempool - if self.world.MusicShuffle[self.player] == "levels": + if self.world.music_shuffle[self.player] == "levels": musiclist_o = list(range(0, 47)) musiclist_s = musiclist_o.copy() self.world.random.shuffle(musiclist_s) self.music_map = dict(zip(musiclist_o, musiclist_s)) - elif self.world.MusicShuffle[self.player] == "full": + elif self.world.music_shuffle[self.player] == "full": musiclist_o = list(range(0, 78)) musiclist_s = musiclist_o.copy() self.world.random.shuffle(musiclist_s) diff --git a/worlds/sa2b/docs/setup_en.md b/worlds/sa2b/docs/setup_en.md index a5346e7082..9e6c10df52 100644 --- a/worlds/sa2b/docs/setup_en.md +++ b/worlds/sa2b/docs/setup_en.md @@ -4,13 +4,15 @@ - Sonic Adventure 2: Battle from: [Sonic Adventure 2: Battle Steam Store Page](https://store.steampowered.com/app/213610/Sonic_Adventure_2/) - Currently the DLC is not required for this mod, but it will be required in a future release. -- Sonic Adventure 2 Mod Loader from: [Sonic Retro Mod Loader Page](http://info.sonicretro.org/SA2_Mod_Loader ) -- Microsoft Visual C++ 2013 from: [Microsoft Visual C++ 2013 Redistributable Page](https://www.microsoft.com/en-us/download/details.aspx?id=40784 ) +- Sonic Adventure 2 Mod Loader from: [Sonic Retro Mod Loader Page](http://info.sonicretro.org/SA2_Mod_Loader) +- Microsoft Visual C++ 2013 from: [Microsoft Visual C++ 2013 Redistributable Page](https://www.microsoft.com/en-us/download/details.aspx?id=40784) - Archipelago Mod for Sonic Adventure 2: Battle from: [Sonic Adventure 2: Battle Archipelago Randomizer Mod Releases Page](https://github.com/PoryGone/SA2B_Archipelago/releases/) -Optional: -- Sonic Adventure 2: Battle Archipelago PopTracker pack from: [SA2B_AP_Tracker Releases Page](https://github.com/PoryGone/SA2B_AP_Tracker/releases/) +## Optional Software +- Sonic Adventure 2 Tracker + - PopTracker from: [PopTracker Releases Page](https://github.com/black-sliver/PopTracker/releases/) + - Sonic Adventure 2: Battle Archipelago PopTracker pack from: [SA2B AP Tracker Releases Page](https://github.com/PoryGone/SA2B_AP_Tracker/releases/) ## Installation Procedures @@ -47,9 +49,7 @@ Optional: Some additional settings related to the Archipelago messages in game can be adjusted in the SA2ModManager if you select `Configure...` on the SA2B_Archipelago mod. This settings will be under a `General Settings` tab. - Message Display Count: This is the maximum number of Archipelago messages that can be displayed on screen at any given time. - - Message Display Duration: This dictates how long Archipelago messages are displayed on screen (in seconds). - - Message Font Size: The is the size of the font used to display the messages from Archipelago. ## Troubleshooting From 47b179dec4ffc9346535b1c6c1582abc1b99f33c Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Tue, 17 May 2022 21:40:03 +0200 Subject: [PATCH 086/149] setup: utf-8-sig signing --- setup.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 87a471d253..0a1e5c4f0b 100644 --- a/setup.py +++ b/setup.py @@ -29,9 +29,9 @@ except pkg_resources.ResolutionError: if os.path.exists("X:/pw.txt"): print("Using signtool") - with open("X:/pw.txt") as f: + with open("X:/pw.txt", encoding="utf-8-sig") as f: pw = f.read() - signtool = r'signtool sign /f X:/_SITS_Zertifikat_.pfx /p ' + pw + r' /fd sha256 /tr http://timestamp.digicert.com/ ' + signtool = r'signtool sign /f X:/_SITS_Zertifikat_.pfx /p "' + pw + r'" /fd sha256 /tr http://timestamp.digicert.com/ ' else: signtool = None From 11faca19401890c59e784567d2792a626ef020e8 Mon Sep 17 00:00:00 2001 From: alwaysintreble Date: Wed, 18 May 2022 14:19:57 -0500 Subject: [PATCH 087/149] docs: update various broken links/images and fix a few small typos. point some links to current webhost server rather than hardcoding archipelago.gg --- worlds/alttp/docs/multiworld_en.md | 3 ++- worlds/generic/docs/plando_en.md | 4 ++-- worlds/generic/docs/setup_en.md | 4 ++-- worlds/generic/docs/triggers_en.md | 2 +- worlds/generic/docs/using_website_en.md | 4 ++-- worlds/sm/docs/multiworld_en.md | 3 ++- worlds/smz3/docs/multiworld_en.md | 3 ++- worlds/soe/docs/multiworld_en.md | 2 +- worlds/timespinner/docs/setup_en.md | 2 +- worlds/witness/docs/setup_en.md | 4 ++-- 10 files changed, 17 insertions(+), 14 deletions(-) diff --git a/worlds/alttp/docs/multiworld_en.md b/worlds/alttp/docs/multiworld_en.md index 3759b93a6e..9b94868fcc 100644 --- a/worlds/alttp/docs/multiworld_en.md +++ b/worlds/alttp/docs/multiworld_en.md @@ -111,7 +111,8 @@ You only have to do these steps once. 2. Go to Settings --> User Interface. Set "Show Advanced Settings" to ON. 3. Go to Settings --> Network. Set "Network Commands" to ON. (It is found below Request Device 16.) Leave the default Network Command Port at 55355. -![Screenshot of Network Commands setting](/static/generated/docs/A_Link_to_the_Past/retroarch-network-commands-en.png) + +![Screenshot of Network Commands setting](/static/generated/docs/A%20Link%20to%20the%20Past/retroarch-network-commands-en.png) 4. Go to Main Menu --> Online Updater --> Core Downloader. Scroll down and select "Nintendo - SNES / SFC (bsnes-mercury Performance)". diff --git a/worlds/generic/docs/plando_en.md b/worlds/generic/docs/plando_en.md index e3ee76040c..c73fa8d398 100644 --- a/worlds/generic/docs/plando_en.md +++ b/worlds/generic/docs/plando_en.md @@ -159,12 +159,12 @@ into any locations within the game slots named BobsSlaytheSpire and BobsRogueLeg ## Boss Plando As this is currently only supported by A Link to the Past instead of explaining here please refer to the -relevant guide: [A Link to the Past Plando Guide](/tutorial/A_Link_to_the_Past/plando/en) +relevant guide: [A Link to the Past Plando Guide](/tutorial/A%20Link%20to%20the%20Past/plando/en) ## Text Plando As this is currently only supported by A Link to the Past instead of explaining here please refer to the -relevant guide: [A Link to the Past Plando Guide](/tutorial/A_Link_to_the_Past/plando/en) +relevant guide: [A Link to the Past Plando Guide](/tutorial/A%20Link%20to%20the%20Past/plando/en) ## Connections Plando diff --git a/worlds/generic/docs/setup_en.md b/worlds/generic/docs/setup_en.md index 1792c57077..7d7425b8b9 100644 --- a/worlds/generic/docs/setup_en.md +++ b/worlds/generic/docs/setup_en.md @@ -55,7 +55,7 @@ wish to play with. Typically, a single participant of the multiworld will gather the YAML files from all other players. After getting the YAML files of each participant for your multiworld game they can be compressed into a ZIP folder to then be uploaded to the multiworld generator page. Multiworld generator -page: [Archipelago Seed Generator Page](https://archipelago.gg/generate) +page: [Archipelago Seed Generator Page](/generate) #### Rolling a YAML Locally @@ -78,7 +78,7 @@ files after generation so if rolling locally ensure this file is edited to your ## Hosting an Archipelago Server The output of rolling a YAML will be a `.archipelago` file which can be subsequently uploaded to the Archipelago host -game page. Archipelago host game page: [Archipelago Seed Upload Page](https://archipelago.gg/uploads) +game page. Archipelago host game page: [Archipelago Seed Upload Page](/uploads) The `.archipelago` file may be run locally in order to host the multiworld on the local machine. This is done by running `ArchipelagoServer.exe` and pointing the resulting file selection prompt to the `.archipelago` file that was diff --git a/worlds/generic/docs/triggers_en.md b/worlds/generic/docs/triggers_en.md index 3fa62daf07..03ce9c65cb 100644 --- a/worlds/generic/docs/triggers_en.md +++ b/worlds/generic/docs/triggers_en.md @@ -17,7 +17,7 @@ For more information on plando you can reference the general plando guide or the General plando guide: [Archipelago Plando Guide](/tutorial/Archipelago/plando/en) -Link to the Past plando guide: [LttP Plando Guide](/tutorial/zelda3/plando/en) +Link to the Past plando guide: [LttP Plando Guide](/tutorial/A%20Link%20to%20the%20Past/plando/en) ## Trigger use diff --git a/worlds/generic/docs/using_website_en.md b/worlds/generic/docs/using_website_en.md index 7a9ae2fef7..92cc7aec4d 100644 --- a/worlds/generic/docs/using_website_en.md +++ b/worlds/generic/docs/using_website_en.md @@ -7,7 +7,7 @@ should only take a couple of minutes to read. 1. After gathering the YAML files together in one location, select all the files and compress them into a `.ZIP` file. 2. Next go to the "Generate Game" page. Generate game - page: [Archipelago Seed Generation Page](https://archipelago.gg/generate). Here, you can adjust some server settings + page: [Archipelago Seed Generation Page](/generate). Here, you can adjust some server settings such as forfeit rules and the cost for a player to use a hint before generation. 3. After adjusting the host settings to your liking click on the Upload File button and using the explorer window that opens, navigate to the location where you zipped the player files and upload this zip. The page will generate your @@ -26,7 +26,7 @@ games. If for some reason the seed was rolled on a machine, then either the resulting zip file or the resulting `AP_XXXXX.archipelago` inside the zip file can be uploaded to the host game page. Host game -page: [Archipelago Seed Upload Page](https://archipelago.gg/uploads) +page: [Archipelago Seed Upload Page](/uploads) This will give a page with the seed info and a link to the spoiler log, if it exists. Click on "Create New Room" and then share the link to the resulting page the other players so that they can download their patches or mods. The room diff --git a/worlds/sm/docs/multiworld_en.md b/worlds/sm/docs/multiworld_en.md index 5345f57935..9d5ed715f1 100644 --- a/worlds/sm/docs/multiworld_en.md +++ b/worlds/sm/docs/multiworld_en.md @@ -116,7 +116,8 @@ You only have to do these steps once. Note, RetroArch 1.9.x will not work as it 2. Go to Settings --> User Interface. Set "Show Advanced Settings" to ON. 3. Go to Settings --> Network. Set "Network Commands" to ON. (It is found below Request Device 16.) Leave the default Network Command Port at 55355. -![Screenshot of Network Commands setting](/static/assets/tutorial/retroarch-network-commands-en.png) + +![Screenshot of Network Commands setting](/static/generated/docs/A%20Link%20to%20the%20Past/retroarch-network-commands-en.png) 4. Go to Main Menu --> Online Updater --> Core Downloader. Scroll down and select "Nintendo - SNES / SFC (bsnes-mercury Performance)". diff --git a/worlds/smz3/docs/multiworld_en.md b/worlds/smz3/docs/multiworld_en.md index 5abb60a451..6ce031847f 100644 --- a/worlds/smz3/docs/multiworld_en.md +++ b/worlds/smz3/docs/multiworld_en.md @@ -113,7 +113,8 @@ You only have to do these steps once. Note, RetroArch 1.9.x will not work as it 2. Go to Settings --> User Interface. Set "Show Advanced Settings" to ON. 3. Go to Settings --> Network. Set "Network Commands" to ON. (It is found below Request Device 16.) Leave the default Network Command Port at 55355. -![Screenshot of Network Commands setting](/static/assets/tutorial/retroarch-network-commands-en.png) + +![Screenshot of Network Commands setting](/static/generated/docs/A%20Link%20to%20the%20Past/retroarch-network-commands-en.png) 4. Go to Main Menu --> Online Updater --> Core Downloader. Scroll down and select "Nintendo - SNES / SFC (bsnes-mercury Performance)". diff --git a/worlds/soe/docs/multiworld_en.md b/worlds/soe/docs/multiworld_en.md index 37c40fa8bf..115fe5ea1a 100644 --- a/worlds/soe/docs/multiworld_en.md +++ b/worlds/soe/docs/multiworld_en.md @@ -101,7 +101,7 @@ You only have to do these steps once. 2. Go to Settings --> User Interface. Set "Show Advanced Settings" to ON. 3. Go to Settings --> Network. Set "Network Commands" to ON. (It is found below Request Device 16.) Leave the default Network Command Port at 55355. -![Screenshot of Network Commands setting](/static/assets/tutorial/retroarch-network-commands-en.png) +![Screenshot of Network Commands setting](/static/generated/docs/A%20Link%20to%20the%20Past/retroarch-network-commands-en.png) 4. Go to Main Menu --> Online Updater --> Core Downloader. Scroll down and select "Nintendo - SNES / SFC (bsnes-mercury Performance)". diff --git a/worlds/timespinner/docs/setup_en.md b/worlds/timespinner/docs/setup_en.md index 91c0fd897d..ae8c97a1b3 100644 --- a/worlds/timespinner/docs/setup_en.md +++ b/worlds/timespinner/docs/setup_en.md @@ -33,7 +33,7 @@ randomized mode. For more info see the [ReadMe](https://github.com/JarnoWesthof/ ## Where do I get a config file? -The [Player Settings](https://archipelago.gg/games/Timespinner/player-settings) page on the website allows you to +The [Player Settings](/games/Timespinner/player-settings) page on the website allows you to configure your personal settings and export them into a config file * The Timespinner Randomizer option "StinkyMaw" is currently always enabled for Archipelago generated seeds diff --git a/worlds/witness/docs/setup_en.md b/worlds/witness/docs/setup_en.md index c5c31a8907..ce07451949 100644 --- a/worlds/witness/docs/setup_en.md +++ b/worlds/witness/docs/setup_en.md @@ -3,7 +3,7 @@ ## Required Software - [The Witness (Steam)](https://store.steampowered.com/app/210970/The_Witness/) -- [The Witness Archipalego Randomizer](https://github.com/JarnoWesthof/The-Witness-Randomizer-for-Archipelago/releases) +- [The Witness Archipelago Randomizer](https://github.com/JarnoWesthof/The-Witness-Randomizer-for-Archipelago/releases) ## Optional Software @@ -18,7 +18,7 @@ It is recommended to do every single one of these steps when you connect to a wo 1. Launch The Witness 2. Start a fresh save (unless you have absolutely no other choice) 3. Do not move -4. Launch [The Witness Archipalego Randomizer](https://github.com/JarnoWesthof/The-Witness-Randomizer-for-Archipelago) +4. Launch [The Witness Archipelago Randomizer](https://github.com/JarnoWesthof/The-Witness-Randomizer-for-Archipelago) 5. Enter the Archipelago address, slot name and password 6. Press "Randomize" 7. Wait for the randomization to fully finish before moving in-game From 45bca78e75178026720680ed07ca3f0b683d8eb5 Mon Sep 17 00:00:00 2001 From: alwaysintreble Date: Wed, 18 May 2022 14:23:27 -0500 Subject: [PATCH 088/149] docs: add tutorials to api documentation --- docs/api.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/api.md b/docs/api.md index 02c6414481..7c81adb3cd 100644 --- a/docs/api.md +++ b/docs/api.md @@ -67,6 +67,11 @@ for your world specifically on the webhost. `bug_report_page` (optional) can be a link to a bug reporting page, most likely a GitHub issue page, that will be placed by the site to help direct users to report bugs. +`tutorials` list of `Tutorial` classes where each class represents a guide to be generated on the webhost. + +`game_info_languages` (optional) List of strings for defining the existing gameinfo pages your game supports. The documents must be +prefixed with the same string as defined here. Default already has 'en'. + ### MultiWorld Object The `MultiWorld` object references the whole multiworld (all items and locations From 90d506ee7c925a8d2025c344edb59ebb2b39829d Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Wed, 18 May 2022 14:54:13 +0200 Subject: [PATCH 089/149] Fill: fix type-crash on unfilled having either str or Location Fill: speed up Counter creation by skipping intermediary list creation --- Fill.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Fill.py b/Fill.py index cdb39b6544..855f86caef 100644 --- a/Fill.py +++ b/Fill.py @@ -220,15 +220,15 @@ def distribute_items_restrictive(world: MultiWorld) -> None: restitempool, defaultlocations = fast_fill( world, restitempool, defaultlocations) unplaced = progitempool + restitempool - unfilled = [location.name for location in defaultlocations] + unfilled = defaultlocations if unplaced or unfilled: logging.warning( f'Unplaced items({len(unplaced)}): {unplaced} - Unfilled Locations({len(unfilled)}): {unfilled}') - items_counter = Counter([location.item.player for location in world.get_locations() if location.item]) - locations_counter = Counter([location.player for location in world.get_locations()]) - items_counter.update([item.player for item in unplaced]) - locations_counter.update([location.player for location in unfilled]) + items_counter = Counter(location.item.player for location in world.get_locations() if location.item) + locations_counter = Counter(location.player for location in world.get_locations()) + items_counter.update(item.player for item in unplaced) + locations_counter.update(location.player for location in unfilled) print_data = {"items": items_counter, "locations": locations_counter} logging.info(f'Per-Player counts: {print_data})') From 551cf8442f8e9c9bb11022a9e33f204d1f90e806 Mon Sep 17 00:00:00 2001 From: TheCondor07 Date: Wed, 18 May 2022 17:27:38 -0400 Subject: [PATCH 090/149] Starcraft 2 Wings of Liberty AP Implementation (#528) --- Launcher.py | 2 + README.md | 1 + StarcraftClient.py | 520 ++++++++++++++++++ inno_setup.iss | 4 + setup.py | 2 +- worlds/sc2wol/Items.py | 169 ++++++ worlds/sc2wol/Locations.py | 186 +++++++ worlds/sc2wol/LogicMixin.py | 49 ++ worlds/sc2wol/Options.py | 48 ++ worlds/sc2wol/Regions.py | 162 ++++++ worlds/sc2wol/__init__.py | 173 ++++++ .../docs/en_Starcraft 2 Wings of Liberty.md | 33 ++ worlds/sc2wol/docs/setup_en.md | 33 ++ worlds/sc2wol/requirements.txt | 3 + 14 files changed, 1384 insertions(+), 1 deletion(-) create mode 100644 StarcraftClient.py create mode 100644 worlds/sc2wol/Items.py create mode 100644 worlds/sc2wol/Locations.py create mode 100644 worlds/sc2wol/LogicMixin.py create mode 100644 worlds/sc2wol/Options.py create mode 100644 worlds/sc2wol/Regions.py create mode 100644 worlds/sc2wol/__init__.py create mode 100644 worlds/sc2wol/docs/en_Starcraft 2 Wings of Liberty.md create mode 100644 worlds/sc2wol/docs/setup_en.md create mode 100644 worlds/sc2wol/requirements.txt diff --git a/Launcher.py b/Launcher.py index 9ebba4e684..7c53a120eb 100644 --- a/Launcher.py +++ b/Launcher.py @@ -152,6 +152,8 @@ components: Iterable[Component] = ( Component('FF1 Client', 'FF1Client'), # ChecksFinder Component('ChecksFinder Client', 'ChecksFinderClient'), + # Starcraft 2 + Component('Starcraft 2 Client', 'StarcraftClient'), # Functions Component('Open host.yaml', func=open_host_yaml), Component('Open Patch', func=open_patch), diff --git a/README.md b/README.md index e073c383f3..6b6dac410f 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,7 @@ Currently, the following games are supported: * Hollow Knight * The Witness * Sonic Adventure 2: Battle +* Starcraft 2: Wings of Liberty For setup and instructions check out our [tutorials page](https://archipelago.gg/tutorial/). Downloads can be found at [Releases](https://github.com/ArchipelagoMW/Archipelago/releases), including compiled diff --git a/StarcraftClient.py b/StarcraftClient.py new file mode 100644 index 0000000000..db4402d95e --- /dev/null +++ b/StarcraftClient.py @@ -0,0 +1,520 @@ +from __future__ import annotations + +import sys +import multiprocessing +import logging +import asyncio +import nest_asyncio + +import sc2 + +from sc2.main import run_game +from sc2.data import Race +from sc2.bot_ai import BotAI +from sc2.player import Bot +from worlds.sc2wol.Items import lookup_id_to_name, item_table +from worlds.sc2wol.Locations import SC2WOL_LOC_ID_OFFSET + +from Utils import init_logging + +if __name__ == "__main__": + init_logging("SC2Client", exception_logger="Client") + +logger = logging.getLogger("Client") +sc2_logger = logging.getLogger("Starcraft2") + +import colorama + +from NetUtils import * +from CommonClient import CommonContext, server_loop, console_loop, ClientCommandProcessor, gui_enabled, get_base_parser + +nest_asyncio.apply() + +class StarcraftClientProcessor(ClientCommandProcessor): + ctx: Context + + def _cmd_play(self, mission_id: str = "") -> bool: + """Start a Starcraft 2 mission""" + + options = mission_id.split() + num_options = len(options) + + if num_options > 0: + mission_number = int(options[0]) + + if is_mission_available(mission_number, self.ctx.checked_locations, mission_req_table): + asyncio.create_task(starcraft_launch(self.ctx, mission_number), name="Starcraft Launch") + else: + sc2_logger.info( + "This mission is not currently unlocked. Use /unfinished or /available to see what is available.") + + else: + sc2_logger.info("Mission ID needs to be specified. Use /unfinished or /available to view ids for available missions.") + + return True + + def _cmd_available(self) -> bool: + """Get what missions are currently available to play""" + + request_available_missions(self.ctx.checked_locations, mission_req_table) + return True + + def _cmd_unfinished(self) -> bool: + """Get what missions are currently available to play and have not had all locations checked""" + + request_unfinished_missions(self.ctx.checked_locations, mission_req_table) + return True + + +class Context(CommonContext): + command_processor = StarcraftClientProcessor + game = "Starcraft 2 Wings of Liberty" + items_handling = 0b111 + difficulty = -1 + all_in_choice = 0 + items_rec_to_announce = [] + rec_announce_pos = 0 + items_sent_to_announce = [] + sent_announce_pos = 0 + announcements = [] + announcement_pos = 0 + + async def server_auth(self, password_requested: bool = False): + if password_requested and not self.password: + await super(Context, self).server_auth(password_requested) + if not self.auth: + logger.info('Enter slot name:') + self.auth = await self.console_input() + + await self.send_connect() + + def on_package(self, cmd: str, args: dict): + if cmd in {"Connected"}: + self.difficulty = args["slot_data"]["game_difficulty"] + self.all_in_choice = args["slot_data"]["all_in_map"] + if cmd in {"PrintJSON"}: + noted = False + if "receiving" in args: + if args["receiving"] == self.slot: + self.announcements.append(args["data"]) + noted = True + if not noted and "item" in args: + if args["item"].player == self.slot: + self.announcements.append(args["data"]) + + def run_gui(self): + from kvui import GameManager + + class SC2Manager(GameManager): + logging_pairs = [ + ("Client", "Archipelago"), + ("Starcraft2", "Starcraft2"), + ] + base_title = "Archipelago Starcraft 2 Client" + + self.ui = SC2Manager(self) + self.ui_task = asyncio.create_task(self.ui.async_run(), name="UI") + + +async def main(): + multiprocessing.freeze_support() + parser = get_base_parser() + parser.add_argument('--loglevel', default='info', choices=['debug', 'info', 'warning', 'error', 'critical']) + args = parser.parse_args() + + ctx = Context(args.connect, args.password) + if ctx.server_task is None: + ctx.server_task = asyncio.create_task(server_loop(ctx), name="ServerLoop") + + input_task = None + if gui_enabled: + ctx.run_gui() + ctx.run_cli() + + if sys.stdin: + input_task = asyncio.create_task(console_loop(ctx), name="Input") + + await ctx.exit_event.wait() + + ctx.server_address = None + ctx.snes_reconnect_address = None + await ctx.shutdown() + + if ui_task: + await ui_task + + if input_task: + input_task.cancel() + +maps_table = ["ap_traynor01", "ap_traynor02", "ap_traynor03", "ap_thanson01", "ap_thanson02", "ap_thanson03a", "ap_thanson03b", "ap_ttychus01", + "ap_ttychus02", "ap_ttychus03", "ap_ttychus04", "ap_ttychus05", "ap_ttosh01", "ap_ttosh02", "ap_ttosh03a", "ap_ttosh03b", + "ap_thorner01", "ap_thorner02", "ap_thorner03", "ap_thorner04", "ap_thorner05s", "ap_tzeratul01", "ap_tzeratul02", + "ap_tzeratul03", "ap_tzeratul04", "ap_tvalerian01", "ap_tvalerian02a", "ap_tvalerian02b", "ap_tvalerian03"] + + +def calculate_items(items): + unit_unlocks = 0 + armory1_unlocks = 0 + armory2_unlocks = 0 + upgrade_unlocks = 0 + building_unlocks = 0 + merc_unlocks = 0 + lab_unlocks = 0 + protoss_unlock = 0 + minerals = 0 + vespene = 0 + + for item in items: + data = lookup_id_to_name[item.item] + + if item_table[data].type == "Unit": + unit_unlocks += (1 << item_table[data].number) + elif item_table[data].type == "Upgrade": + upgrade_unlocks += (1 << item_table[data].number) + elif item_table[data].type == "Armory 1": + armory1_unlocks += (1 << item_table[data].number) + elif item_table[data].type == "Armory 2": + armory2_unlocks += (1 << item_table[data].number) + elif item_table[data].type == "Building": + building_unlocks += (1 << item_table[data].number) + elif item_table[data].type == "Mercenary": + merc_unlocks += (1 << item_table[data].number) + elif item_table[data].type == "Laboratory": + lab_unlocks += (1 << item_table[data].number) + elif item_table[data].type == "Protoss": + protoss_unlock += (1 << item_table[data].number) + elif item_table[data].type == "Minerals": + minerals += item_table[data].number + elif item_table[data].type == "Vespene": + vespene += item_table[data].number + + return [unit_unlocks, upgrade_unlocks, armory1_unlocks, armory2_unlocks, building_unlocks, merc_unlocks, + lab_unlocks, protoss_unlock, minerals, vespene] + + +def calc_difficulty(difficulty): + if difficulty == 0: + return 'C' + elif difficulty == 1: + return 'N' + elif difficulty == 2: + return 'H' + elif difficulty == 3: + return 'B' + + return 'X' + + +async def starcraft_launch(ctx: Context, mission_id): + ctx.rec_announce_pos = len(ctx.items_rec_to_announce) + ctx.sent_announce_pos = len(ctx.items_sent_to_announce) + ctx.announcements_pos = len(ctx.announcements) + + run_game(sc2.maps.get(maps_table[mission_id-1]), [ + Bot(Race.Terran, ArchipelagoBot(ctx, mission_id), name="Archipelago")], realtime=True) + + +class ArchipelagoBot(sc2.bot_ai.BotAI): + game_running = False + mission_completed = False + first_bonus = False + second_bonus = False + third_bonus = False + fourth_bonus = False + fifth_bonus = False + sixth_bonus = False + seventh_bonus = False + eight_bonus = False + ctx: Context = None + mission_id = 0 + + can_read_game = False + + last_received_update = 0 + + def __init__(self, ctx: Context, mission_id): + self.ctx = ctx + self.mission_id = mission_id + + super(ArchipelagoBot, self).__init__() + + async def on_step(self, iteration: int): + game_state = 0 + if iteration == 0: + start_items = calculate_items(self.ctx.items_received) + difficulty = calc_difficulty(self.ctx.difficulty) + await self.chat_send("ArchipelagoLoad {} {} {} {} {} {} {} {} {} {} {} {}".format( + difficulty, start_items[0], start_items[1], start_items[2], start_items[3], start_items[4], start_items[5], + start_items[6], start_items[7], start_items[8], start_items[9], self.ctx.all_in_choice)) + self.last_received_update = len(self.ctx.items_received) + + else: + if self.ctx.announcement_pos < len(self.ctx.announcements): + index = 0 + message = "" + while index < len(self.ctx.announcements[self.ctx.announcement_pos]): + message += self.ctx.announcements[self.ctx.announcement_pos][index]["text"] + index += 1 + + index = 0 + start_rem_pos = -1 + # Remove unneeded [Color] tags + while index < len(message): + if message[index] == '[': + start_rem_pos = index + index += 1 + elif message[index] == ']' and start_rem_pos > -1: + temp_msg = "" + + if start_rem_pos > 0: + temp_msg = message[:start_rem_pos] + if index < len(message) - 1: + temp_msg += message[index+1:] + + message = temp_msg + index += start_rem_pos - index + start_rem_pos = -1 + else: + index += 1 + + await self.chat_send("SendMessage " + message) + self.ctx.announcement_pos += 1 + + # Archipelago reads the health + for unit in self.all_own_units(): + if unit.health_max == 38281: + game_state = int(38281 - unit.health) + can_read_game = True + + if iteration == 80 and not game_state & 1: + await self.chat_send("SendMessage Warning: Archipelago unable to connect or has lost connection to " + + "Starcraft 2 (This is likely a map issue)") + + if self.last_received_update < len(self.ctx.items_received): + current_items = calculate_items(self.ctx.items_received) + await self.chat_send("UpdateTech {} {} {} {} {} {} {} {}".format( + current_items[0], current_items[1], current_items[2], current_items[3], current_items[4], current_items[5], + current_items[6], current_items[7])) + self.last_received_update = len(self.ctx.items_received) + + if game_state & 1: + if not self.game_running: + print("Archipelago Connected") + self.game_running = True + + if can_read_game: + if game_state & (1 << 1) and not self.mission_completed: + if self.mission_id != 29: + print("Mission Completed") + await self.ctx.send_msgs([ + {"cmd": 'LocationChecks', "locations": [SC2WOL_LOC_ID_OFFSET + 100 * self.mission_id]}]) + self.mission_completed = True + else: + print("Game Complete") + await self.ctx.send_msgs([{"cmd": 'StatusUpdate', "status": ClientStatus.CLIENT_GOAL}]) + self.mission_completed = True + + if game_state & (1 << 2) and not self.first_bonus: + print("1st Bonus Collected") + await self.ctx.send_msgs( + [{"cmd": 'LocationChecks', "locations": [SC2WOL_LOC_ID_OFFSET + 100 * self.mission_id + 1]}]) + self.first_bonus = True + + if not self.second_bonus and game_state & (1 << 3): + print("2nd Bonus Collected") + await self.ctx.send_msgs( + [{"cmd": 'LocationChecks', "locations": [SC2WOL_LOC_ID_OFFSET + 100 * self.mission_id + 2]}]) + self.second_bonus = True + + if not self.third_bonus and game_state & (1 << 4): + print("3rd Bonus Collected") + await self.ctx.send_msgs( + [{"cmd": 'LocationChecks', "locations": [SC2WOL_LOC_ID_OFFSET + 100 * self.mission_id + 3]}]) + self.third_bonus = True + + if not self.fourth_bonus and game_state & (1 << 5): + print("4th Bonus Collected") + await self.ctx.send_msgs( + [{"cmd": 'LocationChecks', "locations": [SC2WOL_LOC_ID_OFFSET + 100 * self.mission_id + 4]}]) + self.fourth_bonus = True + + if not self.fifth_bonus and game_state & (1 << 6): + print("5th Bonus Collected") + await self.ctx.send_msgs( + [{"cmd": 'LocationChecks', "locations": [SC2WOL_LOC_ID_OFFSET + 100 * self.mission_id + 5]}]) + self.fifth_bonus = True + + if not self.sixth_bonus and game_state & (1 << 7): + print("6th Bonus Collected") + await self.ctx.send_msgs( + [{"cmd": 'LocationChecks', "locations": [SC2WOL_LOC_ID_OFFSET + 100 * self.mission_id + 6]}]) + self.sixth_bonus = True + + if not self.seventh_bonus and game_state & (1 << 8): + print("6th Bonus Collected") + await self.ctx.send_msgs( + [{"cmd": 'LocationChecks', "locations": [SC2WOL_LOC_ID_OFFSET + 100 * self.mission_id + 7]}]) + self.seventh_bonus = True + + if not self.eight_bonus and game_state & (1 << 9): + print("6th Bonus Collected") + await self.ctx.send_msgs( + [{"cmd": 'LocationChecks', "locations": [SC2WOL_LOC_ID_OFFSET + 100 * self.mission_id + 8]}]) + self.eight_bonus = True + + else: + await self.chat_send("LostConnection - Lost connection to game.") + + +class MissionInfo(typing.NamedTuple): + id: int + extra_locations: int + required_world: list[int] + number: int = 0 # number of worlds need beaten + + +mission_req_table = { + "Liberation Day": MissionInfo(1, 7, []), + "The Outlaws": MissionInfo(2, 2, [1]), + "Zero Hour": MissionInfo(3, 4, [2]), + "Evacuation": MissionInfo(4, 4, [3]), + "Outbreak": MissionInfo(5, 3, [4]), + "Safe Haven": MissionInfo(6, 1, [5], number=7), + "Haven's Fall": MissionInfo(7, 1, [5], number=7), + "Smash and Grab": MissionInfo(8, 5, [3]), + "The Dig": MissionInfo(9, 4, [8], number=8), + "The Moebius Factor": MissionInfo(10, 9, [9], number=11), + "Supernova": MissionInfo(11, 5, [10], number=14), + "Maw of the Void": MissionInfo(12, 6, [11]), + "Devil's Playground": MissionInfo(13, 3, [3], number=4), + "Welcome to the Jungle": MissionInfo(14, 4, [13]), + "Breakout": MissionInfo(15, 3, [14], number=8), + "Ghost of a Chance": MissionInfo(16, 6, [14], number=8), + "The Great Train Robbery": MissionInfo(17, 4, [3], number=6), + "Cutthroat": MissionInfo(18, 5, [17]), + "Engine of Destruction": MissionInfo(19, 6, [18]), + "Media Blitz": MissionInfo(20, 5, [19]), + "Piercing the Shroud": MissionInfo(21, 6, [20]), + "Whispers of Doom": MissionInfo(22, 4, [9]), + "A Sinister Turn": MissionInfo(23, 4, [22]), + "Echoes of the Future": MissionInfo(24, 3, [23]), + "In Utter Darkness": MissionInfo(25, 3, [24]), + "Gates of Hell": MissionInfo(26, 2, [12]), + "Belly of the Beast": MissionInfo(27, 4, [26]), + "Shatter the Sky": MissionInfo(28, 5, [26]), + "All-In": MissionInfo(29, -1, [27, 28]) +} + + +def calc_objectives_completed(mission, missions_info, locations_done): + objectives_complete = 0 + + if missions_info[mission].extra_locations > 0: + for i in range(missions_info[mission].extra_locations): + if (missions_info[mission].id * 100 + SC2WOL_LOC_ID_OFFSET + i) in locations_done: + objectives_complete += 1 + + return objectives_complete + + else: + return -1 + + +def request_unfinished_missions(locations_done, location_table): + message = "Unfinished Missions:" + + first_item = True + + unfinished_missions = calc_unfinished_missions(locations_done, location_table) + + for mission in unfinished_missions: + if first_item: + message += " {}[{}] ({}/{})".format(mission, location_table[mission].id, unfinished_missions[mission], + location_table[mission].extra_locations) + first_item = False + else: + message += ", {}[{}] ({}/{})".format(mission, location_table[mission].id, unfinished_missions[mission], + location_table[mission].extra_locations) + + sc2_logger.info(message) + + +def calc_unfinished_missions(locations_done, locations): + unfinished_missions = [] + locations_completed = [] + available_missions = calc_available_missions(locations_done, locations) + + for name in available_missions: + if not locations[name].extra_locations == -1: + objectives_completed = calc_objectives_completed(name, locations, locations_done) + + if objectives_completed < locations[name].extra_locations: + unfinished_missions.append(name) + locations_completed.append(objectives_completed) + + else: + unfinished_missions.append(name) + locations_completed.append(-1) + + return {unfinished_missions[i]: locations_completed[i] for i in range(len(unfinished_missions))} + + +def is_mission_available(mission_id_to_check, locations_done, locations): + unfinished_missions = calc_available_missions(locations_done, locations) + + for mission in unfinished_missions: + if locations[mission].id == mission_id_to_check: + return True + + return False + + +def request_available_missions(locations_done, location_table): + message = "Available Missions:" + + first_item = True + + missions = calc_available_missions(locations_done, location_table) + + for mission in missions: + if first_item: + message += " {}[{}]".format(mission, location_table[mission].id) + first_item = False + else: + message += ", {}[{}]".format(mission, location_table[mission].id) + + sc2_logger.info(message) + + +def calc_available_missions(locations_done, locations): + available_missions = [] + mission_complete = 0 + + # Get number of missions completed + for loc in locations_done: + if loc % 100 == 0: + mission_complete += 1 + + for name in locations: + if len(locations[name].required_world) >= 1: + reqs_complete = True + + for req_mission in locations[name].required_world: + if not(req_mission * 100 + SC2WOL_LOC_ID_OFFSET) in locations_done: + reqs_complete = False + break + + if reqs_complete and mission_complete >= locations[name].number: + available_missions.append(name) + else: + available_missions.append(name) + + return available_missions + + +if __name__ == '__main__': + colorama.init() + loop = asyncio.get_event_loop() + loop.run_until_complete(main()) + loop.close() + colorama.deinit() diff --git a/inno_setup.iss b/inno_setup.iss index 3ecb93c1f3..7f5d11f048 100644 --- a/inno_setup.iss +++ b/inno_setup.iss @@ -67,6 +67,7 @@ Name: "client/minecraft"; Description: "Minecraft"; Types: full playing; ExtraDi Name: "client/oot"; Description: "Ocarina of Time"; Types: full playing Name: "client/ff1"; Description: "Final Fantasy 1"; Types: full playing Name: "client/cf"; Description: "ChecksFinder"; Types: full playing +Name: "client/sc2"; Description: "Starcraft 2"; Types: full playing Name: "client/text"; Description: "Text, to !command and chat"; Types: full playing [Dirs] @@ -92,6 +93,7 @@ Source: "{#source_path}\ArchipelagoOoTClient.exe"; DestDir: "{app}"; Flags: igno Source: "{#source_path}\ArchipelagoOoTAdjuster.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: client/oot Source: "{#source_path}\ArchipelagoFF1Client.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: client/ff1 Source: "{#source_path}\ArchipelagoChecksFinderClient.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: client/cf +Source: "{#source_path}\ArchipelagoStarcraft2Client.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: client/sc2 Source: "vc_redist.x64.exe"; DestDir: {tmp}; Flags: deleteafterinstall [Icons] @@ -104,6 +106,7 @@ Name: "{group}\{#MyAppName} Minecraft Client"; Filename: "{app}\ArchipelagoMinec Name: "{group}\{#MyAppName} Ocarina of Time Client"; Filename: "{app}\ArchipelagoOoTClient.exe"; Components: client/oot Name: "{group}\{#MyAppName} Final Fantasy 1 Client"; Filename: "{app}\ArchipelagoFF1Client.exe"; Components: client/ff1 Name: "{group}\{#MyAppName} ChecksFinder Client"; Filename: "{app}\ArchipelagoChecksFinderClient.exe"; Components: client/cf +Name: "{group}\{#MyAppName} Starcraft 2 Client"; Filename: "{app}\ArchipelagoStarcraft2Client.exe"; Components: client/sc2 Name: "{commondesktop}\{#MyAppName} Folder"; Filename: "{app}"; Tasks: desktopicon Name: "{commondesktop}\{#MyAppName} Server"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon; Components: server @@ -113,6 +116,7 @@ Name: "{commondesktop}\{#MyAppName} Minecraft Client"; Filename: "{app}\Archipel Name: "{commondesktop}\{#MyAppName} Ocarina of Time Client"; Filename: "{app}\ArchipelagoOoTClient.exe"; Tasks: desktopicon; Components: client/oot Name: "{commondesktop}\{#MyAppName} Final Fantasy 1 Client"; Filename: "{app}\ArchipelagoFF1Client.exe"; Tasks: desktopicon; Components: client/ff1 Name: "{commondesktop}\{#MyAppName} ChecksFinder Client"; Filename: "{app}\ArchipelagoChecksFinderClient.exe"; Tasks: desktopicon; Components: client/cf +Name: "{commondesktop}\{#MyAppName} Starcraft 2 Client"; Filename: "{app}\ArchipelagoStarcraft2Client.exe"; Tasks: desktopicon; Components: client/sc2 [Run] diff --git a/setup.py b/setup.py index 0a1e5c4f0b..3124f4de0d 100644 --- a/setup.py +++ b/setup.py @@ -348,7 +348,7 @@ cx_Freeze.setup( "excludes": ["numpy", "Cython", "PySide2", "PIL", "pandas"], "zip_include_packages": ["*"], - "zip_exclude_packages": ["worlds", "kivy"], + "zip_exclude_packages": ["worlds", "kivy", "sc2"], "include_files": [], "include_msvcr": False, "replace_paths": [("*", "")], diff --git a/worlds/sc2wol/Items.py b/worlds/sc2wol/Items.py new file mode 100644 index 0000000000..4af3ed6ea5 --- /dev/null +++ b/worlds/sc2wol/Items.py @@ -0,0 +1,169 @@ +from BaseClasses import Item +import typing + +class ItemData(typing.NamedTuple): + code: typing.Optional[int] + type: typing.Optional[str] + number: typing.Optional[int] + progression: bool = False + never_exclude: bool = True + quantity: int = 1 + + +class StarcraftWoLItem(Item): + game: str = "Starcraft2WoL" + + def __init__(self, name, advancement: bool = False, code: int = None, player: int = None): + super(StarcraftWoLItem, self).__init__(name, advancement, code, player) + + +def get_full_item_list(): + return item_table + + +SC2WOL_ITEM_ID_OFFSET = 1000 + +item_table = { + "Marine": ItemData(0+SC2WOL_ITEM_ID_OFFSET, "Unit", 0, progression=True), + "Medic": ItemData(1+SC2WOL_ITEM_ID_OFFSET, "Unit", 1, progression=True), + "Firebat": ItemData(2+SC2WOL_ITEM_ID_OFFSET, "Unit", 2, progression=True), + "Marauder": ItemData(3+SC2WOL_ITEM_ID_OFFSET, "Unit", 3, progression=True), + "Reaper": ItemData(4+SC2WOL_ITEM_ID_OFFSET, "Unit", 4, progression=True), + "Hellion": ItemData(5+SC2WOL_ITEM_ID_OFFSET, "Unit", 5, progression=True), + "Vulture": ItemData(6+SC2WOL_ITEM_ID_OFFSET, "Unit", 6, progression=True), + "Goliath": ItemData(7+SC2WOL_ITEM_ID_OFFSET, "Unit", 7, progression=True), + "Diamondback": ItemData(8+SC2WOL_ITEM_ID_OFFSET, "Unit", 8, progression=True), + "Siege Tank": ItemData(9+SC2WOL_ITEM_ID_OFFSET, "Unit", 9, progression=True), + "Medivac": ItemData(10+SC2WOL_ITEM_ID_OFFSET, "Unit", 10, progression=True), + "Wraith": ItemData(11+SC2WOL_ITEM_ID_OFFSET, "Unit", 11, progression=True), + "Viking": ItemData(12+SC2WOL_ITEM_ID_OFFSET, "Unit", 12, progression=True), + "Banshee": ItemData(13+SC2WOL_ITEM_ID_OFFSET, "Unit", 13, progression=True), + "Battlecruiser": ItemData(14+SC2WOL_ITEM_ID_OFFSET, "Unit", 14, progression=True), + "Ghost": ItemData(15+SC2WOL_ITEM_ID_OFFSET, "Unit", 15, progression=True), + "Spectre": ItemData(16+SC2WOL_ITEM_ID_OFFSET, "Unit", 16, progression=True), + "Thor": ItemData(17+SC2WOL_ITEM_ID_OFFSET, "Unit", 17, progression=True), + + "Progressive Infantry Weapon": ItemData (100+SC2WOL_ITEM_ID_OFFSET, "Upgrade", 0, quantity=3), + "Progressive Infantry Armor": ItemData (102+SC2WOL_ITEM_ID_OFFSET, "Upgrade", 2, quantity=3), + "Progressive Vehicle Weapon": ItemData (103+SC2WOL_ITEM_ID_OFFSET, "Upgrade", 4, quantity=3), + "Progressive Vehicle Armor": ItemData (104+SC2WOL_ITEM_ID_OFFSET, "Upgrade", 6, quantity=3), + "Progressive Ship Weapon": ItemData (105+SC2WOL_ITEM_ID_OFFSET, "Upgrade", 8, quantity=3), + "Progressive Ship Armor": ItemData (106+SC2WOL_ITEM_ID_OFFSET, "Upgrade", 10, quantity=3), + + "Projectile Accelerator (Bunker)": ItemData (200+SC2WOL_ITEM_ID_OFFSET, "Armory 1", 0), + "Neosteel Bunker (Bunker)": ItemData (201+SC2WOL_ITEM_ID_OFFSET, "Armory 1", 1), + "Titanium Housing (Missile Turret)": ItemData (202+SC2WOL_ITEM_ID_OFFSET, "Armory 1", 2), + "Hellstorm Batteries (Missile Turret)": ItemData (203+SC2WOL_ITEM_ID_OFFSET, "Armory 1", 3), + "Advanced Construction (SCV)": ItemData (204+SC2WOL_ITEM_ID_OFFSET, "Armory 1", 4), + "Dual-Fusion Welders (SCV)": ItemData (205+SC2WOL_ITEM_ID_OFFSET, "Armory 1", 5), + "Fire-Suppression System (Building)": ItemData (206+SC2WOL_ITEM_ID_OFFSET, "Armory 1", 6), + "Orbital Command (Building)": ItemData (207+SC2WOL_ITEM_ID_OFFSET, "Armory 1", 7), + "Stimpack (Marine)": ItemData (208+SC2WOL_ITEM_ID_OFFSET, "Armory 1", 8), + "Combat Shield (Marine)": ItemData (209+SC2WOL_ITEM_ID_OFFSET, "Armory 1", 9), + "Advanced Medic Facilities (Medic)": ItemData (210+SC2WOL_ITEM_ID_OFFSET, "Armory 1", 10), + "Stabilizer Medpacks (Medic)": ItemData (211+SC2WOL_ITEM_ID_OFFSET, "Armory 1", 11), + "Incinerator Gauntlets (Firebat)": ItemData (212+SC2WOL_ITEM_ID_OFFSET, "Armory 1", 12), + "Juggernaut Plating (Firebat)": ItemData (213+SC2WOL_ITEM_ID_OFFSET, "Armory 1", 13), + "Concussive Shells (Marauder)": ItemData (214+SC2WOL_ITEM_ID_OFFSET, "Armory 1", 14), + "Kinetic Foam (Marauder)": ItemData (215+SC2WOL_ITEM_ID_OFFSET, "Armory 1", 15), + "U-238 Rounds (Reaper)": ItemData (216+SC2WOL_ITEM_ID_OFFSET, "Armory 1", 16), + "G-4 Clusterbomb (Reaper)": ItemData (217+SC2WOL_ITEM_ID_OFFSET, "Armory 1", 17), + + "Twin-Linked Flamethrower (Hellion)": ItemData(300+SC2WOL_ITEM_ID_OFFSET, "Armory 2", 0), + "Thermite Filaments (Hellion)": ItemData(301+SC2WOL_ITEM_ID_OFFSET, "Armory 2", 1), + "Cerberus Mine (Vulture)": ItemData(302 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 2), + "Replenishable Magazine (Vulture)": ItemData(303 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 3), + "Multi-Lock Weapons System (Goliath)": ItemData(304 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 4), + "Ares-Class Targeting System (Goliath)": ItemData(305 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 5), + "Tri-Lithium Power Cell (Diamondback)": ItemData(306 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 6), + "Shaped Hull (Diamondback)": ItemData(307 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 7), + "Maelstrom Rounds (Siege Tank)": ItemData(308 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 8), + "Shaped Blast (Siege Tank)": ItemData(309 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 9), + "Rapid Deployment Tube (Medivac)": ItemData(310 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 10), + "Advanced Healing AI (Medivac)": ItemData(311 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 11), + "Tomahawk Power Cells (Wraith)": ItemData(312 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 12), + "Displacement Field (Wraith)": ItemData(313 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 13), + "Ripwave Missiles (Viking)": ItemData(314 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 14), + "Phobos-Class Weapons System (Viking)": ItemData(315 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 15), + "Cross-Spectrum Dampeners (Banshee)": ItemData(316 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 16), + "Shockwave Missile Battery (Banshee)": ItemData(317 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 17), + "Missile Pods (Battlecruiser)": ItemData(318 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 18), + "Defensive Matrix (Battlecruiser)": ItemData(319 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 19), + "Ocular Implants (Ghost)": ItemData(320 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 20), + "Crius Suit (Ghost)": ItemData(321 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 21), + "Psionic Lash (Spectre)": ItemData(322 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 22), + "Nyx-Class Cloaking Module (Spectre)": ItemData(323 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 23), + "330mm Barrage Cannon (Thor)": ItemData(324 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 24), + "Immortality Protocol (Thor)": ItemData(325 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 25), + + "Bunker": ItemData (400+SC2WOL_ITEM_ID_OFFSET, "Building", 0, progression=True), + "Missile Turret": ItemData (401+SC2WOL_ITEM_ID_OFFSET, "Building", 1, progression=True), + "Sensor Tower": ItemData (402+SC2WOL_ITEM_ID_OFFSET, "Building", 2), + + "War Pigs": ItemData (500 + SC2WOL_ITEM_ID_OFFSET, "Mercenary", 0), + "Devil Dogs": ItemData(501 + SC2WOL_ITEM_ID_OFFSET, "Mercenary", 1), + "Hammer Securities": ItemData(502 + SC2WOL_ITEM_ID_OFFSET, "Mercenary", 2), + "Spartan Company": ItemData(503 + SC2WOL_ITEM_ID_OFFSET, "Mercenary", 3), + "Siege Breakers": ItemData(504 + SC2WOL_ITEM_ID_OFFSET, "Mercenary", 4), + "Hel's Angel": ItemData(505 + SC2WOL_ITEM_ID_OFFSET, "Mercenary", 5), + "Dusk Wings": ItemData(506 + SC2WOL_ITEM_ID_OFFSET, "Mercenary", 6), + "Jackson's Revenge": ItemData(507 + SC2WOL_ITEM_ID_OFFSET, "Mercenary", 7), + + "Ultra-Capacitors": ItemData(600 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 0), + "Vanadium Plating": ItemData(601 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 1), + "Orbital Depots": ItemData(602 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 2), + "Micro-Filtering": ItemData(603 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 3), + "Automated Refinery": ItemData(604 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 4), + "Command Center Reactor": ItemData(605 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 5), + "Raven": ItemData(606 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 6), + "Science Vessel": ItemData(607 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 7), + "Tech Reactor": ItemData(608 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 8), + "Orbital Strike": ItemData(609 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 9), + "Shrike Turret": ItemData(610 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 10), + "Fortified Bunker": ItemData(611 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 11), + "Planetary Fortress": ItemData(612 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 12), + "Perdition Turret": ItemData(613 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 13), + "Predator": ItemData(614 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 14), + "Hercules": ItemData(615 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 15, progression=True), + "Cellular Reactor": ItemData(616 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 16), + "Regenerative Bio-Steel": ItemData(617 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 17), + "Hive Mind Emulator": ItemData(618 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 18), + "Psi Disrupter": ItemData(619 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 19), + + "Zealot": ItemData (700 + SC2WOL_ITEM_ID_OFFSET, "Protoss", 0, progression=True), + "Stalker": ItemData (701 + SC2WOL_ITEM_ID_OFFSET, "Protoss", 1, progression=True), + "High Templar": ItemData (702 + SC2WOL_ITEM_ID_OFFSET, "Protoss", 2, progression=True), + "Dark Templar": ItemData (703 + SC2WOL_ITEM_ID_OFFSET, "Protoss", 3, progression=True), + "Immortal": ItemData (704 + SC2WOL_ITEM_ID_OFFSET, "Protoss", 4, progression=True), + "Colossus": ItemData (705 + SC2WOL_ITEM_ID_OFFSET, "Protoss", 5, progression=True), + "Phoenix": ItemData (706 + SC2WOL_ITEM_ID_OFFSET, "Protoss", 6, progression=True), + "Void Ray": ItemData (707 + SC2WOL_ITEM_ID_OFFSET, "Protoss", 7, progression=True), + "Carrier": ItemData (708 + SC2WOL_ITEM_ID_OFFSET, "Protoss", 8, progression=True), + + "+5 Starting Minerals": ItemData(800+SC2WOL_ITEM_ID_OFFSET, "Minerals", 5, quantity=0), + "+5 Starting Vespene": ItemData(801+SC2WOL_ITEM_ID_OFFSET, "Vespene", 5, quantity=0) +} + +basic_unit: typing.Tuple[str, ...] = ( + 'Marine', + 'Marauder', + 'Firebat', + 'Hellion', + 'Vulture' +) + + +item_name_groups = {"Missions": + {"Beat Liberation Day", "Beat The Outlaws", "Beat Zero Hour", "Beat Evacuation", + "None Outbreak", "Beat Safe Haven", "Beat Haven's Fall", "Beat Smash and Grab", "Beat The Dig", + "Beat The Moebius Factor", "Beat Supernova", "Beat Maw of the Void", "Beat Devil's Playground", + "Beat Welcome to the Jungle", "Beat Breakout", "Beat Ghost of a Chance", + "Beat The Great Train Robbery", "Beat Cutthroat", "Beat Engine of Destruction", + "Beat Media Blitz", "Beat Piercing the Shroud"}} + +filler_items: typing.Tuple[str, ...] = ( + '+5 Starting Minerals', + '+5 Starting Vespene' +) + +lookup_id_to_name: typing.Dict[int, str] = {data.code: item_name for item_name, data in get_full_item_list().items() if data.code} \ No newline at end of file diff --git a/worlds/sc2wol/Locations.py b/worlds/sc2wol/Locations.py new file mode 100644 index 0000000000..aa4f070be6 --- /dev/null +++ b/worlds/sc2wol/Locations.py @@ -0,0 +1,186 @@ +from typing import List, Tuple, Optional, Callable, NamedTuple +from BaseClasses import MultiWorld + +from BaseClasses import Location + +SC2WOL_LOC_ID_OFFSET = 1000 + +class SC2WoLLocation(Location): + game: str = "Starcraft2WoL" + + +class LocationData(NamedTuple): + region: str + name: str + code: Optional[int] + rule: Callable = lambda state: True + + +def get_locations(world: Optional[MultiWorld], player: Optional[int]) -> Tuple[LocationData, ...]: + location_table: List[LocationData] = [ + LocationData("Liberation Day", "Liberation Day: Victory", SC2WOL_LOC_ID_OFFSET + 100), + LocationData("Liberation Day", "Liberation Day: First Statue", SC2WOL_LOC_ID_OFFSET + 101), + LocationData("Liberation Day", "Liberation Day: Second Statue", SC2WOL_LOC_ID_OFFSET + 102), + LocationData("Liberation Day", "Liberation Day: Third Statue", SC2WOL_LOC_ID_OFFSET + 103), + LocationData("Liberation Day", "Liberation Day: Fourth Statue", SC2WOL_LOC_ID_OFFSET + 104), + LocationData("Liberation Day", "Liberation Day: Fifth Statue", SC2WOL_LOC_ID_OFFSET + 105), + LocationData("Liberation Day", "Liberation Day: Sixth Statue", SC2WOL_LOC_ID_OFFSET + 106), + LocationData("Liberation Day", "Beat Liberation Day", None), + LocationData("The Outlaws", "The Outlaws: Victory", SC2WOL_LOC_ID_OFFSET + 200), + LocationData("The Outlaws", "The Outlaws: Rebel Base", SC2WOL_LOC_ID_OFFSET + 201), + LocationData("The Outlaws", "Beat The Outlaws", None), + LocationData("Zero Hour", "Zero Hour: Victory", SC2WOL_LOC_ID_OFFSET + 300), + LocationData("Zero Hour", "Zero Hour: First Group Rescued", SC2WOL_LOC_ID_OFFSET + 301), + LocationData("Zero Hour", "Zero Hour: Second Group Rescued", SC2WOL_LOC_ID_OFFSET + 302), + LocationData("Zero Hour", "Zero Hour: Third Group Rescued", SC2WOL_LOC_ID_OFFSET + 303), + LocationData("Zero Hour", "Beat Zero Hour", None), + LocationData("Evacuation", "Evacuation: Victory", SC2WOL_LOC_ID_OFFSET + 400), + LocationData("Evacuation", "Evacuation: First Chysalis", SC2WOL_LOC_ID_OFFSET + 401), + LocationData("Evacuation", "Evacuation: Second Chysalis", SC2WOL_LOC_ID_OFFSET + 402), + LocationData("Evacuation", "Evacuation: Third Chysalis", SC2WOL_LOC_ID_OFFSET + 403), + LocationData("Evacuation", "Beat Evacuation", None), + LocationData("Outbreak", "Outbreak: Victory", SC2WOL_LOC_ID_OFFSET + 500), + LocationData("Outbreak", "Outbreak: Left Infestor", SC2WOL_LOC_ID_OFFSET + 501), + LocationData("Outbreak", "Outbreak: Right Infestor", SC2WOL_LOC_ID_OFFSET + 502), + LocationData("Outbreak", "Beat Outbreak", None), + LocationData("Safe Haven", "Safe Haven: Victory", SC2WOL_LOC_ID_OFFSET + 600), + LocationData("Safe Haven", "Beat Safe Haven", None), + LocationData("Haven's Fall", "Haven's Fall: Victory", SC2WOL_LOC_ID_OFFSET + 700), + LocationData("Haven's Fall", "Beat Haven's Fall", None), + LocationData("Smash and Grab", "Smash and Grab: Victory", SC2WOL_LOC_ID_OFFSET + 800), + LocationData("Smash and Grab", "Smash and Grab: First Relic", SC2WOL_LOC_ID_OFFSET + 801), + LocationData("Smash and Grab", "Smash and Grab: Second Relic", SC2WOL_LOC_ID_OFFSET + 802), + LocationData("Smash and Grab", "Smash and Grab: Third Relic", SC2WOL_LOC_ID_OFFSET + 803), + LocationData("Smash and Grab", "Smash and Grab: Fourth Relic", SC2WOL_LOC_ID_OFFSET + 804), + LocationData("Smash and Grab", "Beat Smash and Grab", None), + LocationData("The Dig", "The Dig: Victory", SC2WOL_LOC_ID_OFFSET + 900), + LocationData("The Dig", "The Dig: Left Relic", SC2WOL_LOC_ID_OFFSET + 901), + LocationData("The Dig", "The Dig: Right Ground Relic", SC2WOL_LOC_ID_OFFSET + 902), + LocationData("The Dig", "The Dig: Right Cliff Relic", SC2WOL_LOC_ID_OFFSET + 903), + LocationData("The Dig", "Beat The Dig", None), + LocationData("The Moebius Factor", "The Moebius Factor: 3rd Data Core", SC2WOL_LOC_ID_OFFSET + 1000), + LocationData("The Moebius Factor", "The Moebius Factor: 1st Data Core ", SC2WOL_LOC_ID_OFFSET + 1001), + LocationData("The Moebius Factor", "The Moebius Factor: 2nd Data Core", SC2WOL_LOC_ID_OFFSET + 1002), + LocationData("The Moebius Factor", "The Moebius Factor: South Rescue", SC2WOL_LOC_ID_OFFSET + 1003, + lambda state: state._sc2wol_able_to_rescue(world, player) or True), + LocationData("The Moebius Factor", "The Moebius Factor: Wall Rescue", SC2WOL_LOC_ID_OFFSET + 1004, + lambda state: state._sc2wol_able_to_rescue(world, player) or True), + LocationData("The Moebius Factor", "The Moebius Factor: Mid Rescue", SC2WOL_LOC_ID_OFFSET + 1005, + lambda state: state._sc2wol_able_to_rescue(world, player) or True), + LocationData("The Moebius Factor", "The Moebius Factor: Nydus Roof Rescue", SC2WOL_LOC_ID_OFFSET + 1006, + lambda state: state._sc2wol_able_to_rescue(world, player) or True), + LocationData("The Moebius Factor", "The Moebius Factor: Alive Inside Rescue", SC2WOL_LOC_ID_OFFSET + 1007, + lambda state: state._sc2wol_able_to_rescue(world, player) or True), + LocationData("The Moebius Factor", "The Moebius Factor: Brutalisk", SC2WOL_LOC_ID_OFFSET + 1008), + LocationData("The Moebius Factor", "Beat The Moebius Factor", None), + LocationData("Supernova", "Supernova: Victory", SC2WOL_LOC_ID_OFFSET + 1100), + LocationData("Supernova", "Supernova: West Relic", SC2WOL_LOC_ID_OFFSET + 1101), + LocationData("Supernova", "Supernova: North Relic", SC2WOL_LOC_ID_OFFSET + 1102), + LocationData("Supernova", "Supernova: South Relic", SC2WOL_LOC_ID_OFFSET + 1103), + LocationData("Supernova", "Supernova: East Relic", SC2WOL_LOC_ID_OFFSET + 1104), + LocationData("Supernova", "Beat Supernova", None), + LocationData("Maw of the Void", "Maw of the Void: Xel'Naga Vault", SC2WOL_LOC_ID_OFFSET + 1200), + LocationData("Maw of the Void", "Maw of the Void: Landing Zone Cleared", SC2WOL_LOC_ID_OFFSET + 1201), + LocationData("Maw of the Void", "Maw of the Void: Expansion Prisoners", SC2WOL_LOC_ID_OFFSET + 1202), + LocationData("Maw of the Void", "Maw of the Void: South Close Prisoners", SC2WOL_LOC_ID_OFFSET + 1203), + LocationData("Maw of the Void", "Maw of the Void: South Far Prisoners", SC2WOL_LOC_ID_OFFSET + 1204), + LocationData("Maw of the Void", "Maw of the Void: North Prisoners", SC2WOL_LOC_ID_OFFSET + 1205), + LocationData("Maw of the Void", "Beat Maw of the Void", None), + LocationData("Devil's Playground", "Devil's Playground: 8000 Minerals", SC2WOL_LOC_ID_OFFSET + 1300), + LocationData("Devil's Playground", "Devil's Playground: Tosh's Miners", SC2WOL_LOC_ID_OFFSET + 1301), + LocationData("Devil's Playground", "Devil's Playground: Brutalisk", SC2WOL_LOC_ID_OFFSET + 1302), + LocationData("Devil's Playground", "Beat Devil's Playground", None), + LocationData("Welcome to the Jungle", "Welcome to the Jungle: 7 Canisters", SC2WOL_LOC_ID_OFFSET + 1400), + LocationData("Welcome to the Jungle", "Welcome to the Jungle: Close Relic", SC2WOL_LOC_ID_OFFSET + 1401), + LocationData("Welcome to the Jungle", "Welcome to the Jungle: West Relic", SC2WOL_LOC_ID_OFFSET + 1402), + LocationData("Welcome to the Jungle", "Welcome to the Jungle: North-East Relic", SC2WOL_LOC_ID_OFFSET + 1403), + LocationData("Welcome to the Jungle", "Beat Welcome to the Jungle", None), + LocationData("Breakout", "Breakout: Main Prison", SC2WOL_LOC_ID_OFFSET + 1500), + LocationData("Breakout", "Breakout: Diamondback Prison", SC2WOL_LOC_ID_OFFSET + 1501), + LocationData("Breakout", "Breakout: Siegetank Prison", SC2WOL_LOC_ID_OFFSET + 1502), + LocationData("Breakout", "Beat Breakout", None), + LocationData("Ghost of a Chance", "Ghost of a Chance: Psi-Indoctrinator", SC2WOL_LOC_ID_OFFSET + 1600), + LocationData("Ghost of a Chance", "Ghost of a Chance: Terrazine Tank", SC2WOL_LOC_ID_OFFSET + 1601), + LocationData("Ghost of a Chance", "Ghost of a Chance: Jorium Stockpile", SC2WOL_LOC_ID_OFFSET + 1602), + LocationData("Ghost of a Chance", "Ghost of a Chance: First Island Spectres", SC2WOL_LOC_ID_OFFSET + 1603), + LocationData("Ghost of a Chance", "Ghost of a Chance: Second Island Spectres", SC2WOL_LOC_ID_OFFSET + 1604), + LocationData("Ghost of a Chance", "Ghost of a Chance: Third Island Spectres", SC2WOL_LOC_ID_OFFSET + 1605), + LocationData("Ghost of a Chance", "Beat Ghost of a Chance", None), + LocationData("The Great Train Robbery", "The Great Train Robbery: 8 Trains", SC2WOL_LOC_ID_OFFSET + 1700, lambda state: state._sc2wol_has_train_killers(world, player)), + LocationData("The Great Train Robbery", "The Great Train Robbery: North Defiler", SC2WOL_LOC_ID_OFFSET + 1701), + LocationData("The Great Train Robbery", "The Great Train Robbery: Mid Defiler", SC2WOL_LOC_ID_OFFSET + 1702), + LocationData("The Great Train Robbery", "The Great Train Robbery: South Defiler", SC2WOL_LOC_ID_OFFSET + 1703), + LocationData("The Great Train Robbery", "Beat The Great Train Robbery", None, + lambda state: state._sc2wol_has_train_killers(world, player)), + LocationData("Cutthroat", "Cutthroat: Orlan's Planetary", SC2WOL_LOC_ID_OFFSET + 1800), + LocationData("Cutthroat", "Cutthroat: Mira Han", SC2WOL_LOC_ID_OFFSET + 1801), + LocationData("Cutthroat", "Cutthroat: North Relic", SC2WOL_LOC_ID_OFFSET + 1802), + LocationData("Cutthroat", "Cutthroat: Mid Relic", SC2WOL_LOC_ID_OFFSET + 1803), + LocationData("Cutthroat", "Cutthroat: Southwest Relic", SC2WOL_LOC_ID_OFFSET + 1804), + LocationData("Cutthroat", "Beat Cutthroat", None), + LocationData("Engine of Destruction", "Engine of Destruction: Dominion Bases", SC2WOL_LOC_ID_OFFSET + 1900, + lambda state: state._sc2wol_has_mobile_anti_air(world, player)), + LocationData("Engine of Destruction", "Engine of Destruction: Odin", SC2WOL_LOC_ID_OFFSET + 1901), + LocationData("Engine of Destruction", "Engine of Destruction: Loki", SC2WOL_LOC_ID_OFFSET + 1902, + lambda state: state._sc2wol_has_mobile_anti_air(world, player)), + LocationData("Engine of Destruction", "Engine of Destruction: Lab Devourer", SC2WOL_LOC_ID_OFFSET + 1903), + LocationData("Engine of Destruction", "Engine of Destruction: North Devourer", SC2WOL_LOC_ID_OFFSET + 1904, + lambda state: state._sc2wol_has_mobile_anti_air(world, player)), + LocationData("Engine of Destruction", "Engine of Destruction: Southeast Devourer", SC2WOL_LOC_ID_OFFSET + 1905, + lambda state: state._sc2wol_has_mobile_anti_air(world, player)), + LocationData("Engine of Destruction", "Beat Engine of Destruction", None, + lambda state: state._sc2wol_has_mobile_anti_air(world, player)), + LocationData("Media Blitz", "Media Blitz: Full Upload", SC2WOL_LOC_ID_OFFSET + 2000), + LocationData("Media Blitz", "Media Blitz: Tower 1", SC2WOL_LOC_ID_OFFSET + 2001), + LocationData("Media Blitz", "Media Blitz: Tower 2", SC2WOL_LOC_ID_OFFSET + 2002), + LocationData("Media Blitz", "Media Blitz: Tower 3", SC2WOL_LOC_ID_OFFSET + 2003), + LocationData("Media Blitz", "Media Blitz: Science Facility", SC2WOL_LOC_ID_OFFSET + 2004), + LocationData("Media Blitz", "Beat Media Blitz", None), + LocationData("Piercing the Shroud", "Piercing the Shroud: Facility Escape", SC2WOL_LOC_ID_OFFSET + 2100), + LocationData("Piercing the Shroud", "Piercing the Shroud: Holding Cell Relic", SC2WOL_LOC_ID_OFFSET + 2101), + LocationData("Piercing the Shroud", "Piercing the Shroud: Brutalisk Relic", SC2WOL_LOC_ID_OFFSET + 2102), + LocationData("Piercing the Shroud", "Piercing the Shroud: First Escape Relic", SC2WOL_LOC_ID_OFFSET + 2103), + LocationData("Piercing the Shroud", "Piercing the Shroud: Second Escape Relic", SC2WOL_LOC_ID_OFFSET + 2104), + LocationData("Piercing the Shroud", "Piercing the Shroud: Brutalisk ", SC2WOL_LOC_ID_OFFSET + 2105), + LocationData("Piercing the Shroud", "Beat Piercing the Shroud", None), + LocationData("Whispers of Doom", "Whispers of Doom: Void Seeker Escape", SC2WOL_LOC_ID_OFFSET + 2200), + LocationData("Whispers of Doom", "Whispers of Doom: First Hatchery", SC2WOL_LOC_ID_OFFSET + 2201), + LocationData("Whispers of Doom", "Whispers of Doom: Second Hatchery", SC2WOL_LOC_ID_OFFSET + 2202), + LocationData("Whispers of Doom", "Whispers of Doom: Third Hatchery", SC2WOL_LOC_ID_OFFSET + 2203), + LocationData("Whispers of Doom", "Beat Whispers of Doom", None), + LocationData("A Sinister Turn", "A Sinister Turn: Preservers Freed", SC2WOL_LOC_ID_OFFSET + 2300, + lambda state: state._sc2wol_has_protoss_medium_units(world, player)), + LocationData("A Sinister Turn", "A Sinister Turn: Robotics Facility", SC2WOL_LOC_ID_OFFSET + 2301), + LocationData("A Sinister Turn", "A Sinister Turn: Dark Shrine", SC2WOL_LOC_ID_OFFSET + 2302), + LocationData("A Sinister Turn", "A Sinister Turn: Templar Archives", SC2WOL_LOC_ID_OFFSET + 2303, + lambda state: state._sc2wol_has_protoss_common_units(world, player)), + LocationData("A Sinister Turn", "Beat A Sinister Turn", None, + lambda state: state._sc2wol_has_protoss_medium_units(world, player)), + LocationData("Echoes of the Future", "Echoes of the Future: Overmind", SC2WOL_LOC_ID_OFFSET + 2400), + LocationData("Echoes of the Future", "Echoes of the Future: Close Obelisk", SC2WOL_LOC_ID_OFFSET + 2401), + LocationData("Echoes of the Future", "Echoes of the Future: West Obelisk", SC2WOL_LOC_ID_OFFSET + 2402), + LocationData("Echoes of the Future", "Beat Echoes of the Future", None), + LocationData("In Utter Darkness", "In Utter Darkness: Kills", SC2WOL_LOC_ID_OFFSET + 2500), + LocationData("In Utter Darkness", "In Utter Darkness: Protoss Archive", SC2WOL_LOC_ID_OFFSET + 2501), + LocationData("In Utter Darkness", "In Utter Darkness: Defeat", SC2WOL_LOC_ID_OFFSET + 2502), + LocationData("In Utter Darkness", "Beat In Utter Darkness", None), + LocationData("Gates of Hell", "Gates of Hell: Nydus Worms", SC2WOL_LOC_ID_OFFSET + 2600), + LocationData("Gates of Hell", "Gates of Hell: Large Army", SC2WOL_LOC_ID_OFFSET + 2601), + LocationData("Gates of Hell", "Beat Gates of Hell", None), + LocationData("Belly of the Beast", "Belly of the Beast: Extract", SC2WOL_LOC_ID_OFFSET + 2700), + LocationData("Belly of the Beast", "Belly of the Beast: First Charge", SC2WOL_LOC_ID_OFFSET + 2701), + LocationData("Belly of the Beast", "Belly of the Beast: Second Charge", SC2WOL_LOC_ID_OFFSET + 2702), + LocationData("Belly of the Beast", "Belly of the Beast: Third Charge", SC2WOL_LOC_ID_OFFSET + 2703), + LocationData("Belly of the Beast", "Beat Belly of the Beast", None), + LocationData("Shatter the Sky", "Shatter the Sky: Platform Destroyed", SC2WOL_LOC_ID_OFFSET + 2800), + LocationData("Shatter the Sky", "Shatter the Sky: Close Coolant Tower", SC2WOL_LOC_ID_OFFSET + 2801), + LocationData("Shatter the Sky", "Shatter the Sky: Northwest Coolant Tower", SC2WOL_LOC_ID_OFFSET + 2802), + LocationData("Shatter the Sky", "Shatter the Sky: Southeast Coolant Tower", SC2WOL_LOC_ID_OFFSET + 2803), + LocationData("Shatter the Sky", "Shatter the Sky: Southwest Coolant Tower", SC2WOL_LOC_ID_OFFSET + 2804), + LocationData("Shatter the Sky", "Shatter the Sky: Leviathan", SC2WOL_LOC_ID_OFFSET + 2805), + LocationData("Shatter the Sky", "Beat Shatter the Sky", None), + LocationData("All-In", "All-In: Victory", None) + ] + + return tuple(location_table) + diff --git a/worlds/sc2wol/LogicMixin.py b/worlds/sc2wol/LogicMixin.py new file mode 100644 index 0000000000..721473726f --- /dev/null +++ b/worlds/sc2wol/LogicMixin.py @@ -0,0 +1,49 @@ +from BaseClasses import MultiWorld +from ..AutoWorld import LogicMixin + + +class SC2WoLLogic(LogicMixin): + def _sc2wol_has_common_unit(self, world: MultiWorld, player: int) -> bool: + return self.has_any({'Marine', 'Marauder', 'Firebat', 'Hellion', 'Vulture'}, player) + + def _sc2wol_has_bunker_unit(self, world: MultiWorld, player: int) -> bool: + return self.has_any({'Marine', 'Marauder'}, player) + + def _sc2wol_has_air(self, world: MultiWorld, player: int) -> bool: + return self.has_any({'Viking', 'Wraith', 'Medivac', 'Banshee', 'Hercules'}, player) + + def _sc2wol_has_battlecruiser(self, world: MultiWorld, player: int) -> bool: + return self.has('Battlecruiser', player) + + def _sc2wol_has_air_anti_air(self, world: MultiWorld, player: int) -> bool: + return self.has_any({'Viking', 'Wraith'}, player) + + def _sc2wol_has_mobile_anti_air(self, world: MultiWorld, player: int) -> bool: + return self.has_any({'Marine', 'Goliath'}, player) or self._sc2wol_has_air_anti_air(world, player) + + def _sc2wol_has_anti_air(self, world: MultiWorld, player: int) -> bool: + return self.has('Missile Turret', player) or self._sc2wol_has_mobile_anti_air(world, player) + + def _sc2wol_has_heavy_defense(self, world: MultiWorld, player: int) -> bool: + return (self.has_any({'Siege Tank', 'Vulture'}, player) or + self.has('Bunker', player) and self._sc2wol_has_bunker_unit(world, player)) and \ + self._sc2wol_has_anti_air(world, player) + + def _sc2wol_has_train_killers(self, world: MultiWorld, player: int) -> bool: + return (self.has_any({'Siege Tank', 'Diamondback'}, player) or + self.has_all({'Reaper', "G-4 Clusterbomb"}, player) or self.has_all({'Spectre', 'Psionic Lash'}, player)) + + def _sc2wol_able_to_rescue(self, world: MultiWorld, player: int) -> bool: + return self.has_any({'Medivac', 'Hercules', 'Raven', 'Orbital Strike'}, player) + + def _sc2wol_has_protoss_common_units(self, world: MultiWorld, player: int) -> bool: + return self.has_any({'Zealot', 'Immortal', 'Stalker', 'Dark Templar'}, player) + + def _sc2wol_has_protoss_medium_units(self, world: MultiWorld, player: int) -> bool: + return self._sc2wol_has_protoss_common_units(world, player) and \ + self.has_any({'Stalker', 'Void Ray', 'Phoenix', 'Carrier'}, player) + + def _sc2wol_cleared_missions(self, world: MultiWorld, player: int, mission_count: int) -> bool: + return self.has_group("Missions", player, mission_count) + + diff --git a/worlds/sc2wol/Options.py b/worlds/sc2wol/Options.py new file mode 100644 index 0000000000..6a06872c6f --- /dev/null +++ b/worlds/sc2wol/Options.py @@ -0,0 +1,48 @@ +from typing import Dict +from BaseClasses import MultiWorld +from Options import Choice, Option + +class GameDifficulty(Choice): + """The difficulty of the campaign, affects enemy AI, starting units, and game speed.""" + display_name = "Game Difficulty" + option_casual = 0 + option_normal = 1 + option_hard = 2 + option_brutal = 3 + +class UpgradeBonus(Choice): + """Determines what lab upgrade to use, whether it is Ultra-Capacitors which boost attack speed with every weapon upgrade + or Vanadium Plating which boosts life with every armor upgrade.""" + display_name = "Upgrade Bonus" + option_ultra_capacitors = 0 + option_vanadium_plating = 1 + +class BunkerUpgrade(Choice): + """Determines what bunker lab upgrade to use, whether it is Shrike Turret which outfits bunkers with an automated turret or + Fortified Bunker which boosts the life of bunkers.""" + display_name = "Bunker Upgrade" + option_shrike_turret = 0 + option_fortified_bunker = 1 + +class AllInMap(Choice): + """Determines what verion of All-In (final map) that will be generated for the campaign.""" + display_name = "All In Map" + option_ground = 0 + option_air = 1 + + +# noinspection PyTypeChecker +sc2wol_options: Dict[str, Option] = { + "game_difficulty": GameDifficulty, + "upgrade_bonus": UpgradeBonus, + "bunker_upgrade": BunkerUpgrade, + "all_in_map": AllInMap, +} + +def get_option_value(world: MultiWorld, player: int, name: str) -> int: + option = getattr(world, name, None) + + if option == None: + return 0 + + return int(option[player].value) \ No newline at end of file diff --git a/worlds/sc2wol/Regions.py b/worlds/sc2wol/Regions.py new file mode 100644 index 0000000000..0f0c408e9c --- /dev/null +++ b/worlds/sc2wol/Regions.py @@ -0,0 +1,162 @@ +from typing import List, Set, Dict, Tuple, Optional, Callable +from BaseClasses import MultiWorld, Region, Entrance, Location, RegionType +from .Locations import LocationData + + +def create_regions(world: MultiWorld, player: int, locations: Tuple[LocationData, ...], location_cache: List[Location]): + locations_per_region = get_locations_per_region(locations) + + regions = [ + create_region(world, player, locations_per_region, location_cache, "Menu"), + create_region(world, player, locations_per_region, location_cache, "Liberation Day"), + create_region(world, player, locations_per_region, location_cache, "The Outlaws"), + create_region(world, player, locations_per_region, location_cache, "Zero Hour"), + create_region(world, player, locations_per_region, location_cache, "Evacuation"), + create_region(world, player, locations_per_region, location_cache, "Outbreak"), + create_region(world, player, locations_per_region, location_cache, "Safe Haven"), + create_region(world, player, locations_per_region, location_cache, "Haven's Fall"), + create_region(world, player, locations_per_region, location_cache, "Smash and Grab"), + create_region(world, player, locations_per_region, location_cache, "The Dig"), + create_region(world, player, locations_per_region, location_cache, "The Moebius Factor"), + create_region(world, player, locations_per_region, location_cache, "Supernova"), + create_region(world, player, locations_per_region, location_cache, "Maw of the Void"), + create_region(world, player, locations_per_region, location_cache, "Devil's Playground"), + create_region(world, player, locations_per_region, location_cache, "Welcome to the Jungle"), + create_region(world, player, locations_per_region, location_cache, "Breakout"), + create_region(world, player, locations_per_region, location_cache, "Ghost of a Chance"), + create_region(world, player, locations_per_region, location_cache, "The Great Train Robbery"), + create_region(world, player, locations_per_region, location_cache, "Cutthroat"), + create_region(world, player, locations_per_region, location_cache, "Engine of Destruction"), + create_region(world, player, locations_per_region, location_cache, "Media Blitz"), + create_region(world, player, locations_per_region, location_cache, "Piercing the Shroud"), + create_region(world, player, locations_per_region, location_cache, "Whispers of Doom"), + create_region(world, player, locations_per_region, location_cache, "A Sinister Turn"), + create_region(world, player, locations_per_region, location_cache, "Echoes of the Future"), + create_region(world, player, locations_per_region, location_cache, "In Utter Darkness"), + create_region(world, player, locations_per_region, location_cache, "Gates of Hell"), + create_region(world, player, locations_per_region, location_cache, "Belly of the Beast"), + create_region(world, player, locations_per_region, location_cache, "Shatter the Sky"), + create_region(world, player, locations_per_region, location_cache, "All-In") + ] + + if __debug__: + throwIfAnyLocationIsNotAssignedToARegion(regions, locations_per_region.keys()) + + world.regions += regions + + names: Dict[str, int] = {} + + connect(world, player, names, 'Menu', 'Liberation Day'), + connect(world, player, names, 'Liberation Day', 'The Outlaws', + lambda state: state._sc2wol_has_common_unit(world, player)), + connect(world, player, names, 'The Outlaws', 'Zero Hour'), + connect(world, player, names, 'Zero Hour', 'Evacuation', + lambda state: state._sc2wol_has_anti_air(world, player)), + connect(world, player, names, 'Evacuation', 'Outbreak'), + connect(world, player, names, "Outbreak", "Safe Haven", + lambda state: state._sc2wol_has_mobile_anti_air(world, player) and + state._sc2wol_cleared_missions(world, player, 7)), + connect(world, player, names, "Outbreak", "Haven's Fall", + lambda state: state._sc2wol_has_mobile_anti_air(world, player) and + state._sc2wol_cleared_missions(world, player, 7)), + connect(world, player, names, 'Zero Hour', 'Smash and Grab', + lambda state: state._sc2wol_has_anti_air(world, player)), + connect(world, player, names, 'Smash and Grab', 'The Dig', + lambda state: state._sc2wol_cleared_missions(world, player, 8) and + state._sc2wol_has_heavy_defense(world, player)), + connect(world, player, names, 'The Dig', 'The Moebius Factor', + lambda state: state._sc2wol_cleared_missions(world, player, 11) and + state._sc2wol_has_air(world, player)), + connect(world, player, names, 'The Moebius Factor', 'Supernova', + lambda state: state._sc2wol_cleared_missions(world, player, 14)), + connect(world, player, names, 'Supernova', 'Maw of the Void'), + connect(world, player, names, 'Zero Hour', "Devil's Playground", + lambda state: state._sc2wol_cleared_missions(world, player, 4)), + connect(world, player, names, "Devil's Playground", 'Welcome to the Jungle'), + connect(world, player, names, "Welcome to the Jungle", 'Breakout', + lambda state: state._sc2wol_cleared_missions(world, player, 8)), + connect(world, player, names, "Welcome to the Jungle", 'Ghost of a Chance', + lambda state: state._sc2wol_cleared_missions(world, player, 8)), + connect(world, player, names, "Zero Hour", 'The Great Train Robbery', + lambda state: state._sc2wol_cleared_missions(world, player, 6)), + connect(world, player, names, 'The Great Train Robbery', 'Cutthroat', + lambda state: state.has("Beat The Great Train Robbery", player)), + connect(world, player, names, 'Cutthroat', 'Engine of Destruction', + lambda state: state.has("Beat The Great Train Robbery", player)), + connect(world, player, names, 'Engine of Destruction', 'Media Blitz', + lambda state: state.has("Beat Engine of Destruction", player)), + connect(world, player, names, 'Media Blitz', 'Piercing the Shroud'), + connect(world, player, names, 'The Dig', 'Whispers of Doom',), + connect(world, player, names, 'Whispers of Doom', 'A Sinister Turn'), + connect(world, player, names, 'A Sinister Turn', 'Echoes of the Future', + lambda state: state.has("Beat A Sinister Turn", player)), + connect(world, player, names, 'Echoes of the Future', 'In Utter Darkness'), + connect(world, player, names, 'Maw of the Void', 'Gates of Hell'), + connect(world, player, names, 'Gates of Hell', 'Belly of the Beast'), + connect(world, player, names, 'Gates of Hell', 'Shatter the Sky'), + connect(world, player, names, 'Gates of Hell', 'All-In', + lambda state: state.has('Beat Gates of Hell', player) or state.has('Beat Shatter the Sky', player)) + + +def throwIfAnyLocationIsNotAssignedToARegion(regions: List[Region], regionNames: Set[str]): + existingRegions = set() + + for region in regions: + existingRegions.add(region.name) + + if (regionNames - existingRegions): + raise Exception("Starcraft: the following regions are used in locations: {}, but no such region exists".format(regionNames - existingRegions)) + + +def create_location(player: int, location_data: LocationData, region: Region, location_cache: List[Location]) -> Location: + location = Location(player, location_data.name, location_data.code, region) + location.access_rule = location_data.rule + + if id is None: + location.event = True + location.locked = True + + location_cache.append(location) + + return location + + +def create_region(world: MultiWorld, player: int, locations_per_region: Dict[str, List[LocationData]], location_cache: List[Location], name: str) -> Region: + region = Region(name, RegionType.Generic, name, player) + region.world = world + + if name in locations_per_region: + for location_data in locations_per_region[name]: + location = create_location(player, location_data, region, location_cache) + region.locations.append(location) + + return region + + +def connect(world: MultiWorld, player: int, used_names: Dict[str, int], source: str, target: str, rule: Optional[Callable] = None): + sourceRegion = world.get_region(source, player) + targetRegion = world.get_region(target, player) + + if target not in used_names: + used_names[target] = 1 + name = target + else: + used_names[target] += 1 + name = target + (' ' * used_names[target]) + + connection = Entrance(player, name, sourceRegion) + + if rule: + connection.access_rule = rule + + sourceRegion.exits.append(connection) + connection.connect(targetRegion) + + +def get_locations_per_region(locations: Tuple[LocationData, ...]) -> Dict[str, List[LocationData]]: + per_region: Dict[str, List[LocationData]] = {} + + for location in locations: + per_region.setdefault(location.region, []).append(location) + + return per_region diff --git a/worlds/sc2wol/__init__.py b/worlds/sc2wol/__init__.py new file mode 100644 index 0000000000..70bcafeec6 --- /dev/null +++ b/worlds/sc2wol/__init__.py @@ -0,0 +1,173 @@ +import typing + +from typing import List, Set, Tuple +from BaseClasses import Item, MultiWorld, Location, Tutorial +from ..AutoWorld import World, WebWorld +from .Items import StarcraftWoLItem, item_table, filler_items, item_name_groups, get_full_item_list, \ + basic_unit +from .Locations import get_locations +from .Regions import create_regions +from .Options import sc2wol_options, get_option_value +from .LogicMixin import SC2WoLLogic +from ..AutoWorld import World + + +class Starcraft2WoLWebWorld(WebWorld): + setup = Tutorial( + "Multiworld Setup Guide", + "A guide to setting up the Starcraft 2 randomizer connected to an Archipelago Multiworld", + "English", + "setup_en.md", + "setup/en", + ["TheCondor"] + ) + + tutorials = [setup] + +class SC2WoLWorld(World): + """ + StarCraft II: Wings of Liberty is a science fiction real-time strategy video game developed and published by Blizzard Entertainment. + Command Raynor's Raiders in collecting pieces of the Keystone in order to stop the zerg threat posed by the Queen of Blades. + """ + + game = "Starcraft 2 Wings of Liberty" + web = Starcraft2WoLWebWorld() + + item_name_to_id = {name: data.code for name, data in item_table.items()} + location_name_to_id = {location.name: location.code for location in get_locations(None, None)} + options = sc2wol_options + + item_name_groups = item_name_groups + locked_locations: typing.List[str] + location_cache: typing.List[Location] + + def _get_sc2wol_data(self): + return {} + + def __init__(self, world: MultiWorld, player: int): + super(SC2WoLWorld, self).__init__(world, player) + self.location_cache = [] + self.locked_locations = [] + + def _create_items(self, name: str): + data = get_full_item_list()[name] + return [self.create_item(name)] * data.quantity + + def create_item(self, name: str) -> Item: + data = get_full_item_list()[name] + return StarcraftWoLItem(name, data.progression, data.code, self.player) + + def create_regions(self): + create_regions(self.world, self.player, get_locations(self.world, self.player), + self.location_cache) + + def generate_basic(self): + excluded_items = get_excluded_items(self, self.world, self.player) + + assign_starter_items(self.world, self.player, excluded_items, self.locked_locations) + + pool = get_item_pool(self.world, self.player, excluded_items) + + fill_item_pool_with_dummy_items(self, self.world, self.player, self.locked_locations, self.location_cache, pool) + + self.world.itempool += pool + + def set_rules(self): + setup_events(self.world, self.player, self.locked_locations, self.location_cache) + + self.world.completion_condition[self.player] = lambda state: state.has('All-In: Victory', self.player) + + def get_filler_item_name(self) -> str: + return self.world.random.choice(filler_items) + + def fill_slot_data(self): + slot_data = self._get_sc2wol_data() + for option_name in sc2wol_options: + option = getattr(self.world, option_name)[self.player] + if slot_data.get(option_name, None) is None and type(option.value) in {str, int}: + slot_data[option_name] = int(option.value) + return slot_data + + +def setup_events(world: MultiWorld, player: int, locked_locations: typing.List[str], location_cache: typing.List[Location]): + for location in location_cache: + if location.address == None: + item = Item(location.name, True, None, player) + + locked_locations.append(location.name) + + location.place_locked_item(item) + + +def get_excluded_items(self: SC2WoLWorld, world: MultiWorld, player: int) -> Set[str]: + excluded_items: Set[str] = set() + + if get_option_value(world, player, "upgrade_bonus") == 1: + excluded_items.add("Ultra-Capacitors") + else: + excluded_items.add("Vanadium Plating") + + if get_option_value(world, player, "bunker_upgrade") == 1: + excluded_items.add("Shrike Turret") + else: + excluded_items.add("Fortified Bunker") + + for item in world.precollected_items[player]: + excluded_items.add(item.name) + + return excluded_items + + +def assign_starter_items(world: MultiWorld, player: int, excluded_items: Set[str], locked_locations: List[str]): + non_local_items = world.non_local_items[player].value + + local_basic_unit = tuple(item for item in basic_unit if item not in non_local_items) + if not local_basic_unit: + raise Exception("At least one basic unit must be local") + + assign_starter_item(world, player, excluded_items, locked_locations, 'Liberation Day: First Statue', + local_basic_unit) + + +def assign_starter_item(world: MultiWorld, player: int, excluded_items: Set[str], locked_locations: List[str], + location: str, item_list: Tuple[str, ...]): + + item_name = world.random.choice(item_list) + + excluded_items.add(item_name) + + item = create_item_with_correct_settings(world, player, item_name) + + world.get_location(location, player).place_locked_item(item) + + locked_locations.append(location) + + +def get_item_pool(world: MultiWorld, player: int, excluded_items: Set[str]) -> List[Item]: + pool: List[Item] = [] + + for name, data in item_table.items(): + if name not in excluded_items: + for _ in range(data.quantity): + item = create_item_with_correct_settings(world, player, name) + pool.append(item) + + return pool + +def fill_item_pool_with_dummy_items(self: SC2WoLWorld, world: MultiWorld, player: int, locked_locations: List[str], + location_cache: List[Location], pool: List[Item]): + for _ in range(len(location_cache) - len(locked_locations) - len(pool)): + item = create_item_with_correct_settings(world, player, self.get_filler_item_name()) + pool.append(item) + + +def create_item_with_correct_settings(world: MultiWorld, player: int, name: str) -> Item: + data = item_table[name] + + item = Item(name, data.progression, data.code, player) + item.never_exclude = data.never_exclude + + if not item.advancement: + return item + + return item \ No newline at end of file diff --git a/worlds/sc2wol/docs/en_Starcraft 2 Wings of Liberty.md b/worlds/sc2wol/docs/en_Starcraft 2 Wings of Liberty.md new file mode 100644 index 0000000000..6cf3fc7f68 --- /dev/null +++ b/worlds/sc2wol/docs/en_Starcraft 2 Wings of Liberty.md @@ -0,0 +1,33 @@ +# Starcraft 2 Wings of Liberty + +## Where is the settings page? + +The [player settings page for this game](../player-settings) contains all the options you need to configure and export a +config file. + +## What does randomization do to this game? + +Items which the player would normally acquire throughout the game have been moved around. Logic remains, so the game is +always able to be completed, but because of the item shuffle the player may need to access certain areas before they +would in the vanilla game. All rings and spells are also randomized into those item locations, therefore you can no +longer craft them at the alchemist + +## What is the goal of Starcraft 2 when randomized? + +The goal remains unchanged. Beat the final mission All In. + +## What items and locations get shuffled? + +Unit unlocks, upgrade unlocks, armory upgrades, laboratory researches, and mercenary unlocks can be shuffled, and all +bonus objectives, side missions, mission completions are now locations that can contain these items. + +## Which items can be in another player's world? + +Any of the items which can be shuffled may also be placed into another player's world. It is possible to choose to limit +certain items to your own world. + +## When the player receives an item, what happens? + +When the player receives an item, they will receive a message through their text client and in game if currently playing + a mission. They will immediately be able to use that unlock/upgrade. + diff --git a/worlds/sc2wol/docs/setup_en.md b/worlds/sc2wol/docs/setup_en.md new file mode 100644 index 0000000000..adce0e08c9 --- /dev/null +++ b/worlds/sc2wol/docs/setup_en.md @@ -0,0 +1,33 @@ +# Starcraft 2 Wings of Liberty Randomizer Setup Guide + +## Required Software + +- [Starcraft 2](https://starcraft2.com/en-us/) +- [Starcraft 2 AP Client](https://github.com/ArchipelagoMW/Archipelago) +- [Starcraft 2 AP Maps and Data](https://github.com/TheCondor07/Starcraft2ArchipelagoData) + +## General Concept + +Starcraft 2 AP Client launches a custom version of Starcraft 2 running modified Wings of Liberty campaign maps + to allow for randomization of the items + +## Installation Procedures + +Download latest release on [Starcraft 2 Archipelago Data Releases](https://github.com/TheCondor07/Starcraft2ArchipelagoData/releases) you +can find the .zip files on the releases page. Download the zip then extract the zip to the +folder where your Starcraft 2 game is installed. The just run ArchipelagoStarcraftClient.exe to start the client to + connect to a Multiworld Game. + +## Joining a MultiWorld Game + +1. Run ArchipelagoStarcraftClient.exe +2. Type in /connect [sever ip] +3. Insert slot name and password as prompted +4. Once connected, use /unfinished to find what missions you can play and '/play [mission id]' to launch a mission. For +new games under default settings the first mission available will always be Liberation Day[1] playable using the command +'/play 1' + +## Where do I get a config file? + +The [Player Settings](https://archipelago.gg/games/Starcraft%202%20Wings%20of%20Liberty/player-settings) page on the website allows you to +configure your personal settings and export them into a config file diff --git a/worlds/sc2wol/requirements.txt b/worlds/sc2wol/requirements.txt new file mode 100644 index 0000000000..9a2bec4f04 --- /dev/null +++ b/worlds/sc2wol/requirements.txt @@ -0,0 +1,3 @@ +nest-asyncio >= 1.5.5 +six >= 1.16.0 +apsc2 >= 5.5 \ No newline at end of file From c93eeb360755f03f554ec0db65d4d8b97cbfd47f Mon Sep 17 00:00:00 2001 From: alwaysintreble Date: Wed, 18 May 2022 17:08:29 -0500 Subject: [PATCH 091/149] tests: implement test to check for game_info file (#531) --- test/webhost/{TestTutorial.py => TestDocs.py} | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) rename test/webhost/{TestTutorial.py => TestDocs.py} (50%) diff --git a/test/webhost/TestTutorial.py b/test/webhost/TestDocs.py similarity index 50% rename from test/webhost/TestTutorial.py rename to test/webhost/TestDocs.py index f6bfc830e0..6922deb122 100644 --- a/test/webhost/TestTutorial.py +++ b/test/webhost/TestDocs.py @@ -1,12 +1,17 @@ import unittest +import Utils +import os + +import WebHost from worlds.AutoWorld import AutoWorldRegister -class TestTutorial(unittest.TestCase): +class TestDocs(unittest.TestCase): + def setUp(self) -> None: + self.tutorials_data = WebHost.create_ordered_tutorials_file() + def testHasTutorial(self): - import WebHost - tutorials_data = WebHost.create_ordered_tutorials_file() - games_with_tutorial = set(entry["gameTitle"] for entry in tutorials_data) + games_with_tutorial = set(entry["gameTitle"] for entry in self.tutorials_data) for game_name, world_type in AutoWorldRegister.world_types.items(): if not world_type.hidden: with self.subTest(game_name): @@ -20,3 +25,14 @@ class TestTutorial(unittest.TestCase): else: self.fail(f"{game_name} has no setup tutorial. " f"Games with Tutorial: {games_with_tutorial}") + + def testHasGameInfo(self): + for game_name, world_type in AutoWorldRegister.world_types.items(): + if not world_type.hidden: + target_path = Utils.local_path("WebHostLib", "static", "generated", "docs", game_name) + for game_info_lang in world_type.web.game_info_languages: + with self.subTest(game_name): + self.assertTrue( + os.path.isfile(Utils.local_path(target_path, f'{game_info_lang}_{game_name}.md')), + f'{game_name} missing game info file for "{game_info_lang}" language.' + ) From ad9985019287c448bdecfcaabb2f9e2bf3357a7a Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Thu, 19 May 2022 03:03:33 +0200 Subject: [PATCH 092/149] SC2: some cleanup (#532) * SC2: some cleanup * SC2: some cleanup in client --- StarcraftClient.py | 9 --------- worlds/sc2wol/__init__.py | 12 +++++------- 2 files changed, 5 insertions(+), 16 deletions(-) diff --git a/StarcraftClient.py b/StarcraftClient.py index db4402d95e..f7e21fa0d2 100644 --- a/StarcraftClient.py +++ b/StarcraftClient.py @@ -126,25 +126,16 @@ async def main(): if ctx.server_task is None: ctx.server_task = asyncio.create_task(server_loop(ctx), name="ServerLoop") - input_task = None if gui_enabled: ctx.run_gui() ctx.run_cli() - if sys.stdin: - input_task = asyncio.create_task(console_loop(ctx), name="Input") - await ctx.exit_event.wait() ctx.server_address = None ctx.snes_reconnect_address = None await ctx.shutdown() - if ui_task: - await ui_task - - if input_task: - input_task.cancel() maps_table = ["ap_traynor01", "ap_traynor02", "ap_traynor03", "ap_thanson01", "ap_thanson02", "ap_thanson03a", "ap_thanson03b", "ap_ttychus01", "ap_ttychus02", "ap_ttychus03", "ap_ttychus04", "ap_ttychus05", "ap_ttosh01", "ap_ttosh02", "ap_ttosh03a", "ap_ttosh03b", diff --git a/worlds/sc2wol/__init__.py b/worlds/sc2wol/__init__.py index 70bcafeec6..a06a37eedd 100644 --- a/worlds/sc2wol/__init__.py +++ b/worlds/sc2wol/__init__.py @@ -41,9 +41,6 @@ class SC2WoLWorld(World): locked_locations: typing.List[str] location_cache: typing.List[Location] - def _get_sc2wol_data(self): - return {} - def __init__(self, world: MultiWorld, player: int): super(SC2WoLWorld, self).__init__(world, player) self.location_cache = [] @@ -51,7 +48,7 @@ class SC2WoLWorld(World): def _create_items(self, name: str): data = get_full_item_list()[name] - return [self.create_item(name)] * data.quantity + return [self.create_item(name) for _ in range(data.quantity)] def create_item(self, name: str) -> Item: data = get_full_item_list()[name] @@ -59,7 +56,7 @@ class SC2WoLWorld(World): def create_regions(self): create_regions(self.world, self.player, get_locations(self.world, self.player), - self.location_cache) + self.location_cache) def generate_basic(self): excluded_items = get_excluded_items(self, self.world, self.player) @@ -81,10 +78,10 @@ class SC2WoLWorld(World): return self.world.random.choice(filler_items) def fill_slot_data(self): - slot_data = self._get_sc2wol_data() + slot_data = {} for option_name in sc2wol_options: option = getattr(self.world, option_name)[self.player] - if slot_data.get(option_name, None) is None and type(option.value) in {str, int}: + if type(option.value) in {str, int}: slot_data[option_name] = int(option.value) return slot_data @@ -154,6 +151,7 @@ def get_item_pool(world: MultiWorld, player: int, excluded_items: Set[str]) -> L return pool + def fill_item_pool_with_dummy_items(self: SC2WoLWorld, world: MultiWorld, player: int, locked_locations: List[str], location_cache: List[Location], pool: List[Item]): for _ in range(len(location_cache) - len(locked_locations) - len(pool)): From 051e19e9c1e708a35ce8c58c9b641e29974145ff Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Wed, 18 May 2022 22:30:19 +0200 Subject: [PATCH 093/149] Core: tkinter import may only be needed for type-info and can be skipped in certain cases for speed of startup --- Utils.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Utils.py b/Utils.py index fb2289d3b4..12870c8eb1 100644 --- a/Utils.py +++ b/Utils.py @@ -12,7 +12,11 @@ import io import collections import importlib import logging -from tkinter import Tk + +if typing.TYPE_CHECKING: + from tkinter import Tk +else: + Tk = typing.Any def tuplize_version(version: str) -> Version: From 764b6c78c5723445143200ba38dfa102dcf3c7a1 Mon Sep 17 00:00:00 2001 From: TheCondor07 Date: Wed, 18 May 2022 19:06:09 -0400 Subject: [PATCH 094/149] SC2: Turned weaker upgrades into trash items --- worlds/sc2wol/Items.py | 56 +++++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/worlds/sc2wol/Items.py b/worlds/sc2wol/Items.py index 4af3ed6ea5..4397c95e98 100644 --- a/worlds/sc2wol/Items.py +++ b/worlds/sc2wol/Items.py @@ -62,46 +62,46 @@ item_table = { "Combat Shield (Marine)": ItemData (209+SC2WOL_ITEM_ID_OFFSET, "Armory 1", 9), "Advanced Medic Facilities (Medic)": ItemData (210+SC2WOL_ITEM_ID_OFFSET, "Armory 1", 10), "Stabilizer Medpacks (Medic)": ItemData (211+SC2WOL_ITEM_ID_OFFSET, "Armory 1", 11), - "Incinerator Gauntlets (Firebat)": ItemData (212+SC2WOL_ITEM_ID_OFFSET, "Armory 1", 12), + "Incinerator Gauntlets (Firebat)": ItemData (212+SC2WOL_ITEM_ID_OFFSET, "Armory 1", 12, never_exclude=False), "Juggernaut Plating (Firebat)": ItemData (213+SC2WOL_ITEM_ID_OFFSET, "Armory 1", 13), "Concussive Shells (Marauder)": ItemData (214+SC2WOL_ITEM_ID_OFFSET, "Armory 1", 14), "Kinetic Foam (Marauder)": ItemData (215+SC2WOL_ITEM_ID_OFFSET, "Armory 1", 15), "U-238 Rounds (Reaper)": ItemData (216+SC2WOL_ITEM_ID_OFFSET, "Armory 1", 16), - "G-4 Clusterbomb (Reaper)": ItemData (217+SC2WOL_ITEM_ID_OFFSET, "Armory 1", 17), + "G-4 Clusterbomb (Reaper)": ItemData (217+SC2WOL_ITEM_ID_OFFSET, "Armory 1", 17, never_exclude=False), - "Twin-Linked Flamethrower (Hellion)": ItemData(300+SC2WOL_ITEM_ID_OFFSET, "Armory 2", 0), + "Twin-Linked Flamethrower (Hellion)": ItemData(300+SC2WOL_ITEM_ID_OFFSET, "Armory 2", 0, never_exclude=False), "Thermite Filaments (Hellion)": ItemData(301+SC2WOL_ITEM_ID_OFFSET, "Armory 2", 1), "Cerberus Mine (Vulture)": ItemData(302 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 2), "Replenishable Magazine (Vulture)": ItemData(303 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 3), "Multi-Lock Weapons System (Goliath)": ItemData(304 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 4), "Ares-Class Targeting System (Goliath)": ItemData(305 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 5), - "Tri-Lithium Power Cell (Diamondback)": ItemData(306 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 6), - "Shaped Hull (Diamondback)": ItemData(307 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 7), + "Tri-Lithium Power Cell (Diamondback)": ItemData(306 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 6, never_exclude=False), + "Shaped Hull (Diamondback)": ItemData(307 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 7, never_exclude=False), "Maelstrom Rounds (Siege Tank)": ItemData(308 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 8), "Shaped Blast (Siege Tank)": ItemData(309 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 9), - "Rapid Deployment Tube (Medivac)": ItemData(310 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 10), + "Rapid Deployment Tube (Medivac)": ItemData(310 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 10, never_exclude=False), "Advanced Healing AI (Medivac)": ItemData(311 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 11), - "Tomahawk Power Cells (Wraith)": ItemData(312 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 12), + "Tomahawk Power Cells (Wraith)": ItemData(312 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 12, never_exclude=False), "Displacement Field (Wraith)": ItemData(313 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 13), "Ripwave Missiles (Viking)": ItemData(314 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 14), "Phobos-Class Weapons System (Viking)": ItemData(315 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 15), - "Cross-Spectrum Dampeners (Banshee)": ItemData(316 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 16), + "Cross-Spectrum Dampeners (Banshee)": ItemData(316 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 16, never_exclude=False), "Shockwave Missile Battery (Banshee)": ItemData(317 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 17), - "Missile Pods (Battlecruiser)": ItemData(318 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 18), - "Defensive Matrix (Battlecruiser)": ItemData(319 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 19), + "Missile Pods (Battlecruiser)": ItemData(318 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 18, never_exclude=False), + "Defensive Matrix (Battlecruiser)": ItemData(319 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 19, never_exclude=False), "Ocular Implants (Ghost)": ItemData(320 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 20), "Crius Suit (Ghost)": ItemData(321 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 21), "Psionic Lash (Spectre)": ItemData(322 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 22), "Nyx-Class Cloaking Module (Spectre)": ItemData(323 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 23), - "330mm Barrage Cannon (Thor)": ItemData(324 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 24), - "Immortality Protocol (Thor)": ItemData(325 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 25), + "330mm Barrage Cannon (Thor)": ItemData(324 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 24, never_exclude=False), + "Immortality Protocol (Thor)": ItemData(325 + SC2WOL_ITEM_ID_OFFSET, "Armory 2", 25, never_exclude=False), "Bunker": ItemData (400+SC2WOL_ITEM_ID_OFFSET, "Building", 0, progression=True), "Missile Turret": ItemData (401+SC2WOL_ITEM_ID_OFFSET, "Building", 1, progression=True), "Sensor Tower": ItemData (402+SC2WOL_ITEM_ID_OFFSET, "Building", 2), "War Pigs": ItemData (500 + SC2WOL_ITEM_ID_OFFSET, "Mercenary", 0), - "Devil Dogs": ItemData(501 + SC2WOL_ITEM_ID_OFFSET, "Mercenary", 1), + "Devil Dogs": ItemData(501 + SC2WOL_ITEM_ID_OFFSET, "Mercenary", 1, never_exclude=False), "Hammer Securities": ItemData(502 + SC2WOL_ITEM_ID_OFFSET, "Mercenary", 2), "Spartan Company": ItemData(503 + SC2WOL_ITEM_ID_OFFSET, "Mercenary", 3), "Siege Breakers": ItemData(504 + SC2WOL_ITEM_ID_OFFSET, "Mercenary", 4), @@ -123,25 +123,25 @@ item_table = { "Fortified Bunker": ItemData(611 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 11), "Planetary Fortress": ItemData(612 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 12), "Perdition Turret": ItemData(613 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 13), - "Predator": ItemData(614 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 14), + "Predator": ItemData(614 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 14, never_exclude=False), "Hercules": ItemData(615 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 15, progression=True), - "Cellular Reactor": ItemData(616 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 16), - "Regenerative Bio-Steel": ItemData(617 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 17), + "Cellular Reactor": ItemData(616 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 16, never_exclude=False), + "Regenerative Bio-Steel": ItemData(617 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 17, never_exclude=False), "Hive Mind Emulator": ItemData(618 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 18), - "Psi Disrupter": ItemData(619 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 19), + "Psi Disrupter": ItemData(619 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 19, never_exclude=False), - "Zealot": ItemData (700 + SC2WOL_ITEM_ID_OFFSET, "Protoss", 0, progression=True), - "Stalker": ItemData (701 + SC2WOL_ITEM_ID_OFFSET, "Protoss", 1, progression=True), - "High Templar": ItemData (702 + SC2WOL_ITEM_ID_OFFSET, "Protoss", 2, progression=True), - "Dark Templar": ItemData (703 + SC2WOL_ITEM_ID_OFFSET, "Protoss", 3, progression=True), - "Immortal": ItemData (704 + SC2WOL_ITEM_ID_OFFSET, "Protoss", 4, progression=True), - "Colossus": ItemData (705 + SC2WOL_ITEM_ID_OFFSET, "Protoss", 5, progression=True), - "Phoenix": ItemData (706 + SC2WOL_ITEM_ID_OFFSET, "Protoss", 6, progression=True), - "Void Ray": ItemData (707 + SC2WOL_ITEM_ID_OFFSET, "Protoss", 7, progression=True), - "Carrier": ItemData (708 + SC2WOL_ITEM_ID_OFFSET, "Protoss", 8, progression=True), + "Zealot": ItemData(700 + SC2WOL_ITEM_ID_OFFSET, "Protoss", 0, progression=True), + "Stalker": ItemData(701 + SC2WOL_ITEM_ID_OFFSET, "Protoss", 1, progression=True), + "High Templar": ItemData(702 + SC2WOL_ITEM_ID_OFFSET, "Protoss", 2, progression=True), + "Dark Templar": ItemData(703 + SC2WOL_ITEM_ID_OFFSET, "Protoss", 3, progression=True), + "Immortal": ItemData(704 + SC2WOL_ITEM_ID_OFFSET, "Protoss", 4, progression=True), + "Colossus": ItemData(705 + SC2WOL_ITEM_ID_OFFSET, "Protoss", 5, progression=True), + "Phoenix": ItemData(706 + SC2WOL_ITEM_ID_OFFSET, "Protoss", 6, progression=True), + "Void Ray": ItemData(707 + SC2WOL_ITEM_ID_OFFSET, "Protoss", 7, progression=True), + "Carrier": ItemData(708 + SC2WOL_ITEM_ID_OFFSET, "Protoss", 8, progression=True), - "+5 Starting Minerals": ItemData(800+SC2WOL_ITEM_ID_OFFSET, "Minerals", 5, quantity=0), - "+5 Starting Vespene": ItemData(801+SC2WOL_ITEM_ID_OFFSET, "Vespene", 5, quantity=0) + "+5 Starting Minerals": ItemData(800+SC2WOL_ITEM_ID_OFFSET, "Minerals", 5, quantity=0, never_exclude=False), + "+5 Starting Vespene": ItemData(801+SC2WOL_ITEM_ID_OFFSET, "Vespene", 5, quantity=0, never_exclude=False) } basic_unit: typing.Tuple[str, ...] = ( From 23144ff20442a0c5df6a9437da202e81ada13341 Mon Sep 17 00:00:00 2001 From: Colin Lenzen <32756996+TriumphantBass@users.noreply.github.com> Date: Wed, 18 May 2022 18:04:06 -0700 Subject: [PATCH 095/149] [Timespinner] Add Show Item Drops in Bestiary --- worlds/timespinner/Options.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/worlds/timespinner/Options.py b/worlds/timespinner/Options.py index 60c3d331f0..13355ee8dd 100644 --- a/worlds/timespinner/Options.py +++ b/worlds/timespinner/Options.py @@ -209,6 +209,10 @@ class ShowBestiary(Toggle): "All entries in the bestiary are visible, without needing to kill one of a given enemy first" display_name = "Show Bestiary Entries" +class ShowDrops(Toggle): + "All item drops in the bestiary are visible, without needing an enemy to drop one of a given item first" + display_name = "Show Bestiary Item Drops" + # Some options that are available in the timespinner randomizer arent currently implemented timespinner_options: Dict[str, Option] = { "StartWithJewelryBox": StartWithJewelryBox, @@ -231,6 +235,7 @@ timespinner_options: Dict[str, Option] = { "ShopMultiplier": ShopMultiplier, "LootPool": LootPool, "ShowBestiary": ShowBestiary, + "ShowDrops": ShowDrops, "DeathLink": DeathLink, } @@ -242,4 +247,4 @@ def get_option_value(world: MultiWorld, player: int, name: str) -> Union[int, di if option == None: return 0 - return option[player].value \ No newline at end of file + return option[player].value From 2b702528fddf99d9c06124cab44d257ad6be4e8d Mon Sep 17 00:00:00 2001 From: weffjebster <94584218+weffjebster@users.noreply.github.com> Date: Wed, 18 May 2022 23:25:08 -0400 Subject: [PATCH 096/149] [Timespinner]HP cap setting (#536) --- worlds/timespinner/Options.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/worlds/timespinner/Options.py b/worlds/timespinner/Options.py index 13355ee8dd..601882b833 100644 --- a/worlds/timespinner/Options.py +++ b/worlds/timespinner/Options.py @@ -172,6 +172,13 @@ class DamageRandoOverrides(OptionDict): "Radiant": { "MinusOdds": 1, "NormalOdds": 1, "PlusOdds": 1 }, } +class HpCap(Range): + "Sets the number that Lunais's HP maxes out at." + display_name = "HP Cap" + range_start = 1 + range_end = 999 + default = 999 + class ShopFill(Choice): """Sets the items for sale in Merchant Crow's shops. Default: No sunglasses or trendy jacket, but sand vials for sale. @@ -230,6 +237,7 @@ timespinner_options: Dict[str, Option] = { "LoreChecks": LoreChecks, "DamageRando": DamageRando, "DamageRandoOverrides": DamageRandoOverrides, + "HpCap": HpCap, "ShopFill": ShopFill, "ShopWarpShards": ShopWarpShards, "ShopMultiplier": ShopMultiplier, From e6e44b8747227157204008c2b2bcf75c15fa6c82 Mon Sep 17 00:00:00 2001 From: TheCondor07 Date: Wed, 18 May 2022 23:32:52 -0400 Subject: [PATCH 097/149] SC2: Updated /available and /unfinished to better handle collects --- StarcraftClient.py | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/StarcraftClient.py b/StarcraftClient.py index f7e21fa0d2..c86ab04486 100644 --- a/StarcraftClient.py +++ b/StarcraftClient.py @@ -396,6 +396,8 @@ mission_req_table = { "All-In": MissionInfo(29, -1, [27, 28]) } +lookup_id_to_mission: typing.Dict[int, str] = {data.id: mission_name for mission_name, data in mission_req_table.items() if data.id} + def calc_objectives_completed(mission, missions_info, locations_done): objectives_complete = 0 @@ -479,33 +481,41 @@ def request_available_missions(locations_done, location_table): def calc_available_missions(locations_done, locations): available_missions = [] - mission_complete = 0 + missions_complete = 0 # Get number of missions completed for loc in locations_done: if loc % 100 == 0: - mission_complete += 1 + missions_complete += 1 for name in locations: - if len(locations[name].required_world) >= 1: - reqs_complete = True - - for req_mission in locations[name].required_world: - if not(req_mission * 100 + SC2WOL_LOC_ID_OFFSET) in locations_done: - reqs_complete = False - break - - if reqs_complete and mission_complete >= locations[name].number: - available_missions.append(name) - else: + if mission_reqs_completed(name, missions_complete, locations_done, locations): available_missions.append(name) return available_missions +def mission_reqs_completed(location_to_check, missions_complete, locations_done, locations): + if len(locations[location_to_check].required_world) >= 1: + + for req_mission in locations[location_to_check].required_world: + if not (req_mission * 100 + SC2WOL_LOC_ID_OFFSET) in locations_done: + return False + if not mission_reqs_completed(lookup_id_to_mission[req_mission], missions_complete, locations_done, locations): + return False + + if missions_complete >= locations[location_to_check].number: + return True + else: + return False + else: + return True + + if __name__ == '__main__': colorama.init() loop = asyncio.get_event_loop() loop.run_until_complete(main()) loop.close() colorama.deinit() + From dbf04585754fd5c78ded2c313c6218c0262670ec Mon Sep 17 00:00:00 2001 From: Alchav <59858495+Alchav@users.noreply.github.com> Date: Thu, 19 May 2022 09:37:26 -0400 Subject: [PATCH 098/149] Implement get_filler_item_name for various games (#451) --- worlds/alttp/__init__.py | 9 +++++++-- worlds/archipidle/__init__.py | 2 ++ worlds/ff1/__init__.py | 2 ++ worlds/minecraft/__init__.py | 3 +++ worlds/oot/__init__.py | 3 +++ worlds/rogue-legacy/__init__.py | 3 +++ worlds/sm/__init__.py | 15 +++++++++++++++ worlds/sm64ex/__init__.py | 3 +++ worlds/soe/__init__.py | 3 +++ worlds/spire/__init__.py | 3 +++ 10 files changed, 44 insertions(+), 2 deletions(-) diff --git a/worlds/alttp/__init__.py b/worlds/alttp/__init__.py index 05b42f21e0..b782a15d02 100644 --- a/worlds/alttp/__init__.py +++ b/worlds/alttp/__init__.py @@ -8,7 +8,7 @@ from BaseClasses import Item, CollectionState, Tutorial from .SubClasses import ALttPItem from ..AutoWorld import World, WebWorld, LogicMixin from .Options import alttp_options, smallkey_shuffle -from .Items import as_dict_item_table, item_name_groups, item_table +from .Items import as_dict_item_table, item_name_groups, item_table, GetBeemizerItem from .Regions import lookup_name_to_id, create_regions, mark_light_world_regions from .Rules import set_rules from .ItemPool import generate_itempool, difficulties @@ -17,6 +17,7 @@ from .Dungeons import create_dungeons from .Rom import LocalRom, patch_rom, patch_race_rom, patch_enemizer, apply_rom_settings, get_hash_string, \ get_base_rom_path, LttPDeltaPatch import Patch +from itertools import chain from .InvertedRegions import create_inverted_regions, mark_dark_world_regions from .EntranceShuffle import link_entrances, link_inverted_entrances, plando_connect @@ -479,7 +480,11 @@ class ALTTPWorld(World): trash_count -= 1 def get_filler_item_name(self) -> str: - return "Rupees (5)" # temporary + if self.world.goal[self.player] == "icerodhunt": + item = "Nothing" + else: + item = self.world.random.choice(chain(difficulties[self.world.difficulty[self.player]].extras[0:5])) + return GetBeemizerItem(self.world, self.player, item) def get_pre_fill_items(self): res = [] diff --git a/worlds/archipidle/__init__.py b/worlds/archipidle/__init__.py index 859b4d1838..e54530afea 100644 --- a/worlds/archipidle/__init__.py +++ b/worlds/archipidle/__init__.py @@ -70,6 +70,8 @@ class ArchipIDLEWorld(World): self.world.get_entrance('Entrance to IDLE Zone', self.player)\ .connect(self.world.get_region('IDLE Zone', self.player)) + def get_filler_item_name(self) -> str: + return self.world.random.choice(item_table) def create_region(world: MultiWorld, player: int, name: str, locations=None, exits=None): region = Region(name, None, name, player) diff --git a/worlds/ff1/__init__.py b/worlds/ff1/__init__.py index 8b1005619d..761d9fbbe4 100644 --- a/worlds/ff1/__init__.py +++ b/worlds/ff1/__init__.py @@ -111,6 +111,8 @@ class FF1World(World): return slot_data + def get_filler_item_name(self) -> str: + return self.world.random.choice(["Heal", "Pure", "Soft", "Tent", "Cabin", "House"]) def get_options(world: MultiWorld, name: str, player: int): return getattr(world, name, None)[player].value diff --git a/worlds/minecraft/__init__.py b/worlds/minecraft/__init__.py index 19cc9ba3dc..4c75e5a076 100644 --- a/worlds/minecraft/__init__.py +++ b/worlds/minecraft/__init__.py @@ -128,6 +128,9 @@ class MinecraftWorld(World): self.world.itempool += itempool + def get_filler_item_name(self) -> str: + return self.world.random.choices(list(junk_weights.keys()), weights=list(junk_weights.values()))[0] + def set_rules(self): set_advancement_rules(self.world, self.player) set_completion_rules(self.world, self.player) diff --git a/worlds/oot/__init__.py b/worlds/oot/__init__.py index 7bde676f34..7a9c52d586 100644 --- a/worlds/oot/__init__.py +++ b/worlds/oot/__init__.py @@ -1038,3 +1038,6 @@ class OOTWorld(World): all_state.stale[self.player] = True return all_state + + def get_filler_item_name(self) -> str: + return get_junk_item(count=1, pool=get_junk_pool(self))[0] diff --git a/worlds/rogue-legacy/__init__.py b/worlds/rogue-legacy/__init__.py index 9cff3736ba..a02396d33a 100644 --- a/worlds/rogue-legacy/__init__.py +++ b/worlds/rogue-legacy/__init__.py @@ -161,6 +161,9 @@ class LegacyWorld(World): self.world.itempool += itempool + def get_filler_item_name(self) -> str: + return self.world.random.choice(list(misc_items_table.keys())) + def create_regions(self): create_regions(self.world, self.player) diff --git a/worlds/sm/__init__.py b/worlds/sm/__init__.py index c08ab2dced..c3bf2d59e9 100644 --- a/worlds/sm/__init__.py +++ b/worlds/sm/__init__.py @@ -525,6 +525,21 @@ class SMWorld(World): item = next(x for x in ItemManager.Items.values() if x.Name == name) return SMItem(item.Name, True, item.Type, self.item_name_to_id[item.Name], player = self.player) + def get_filler_item_name(self) -> str: + if self.world.random.randint(0, 100) < self.world.minor_qty[self.player].value: + power_bombs = self.world.power_bomb_qty[self.player].value + missiles = self.world.missile_qty[self.player].value + super_missiles = self.world.super_qty[self.player].value + roll = self.world.random.randint(1, power_bombs + missiles + super_missiles) + if roll <= power_bombs: + return "Power Bomb" + elif roll <= power_bombs + missiles: + return "Missile" + else: + return "Super Missile" + else: + return "Nothing" + def pre_fill(self): if (self.variaRando.args.morphPlacement == "early") and next((item for item in self.world.itempool if item.player == self.player and item.name == "Morph Ball"), False): viable = [] diff --git a/worlds/sm64ex/__init__.py b/worlds/sm64ex/__init__.py index 7306f286a4..e268dcdacb 100644 --- a/worlds/sm64ex/__init__.py +++ b/worlds/sm64ex/__init__.py @@ -104,6 +104,9 @@ class SM64World(World): self.world.get_location("THI: Bob-omb Buddy", self.player).place_locked_item(self.create_item("Cannon Unlock THI")) self.world.get_location("RR: Bob-omb Buddy", self.player).place_locked_item(self.create_item("Cannon Unlock RR")) + def get_filler_item_name(self) -> str: + return "1Up Mushroom" + def fill_slot_data(self): return { "AreaRando": self.area_connections, diff --git a/worlds/soe/__init__.py b/worlds/soe/__init__.py index 0f29bad3dc..a30319ef26 100644 --- a/worlds/soe/__init__.py +++ b/worlds/soe/__init__.py @@ -336,6 +336,9 @@ class SoEWorld(World): payload = multidata["connect_names"][self.world.player_name[self.player]] multidata["connect_names"][self.connect_name] = payload + def get_filler_item_name(self) -> str: + return self.world.random.choice(list(self.item_name_groups["Ingredients"])) + class SoEItem(Item): game: str = "Secret of Evermore" diff --git a/worlds/spire/__init__.py b/worlds/spire/__init__.py index 2b420d626c..460b263a8b 100644 --- a/worlds/spire/__init__.py +++ b/worlds/spire/__init__.py @@ -90,6 +90,9 @@ class SpireWorld(World): slot_data[option_name] = int(option.value) return slot_data + def get_filler_item_name(self) -> str: + return self.world.random.choice(["Card Draw", "Card Draw", "Card Draw", "Relic", "Relic"]) + def create_region(world: MultiWorld, player: int, name: str, locations=None, exits=None): ret = Region(name, None, name, player) From 4e90ebc7d93bfef7cee0e082fb43ba0b59be0127 Mon Sep 17 00:00:00 2001 From: espeon65536 <81029175+espeon65536@users.noreply.github.com> Date: Thu, 19 May 2022 12:15:23 -0400 Subject: [PATCH 099/149] MC: add 1.18.2 advancements (#537) * MC: add 1.18.2 advancements and update options to match * client version 8 * MC: multiworkd -> multiworld * MC: account for overworld villager in Star Trader logic Also standardized Surge Protector and VVFrightening logic * MC: fix _mc_overworld_villager some day I won't second-guess myself when writing logic --- worlds/minecraft/Locations.py | 7 ++++++- worlds/minecraft/Options.py | 14 ++++---------- worlds/minecraft/Rules.py | 29 +++++++++++++++++++++++------ worlds/minecraft/__init__.py | 6 +++--- 4 files changed, 36 insertions(+), 20 deletions(-) diff --git a/worlds/minecraft/Locations.py b/worlds/minecraft/Locations.py index 7dbf85def0..a5c0421fa6 100644 --- a/worlds/minecraft/Locations.py +++ b/worlds/minecraft/Locations.py @@ -119,6 +119,10 @@ advancement_table = { "Light as a Rabbit": AdvData(42100, 'Overworld'), "Glow and Behold!": AdvData(42101, 'Overworld'), "Whatever Floats Your Goat!": AdvData(42102, 'Overworld'), + "Caves & Cliffs": AdvData(42103, 'Overworld'), + "Feels like home": AdvData(42104, 'The Nether'), + "Sound of Music": AdvData(42105, 'Overworld'), + "Star Trader": AdvData(42106, 'Village'), "Blaze Spawner": AdvData(None, 'Nether Fortress'), "Ender Dragon": AdvData(None, 'The End'), @@ -139,7 +143,8 @@ exclusion_table = { "Cover Me in Debris", "A Complete Catalogue", "Surge Protector", - "Light as a Rabbit", # will be normal in 1.18 + "Sound of Music", + "Star Trader", }, "unreasonable": { "How Did We Get Here?", diff --git a/worlds/minecraft/Options.py b/worlds/minecraft/Options.py index 19a166d509..f35866f7ae 100644 --- a/worlds/minecraft/Options.py +++ b/worlds/minecraft/Options.py @@ -1,12 +1,12 @@ import typing -from Options import Choice, Option, Toggle, Range, OptionList, DeathLink +from Options import Choice, Option, Toggle, DefaultOnToggle, Range, OptionList, DeathLink class AdvancementGoal(Range): """Number of advancements required to spawn bosses.""" display_name = "Advancement Goal" range_start = 0 - range_end = 92 + range_end = 95 default = 40 @@ -36,16 +36,14 @@ class BossGoal(Choice): default = 1 -class ShuffleStructures(Toggle): +class ShuffleStructures(DefaultOnToggle): """Enables shuffling of villages, outposts, fortresses, bastions, and end cities.""" display_name = "Shuffle Structures" - default = 1 -class StructureCompasses(Toggle): +class StructureCompasses(DefaultOnToggle): """Adds structure compasses to the item pool, which point to the nearest indicated structure.""" display_name = "Structure Compasses" - default = 1 class BeeTraps(Range): @@ -68,25 +66,21 @@ class CombatDifficulty(Choice): class HardAdvancements(Toggle): """Enables certain RNG-reliant or tedious advancements.""" display_name = "Include Hard Advancements" - default = 0 class UnreasonableAdvancements(Toggle): """Enables the extremely difficult advancements "How Did We Get Here?" and "Adventuring Time.\"""" display_name = "Include Unreasonable Advancements" - default = 0 class PostgameAdvancements(Toggle): """Enables advancements that require spawning and defeating the required bosses.""" display_name = "Include Postgame Advancements" - default = 0 class SendDefeatedMobs(Toggle): """Send killed mobs to other Minecraft worlds which have this option enabled.""" display_name = "Send Defeated Mobs" - default = 0 class StartingItems(OptionList): diff --git a/worlds/minecraft/Rules.py b/worlds/minecraft/Rules.py index b66de59d18..f2872e2d97 100644 --- a/worlds/minecraft/Rules.py +++ b/worlds/minecraft/Rules.py @@ -41,8 +41,17 @@ class MinecraftLogic(LogicMixin): def _mc_can_piglin_trade(self, player: int): return self._mc_has_gold_ingots(player) and ( - self.can_reach('The Nether', 'Region', player) or self.can_reach('Bastion Remnant', 'Region', - player)) + self.can_reach('The Nether', 'Region', player) or + self.can_reach('Bastion Remnant', 'Region', player)) + + def _mc_overworld_villager(self, player: int): + village_region = self.world.get_region('Village', player).entrances[0].parent_region.name + if village_region == 'The Nether': # 2 options: cure zombie villager or build portal in village + return (self.can_reach('Zombie Doctor', 'Location', player) or + (self._mc_has_diamond_pickaxe(player) and self.can_reach('Village', 'Region', player))) + elif village_region == 'The End': + return self.can_reach('Zombie Doctor', 'Location', player) + return self.can_reach('Village', 'Region', player) def _mc_enter_stronghold(self, player: int): return self.has('Blaze Rods', player) and self.has('Brewing', player) and self.has('3 Ender Pearls', player) @@ -132,8 +141,8 @@ def set_advancement_rules(world: MultiWorld, player: int): set_rule(world.get_location("Who is Cutting Onions?", player), lambda state: state._mc_can_piglin_trade(player)) set_rule(world.get_location("Oh Shiny", player), lambda state: state._mc_can_piglin_trade(player)) set_rule(world.get_location("Suit Up", player), lambda state: state.has("Progressive Armor", player) and state._mc_has_iron_ingots(player)) - set_rule(world.get_location("Very Very Frightening", player), lambda state: state.has("Channeling Book", player) and state._mc_can_use_anvil(player) and state._mc_can_enchant(player) and \ - ((world.get_region('Village', player).entrances[0].parent_region.name != 'The End' and state.can_reach('Village', 'Region', player)) or state.can_reach('Zombie Doctor', 'Location', player))) # need villager into the overworld for lightning strike + set_rule(world.get_location("Very Very Frightening", player), lambda state: state.has("Channeling Book", player) and + state._mc_can_use_anvil(player) and state._mc_can_enchant(player) and state._mc_overworld_villager(player)) set_rule(world.get_location("Hot Stuff", player), lambda state: state.has("Bucket", player) and state._mc_has_iron_ingots(player)) set_rule(world.get_location("Free the End", player), lambda state: state._mc_can_respawn_ender_dragon(player) and state._mc_can_kill_ender_dragon(player)) set_rule(world.get_location("A Furious Cocktail", player), lambda state: state._mc_can_brew_potions(player) and @@ -252,11 +261,19 @@ def set_advancement_rules(world: MultiWorld, player: int): set_rule(world.get_location("Is It a Bird?", player), lambda state: state._mc_has_spyglass(player) and state._mc_can_adventure(player)) set_rule(world.get_location("Is It a Balloon?", player), lambda state: state._mc_has_spyglass(player)) set_rule(world.get_location("Is It a Plane?", player), lambda state: state._mc_has_spyglass(player) and state._mc_can_respawn_ender_dragon(player)) - set_rule(world.get_location("Surge Protector", player), lambda state: state.has("Channeling Book", player) and state._mc_can_use_anvil(player) and state._mc_can_enchant(player) and \ - ((world.get_region('Village', player).entrances[0].parent_region.name != 'The End' and state.can_reach('Village', 'Region', player)) or state.can_reach('Zombie Doctor', 'Location', player))) + set_rule(world.get_location("Surge Protector", player), lambda state: state.has("Channeling Book", player) and + state._mc_can_use_anvil(player) and state._mc_can_enchant(player) and state._mc_overworld_villager(player)) set_rule(world.get_location("Light as a Rabbit", player), lambda state: state._mc_can_adventure(player) and state._mc_has_iron_ingots(player) and state.has('Bucket', player)) set_rule(world.get_location("Glow and Behold!", player), lambda state: state._mc_can_adventure(player)) set_rule(world.get_location("Whatever Floats Your Goat!", player), lambda state: state._mc_can_adventure(player)) + set_rule(world.get_location("Caves & Cliffs", player), lambda state: state._mc_has_iron_ingots(player) and state.has('Bucket', player) and state.has('Progressive Tools', player, 2)) + set_rule(world.get_location("Feels like home", player), lambda state: state._mc_has_iron_ingots(player) and state.has('Bucket', player) and state.has('Fishing Rod', player) and + (state._mc_fortress_loot(player) or state._mc_complete_raid(player)) and state.has("Saddle", player)) + set_rule(world.get_location("Sound of Music", player), lambda state: state.can_reach("Diamonds!", "Location", player) and state._mc_basic_combat(player)) + set_rule(world.get_location("Star Trader", player), lambda state: state._mc_has_iron_ingots(player) and state.has('Bucket', player) and + (state.can_reach("The Nether", 'Region', player) or state.can_reach("Nether Fortress", 'Region', player) or state._mc_can_piglin_trade(player)) and # soul sand for water elevator + state._mc_overworld_villager(player)) + # Sets rules on completion condition and postgame advancements def set_completion_rules(world: MultiWorld, player: int): diff --git a/worlds/minecraft/__init__.py b/worlds/minecraft/__init__.py index 4c75e5a076..b0f0ae7492 100644 --- a/worlds/minecraft/__init__.py +++ b/worlds/minecraft/__init__.py @@ -13,7 +13,7 @@ from BaseClasses import Region, Entrance, Item, Tutorial from .Options import minecraft_options from ..AutoWorld import World, WebWorld -client_version = 7 +client_version = 8 class MinecraftWebWorld(WebWorld): theme = "jungle" @@ -22,7 +22,7 @@ class MinecraftWebWorld(WebWorld): setup = Tutorial( "Multiworld Setup Tutorial", "A guide to setting up the Archipelago Minecraft software on your computer. This guide covers" - "single-player, multiworkd, and related software.", + "single-player, multiworld, and related software.", "English", "minecraft_en.md", "minecraft/en", @@ -65,7 +65,7 @@ class MinecraftWorld(World): item_name_to_id = {name: data.code for name, data in item_table.items()} location_name_to_id = {name: data.id for name, data in advancement_table.items()} - data_version = 4 + data_version = 5 def _get_mc_data(self): exits = [connection[0] for connection in default_connections] From e5d999c7556210c8d65c6f5d5c97dc55745c9541 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Thu, 19 May 2022 06:02:36 +0200 Subject: [PATCH 100/149] SC2: prevent freeze when X-ing out the window --- StarcraftClient.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/StarcraftClient.py b/StarcraftClient.py index c86ab04486..e8f09bb091 100644 --- a/StarcraftClient.py +++ b/StarcraftClient.py @@ -514,8 +514,6 @@ def mission_reqs_completed(location_to_check, missions_complete, locations_done, if __name__ == '__main__': colorama.init() - loop = asyncio.get_event_loop() - loop.run_until_complete(main()) - loop.close() + asyncio.run(main()) colorama.deinit() From 44ae50083d35d21f78262e2fd322ba7920d0e73f Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Fri, 20 May 2022 01:43:07 +0200 Subject: [PATCH 101/149] SC2: setup fix link --- worlds/sc2wol/docs/setup_en.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/worlds/sc2wol/docs/setup_en.md b/worlds/sc2wol/docs/setup_en.md index adce0e08c9..5ca7a7e7e0 100644 --- a/worlds/sc2wol/docs/setup_en.md +++ b/worlds/sc2wol/docs/setup_en.md @@ -29,5 +29,5 @@ new games under default settings the first mission available will always be Libe ## Where do I get a config file? -The [Player Settings](https://archipelago.gg/games/Starcraft%202%20Wings%20of%20Liberty/player-settings) page on the website allows you to +The [Player Settings](/games/Starcraft%202%20Wings%20of%20Liberty/player-settings) page on the website allows you to configure your personal settings and export them into a config file From bdd9ca76eedf923c4e9e011a526dcd7acbf64487 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Fri, 20 May 2022 03:26:23 +0200 Subject: [PATCH 102/149] WebHost: fix title (#544) This is pretty simple. Approved. --- WebHostLib/templates/landing.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WebHostLib/templates/landing.html b/WebHostLib/templates/landing.html index b6a2717486..fd45b78cfb 100644 --- a/WebHostLib/templates/landing.html +++ b/WebHostLib/templates/landing.html @@ -1,7 +1,7 @@ {% extends 'pageWrapper.html' %} {% block head %} - MultiWorld + Archipelago {% endblock %} From 8ce2ecfaacee6c2757e35f5418e13294ee2cf340 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Fri, 20 May 2022 00:55:12 +0200 Subject: [PATCH 103/149] SC2: more cleanup and fix setup compile --- Launcher.py | 2 +- StarcraftClient.py => Starcraft2Client.py | 102 +++++++++++----------- 2 files changed, 51 insertions(+), 53 deletions(-) rename StarcraftClient.py => Starcraft2Client.py (82%) diff --git a/Launcher.py b/Launcher.py index 7c53a120eb..acf235ff8a 100644 --- a/Launcher.py +++ b/Launcher.py @@ -153,7 +153,7 @@ components: Iterable[Component] = ( # ChecksFinder Component('ChecksFinder Client', 'ChecksFinderClient'), # Starcraft 2 - Component('Starcraft 2 Client', 'StarcraftClient'), + Component('Starcraft 2 Client', 'Starcraft2Client'), # Functions Component('Open host.yaml', func=open_host_yaml), Component('Open Patch', func=open_patch), diff --git a/StarcraftClient.py b/Starcraft2Client.py similarity index 82% rename from StarcraftClient.py rename to Starcraft2Client.py index e8f09bb091..1c0c5ddeee 100644 --- a/StarcraftClient.py +++ b/Starcraft2Client.py @@ -1,6 +1,5 @@ from __future__ import annotations -import sys import multiprocessing import logging import asyncio @@ -26,10 +25,11 @@ sc2_logger = logging.getLogger("Starcraft2") import colorama from NetUtils import * -from CommonClient import CommonContext, server_loop, console_loop, ClientCommandProcessor, gui_enabled, get_base_parser +from CommonClient import CommonContext, server_loop, ClientCommandProcessor, gui_enabled, get_base_parser nest_asyncio.apply() + class StarcraftClientProcessor(ClientCommandProcessor): ctx: Context @@ -49,7 +49,8 @@ class StarcraftClientProcessor(ClientCommandProcessor): "This mission is not currently unlocked. Use /unfinished or /available to see what is available.") else: - sc2_logger.info("Mission ID needs to be specified. Use /unfinished or /available to view ids for available missions.") + sc2_logger.info( + "Mission ID needs to be specified. Use /unfinished or /available to view ids for available missions.") return True @@ -137,10 +138,15 @@ async def main(): await ctx.shutdown() -maps_table = ["ap_traynor01", "ap_traynor02", "ap_traynor03", "ap_thanson01", "ap_thanson02", "ap_thanson03a", "ap_thanson03b", "ap_ttychus01", - "ap_ttychus02", "ap_ttychus03", "ap_ttychus04", "ap_ttychus05", "ap_ttosh01", "ap_ttosh02", "ap_ttosh03a", "ap_ttosh03b", - "ap_thorner01", "ap_thorner02", "ap_thorner03", "ap_thorner04", "ap_thorner05s", "ap_tzeratul01", "ap_tzeratul02", - "ap_tzeratul03", "ap_tzeratul04", "ap_tvalerian01", "ap_tvalerian02a", "ap_tvalerian02b", "ap_tvalerian03"] +maps_table = [ + "ap_traynor01", "ap_traynor02", "ap_traynor03", + "ap_thanson01", "ap_thanson02", "ap_thanson03a", "ap_thanson03b", + "ap_ttychus01", "ap_ttychus02", "ap_ttychus03", "ap_ttychus04", "ap_ttychus05", + "ap_ttosh01", "ap_ttosh02", "ap_ttosh03a", "ap_ttosh03b", + "ap_thorner01", "ap_thorner02", "ap_thorner03", "ap_thorner04", "ap_thorner05s", + "ap_tzeratul01", "ap_tzeratul02", "ap_tzeratul03", "ap_tzeratul04", + "ap_tvalerian01", "ap_tvalerian02a", "ap_tvalerian02b", "ap_tvalerian03" +] def calculate_items(items): @@ -201,7 +207,7 @@ async def starcraft_launch(ctx: Context, mission_id): ctx.sent_announce_pos = len(ctx.items_sent_to_announce) ctx.announcements_pos = len(ctx.announcements) - run_game(sc2.maps.get(maps_table[mission_id-1]), [ + run_game(sc2.maps.get(maps_table[mission_id - 1]), [ Bot(Race.Terran, ArchipelagoBot(ctx, mission_id), name="Archipelago")], realtime=True) @@ -235,8 +241,10 @@ class ArchipelagoBot(sc2.bot_ai.BotAI): start_items = calculate_items(self.ctx.items_received) difficulty = calc_difficulty(self.ctx.difficulty) await self.chat_send("ArchipelagoLoad {} {} {} {} {} {} {} {} {} {} {} {}".format( - difficulty, start_items[0], start_items[1], start_items[2], start_items[3], start_items[4], start_items[5], - start_items[6], start_items[7], start_items[8], start_items[9], self.ctx.all_in_choice)) + difficulty, + start_items[0], start_items[1], start_items[2], start_items[3], start_items[4], + start_items[5], start_items[6], start_items[7], start_items[8], start_items[9], + self.ctx.all_in_choice)) self.last_received_update = len(self.ctx.items_received) else: @@ -260,7 +268,7 @@ class ArchipelagoBot(sc2.bot_ai.BotAI): if start_rem_pos > 0: temp_msg = message[:start_rem_pos] if index < len(message) - 1: - temp_msg += message[index+1:] + temp_msg += message[index + 1:] message = temp_msg index += start_rem_pos - index @@ -275,7 +283,7 @@ class ArchipelagoBot(sc2.bot_ai.BotAI): for unit in self.all_own_units(): if unit.health_max == 38281: game_state = int(38281 - unit.health) - can_read_game = True + self.can_read_game = True if iteration == 80 and not game_state & 1: await self.chat_send("SendMessage Warning: Archipelago unable to connect or has lost connection to " + @@ -284,8 +292,8 @@ class ArchipelagoBot(sc2.bot_ai.BotAI): if self.last_received_update < len(self.ctx.items_received): current_items = calculate_items(self.ctx.items_received) await self.chat_send("UpdateTech {} {} {} {} {} {} {} {}".format( - current_items[0], current_items[1], current_items[2], current_items[3], current_items[4], current_items[5], - current_items[6], current_items[7])) + current_items[0], current_items[1], current_items[2], current_items[3], current_items[4], + current_items[5], current_items[6], current_items[7])) self.last_received_update = len(self.ctx.items_received) if game_state & 1: @@ -293,7 +301,7 @@ class ArchipelagoBot(sc2.bot_ai.BotAI): print("Archipelago Connected") self.game_running = True - if can_read_game: + if self.can_read_game: if game_state & (1 << 1) and not self.mission_completed: if self.mission_id != 29: print("Mission Completed") @@ -308,49 +316,57 @@ class ArchipelagoBot(sc2.bot_ai.BotAI): if game_state & (1 << 2) and not self.first_bonus: print("1st Bonus Collected") await self.ctx.send_msgs( - [{"cmd": 'LocationChecks', "locations": [SC2WOL_LOC_ID_OFFSET + 100 * self.mission_id + 1]}]) + [{"cmd": 'LocationChecks', + "locations": [SC2WOL_LOC_ID_OFFSET + 100 * self.mission_id + 1]}]) self.first_bonus = True if not self.second_bonus and game_state & (1 << 3): print("2nd Bonus Collected") await self.ctx.send_msgs( - [{"cmd": 'LocationChecks', "locations": [SC2WOL_LOC_ID_OFFSET + 100 * self.mission_id + 2]}]) + [{"cmd": 'LocationChecks', + "locations": [SC2WOL_LOC_ID_OFFSET + 100 * self.mission_id + 2]}]) self.second_bonus = True if not self.third_bonus and game_state & (1 << 4): print("3rd Bonus Collected") await self.ctx.send_msgs( - [{"cmd": 'LocationChecks', "locations": [SC2WOL_LOC_ID_OFFSET + 100 * self.mission_id + 3]}]) + [{"cmd": 'LocationChecks', + "locations": [SC2WOL_LOC_ID_OFFSET + 100 * self.mission_id + 3]}]) self.third_bonus = True if not self.fourth_bonus and game_state & (1 << 5): print("4th Bonus Collected") await self.ctx.send_msgs( - [{"cmd": 'LocationChecks', "locations": [SC2WOL_LOC_ID_OFFSET + 100 * self.mission_id + 4]}]) + [{"cmd": 'LocationChecks', + "locations": [SC2WOL_LOC_ID_OFFSET + 100 * self.mission_id + 4]}]) self.fourth_bonus = True if not self.fifth_bonus and game_state & (1 << 6): print("5th Bonus Collected") await self.ctx.send_msgs( - [{"cmd": 'LocationChecks', "locations": [SC2WOL_LOC_ID_OFFSET + 100 * self.mission_id + 5]}]) + [{"cmd": 'LocationChecks', + "locations": [SC2WOL_LOC_ID_OFFSET + 100 * self.mission_id + 5]}]) self.fifth_bonus = True if not self.sixth_bonus and game_state & (1 << 7): print("6th Bonus Collected") await self.ctx.send_msgs( - [{"cmd": 'LocationChecks', "locations": [SC2WOL_LOC_ID_OFFSET + 100 * self.mission_id + 6]}]) + [{"cmd": 'LocationChecks', + "locations": [SC2WOL_LOC_ID_OFFSET + 100 * self.mission_id + 6]}]) self.sixth_bonus = True if not self.seventh_bonus and game_state & (1 << 8): print("6th Bonus Collected") await self.ctx.send_msgs( - [{"cmd": 'LocationChecks', "locations": [SC2WOL_LOC_ID_OFFSET + 100 * self.mission_id + 7]}]) + [{"cmd": 'LocationChecks', + "locations": [SC2WOL_LOC_ID_OFFSET + 100 * self.mission_id + 7]}]) self.seventh_bonus = True if not self.eight_bonus and game_state & (1 << 9): print("6th Bonus Collected") await self.ctx.send_msgs( - [{"cmd": 'LocationChecks', "locations": [SC2WOL_LOC_ID_OFFSET + 100 * self.mission_id + 8]}]) + [{"cmd": 'LocationChecks', + "locations": [SC2WOL_LOC_ID_OFFSET + 100 * self.mission_id + 8]}]) self.eight_bonus = True else: @@ -396,7 +412,8 @@ mission_req_table = { "All-In": MissionInfo(29, -1, [27, 28]) } -lookup_id_to_mission: typing.Dict[int, str] = {data.id: mission_name for mission_name, data in mission_req_table.items() if data.id} +lookup_id_to_mission: typing.Dict[int, str] = { + data.id: mission_name for mission_name, data in mission_req_table.items() if data.id} def calc_objectives_completed(mission, missions_info, locations_done): @@ -414,20 +431,13 @@ def calc_objectives_completed(mission, missions_info, locations_done): def request_unfinished_missions(locations_done, location_table): - message = "Unfinished Missions:" - - first_item = True + message = "Unfinished Missions: " unfinished_missions = calc_unfinished_missions(locations_done, location_table) - for mission in unfinished_missions: - if first_item: - message += " {}[{}] ({}/{})".format(mission, location_table[mission].id, unfinished_missions[mission], - location_table[mission].extra_locations) - first_item = False - else: - message += ", {}[{}] ({}/{})".format(mission, location_table[mission].id, unfinished_missions[mission], - location_table[mission].extra_locations) + message += ", ".join(f"{mission}[{location_table[mission].id}] " + f"({unfinished_missions[mission]}/{location_table[mission].extra_locations})" + for mission in unfinished_missions) sc2_logger.info(message) @@ -455,26 +465,14 @@ def calc_unfinished_missions(locations_done, locations): def is_mission_available(mission_id_to_check, locations_done, locations): unfinished_missions = calc_available_missions(locations_done, locations) - for mission in unfinished_missions: - if locations[mission].id == mission_id_to_check: - return True - - return False + return any(mission_id_to_check == locations[mission].id for mission in unfinished_missions) def request_available_missions(locations_done, location_table): - message = "Available Missions:" - - first_item = True + message = "Available Missions: " missions = calc_available_missions(locations_done, location_table) - - for mission in missions: - if first_item: - message += " {}[{}]".format(mission, location_table[mission].id) - first_item = False - else: - message += ", {}[{}]".format(mission, location_table[mission].id) + message += ", ".join(f"{mission}[{location_table[mission].id}]" for mission in missions) sc2_logger.info(message) @@ -501,7 +499,8 @@ def mission_reqs_completed(location_to_check, missions_complete, locations_done, for req_mission in locations[location_to_check].required_world: if not (req_mission * 100 + SC2WOL_LOC_ID_OFFSET) in locations_done: return False - if not mission_reqs_completed(lookup_id_to_mission[req_mission], missions_complete, locations_done, locations): + if not mission_reqs_completed(lookup_id_to_mission[req_mission], missions_complete, locations_done, + locations): return False if missions_complete >= locations[location_to_check].number: @@ -516,4 +515,3 @@ if __name__ == '__main__': colorama.init() asyncio.run(main()) colorama.deinit() - From 3b644a0af15b0cd780d1f03c3159875a50eea416 Mon Sep 17 00:00:00 2001 From: TheCondor07 Date: Fri, 20 May 2022 10:17:44 -0400 Subject: [PATCH 104/149] SC2: Changed All In to require either previous mission instead of both --- Starcraft2Client.py | 38 +++++++++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/Starcraft2Client.py b/Starcraft2Client.py index 1c0c5ddeee..692e4bc3a7 100644 --- a/Starcraft2Client.py +++ b/Starcraft2Client.py @@ -378,6 +378,7 @@ class MissionInfo(typing.NamedTuple): extra_locations: int required_world: list[int] number: int = 0 # number of worlds need beaten + or_requirements: bool = False # true if the requirements should be or-ed instead of and-ed mission_req_table = { @@ -409,7 +410,7 @@ mission_req_table = { "Gates of Hell": MissionInfo(26, 2, [12]), "Belly of the Beast": MissionInfo(27, 4, [26]), "Shatter the Sky": MissionInfo(28, 5, [26]), - "All-In": MissionInfo(29, -1, [27, 28]) + "All-In": MissionInfo(29, -1, [27, 28], or_requirements=True) } lookup_id_to_mission: typing.Dict[int, str] = { @@ -494,15 +495,46 @@ def calc_available_missions(locations_done, locations): def mission_reqs_completed(location_to_check, missions_complete, locations_done, locations): - if len(locations[location_to_check].required_world) >= 1: + """Returns a bool signifying if the mission has all requirements complete and can be done + Keyword arguments: + locations_to_check -- the mission string name to check + missions_complete -- an int of how many missions have been completed + locations_done -- a list of the location ids that have been complete + locations -- a dict of MissionInfo for mission requirements for this world""" + if len(locations[location_to_check].required_world) >= 1: + # A check for when the requirements are being or'd + or_success = False + + # Loop through required missions for req_mission in locations[location_to_check].required_world: + req_success = True + + # Check if required mission has been completed if not (req_mission * 100 + SC2WOL_LOC_ID_OFFSET) in locations_done: - return False + if not locations[location_to_check].or_requirements: + return False + else: + req_success = False + + # Recursively check required mission to see if it's requirements are met, in case !collect has been done if not mission_reqs_completed(lookup_id_to_mission[req_mission], missions_complete, locations_done, locations): + if not locations[location_to_check].or_requirements: + return False + else: + req_success = False + + # If requirement check succeeded mark or as satisfied + if locations[location_to_check].or_requirements and req_success: + or_success = True + + if locations[location_to_check].or_requirements: + # Return false if or requirements not met + if not or_success: return False + # Check number of missions if missions_complete >= locations[location_to_check].number: return True else: From cb9db5dff168f41e92a9fa90c7102ff5dfce4fe9 Mon Sep 17 00:00:00 2001 From: CaitSith2 Date: Fri, 20 May 2022 09:40:17 -0700 Subject: [PATCH 105/149] Verify start location hint --- Options.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Options.py b/Options.py index 4cab676970..6a3dd5bc4d 100644 --- a/Options.py +++ b/Options.py @@ -624,6 +624,7 @@ class StartHints(ItemSet): class StartLocationHints(OptionSet): """Start with these locations and their item prefilled into the !hint command""" display_name = "Start Location Hints" + verify_location_name = True class ExcludeLocations(OptionSet): From bb15485965eb63f03074745070783e1959fd1cde Mon Sep 17 00:00:00 2001 From: TheCondor07 Date: Fri, 20 May 2022 20:47:16 -0400 Subject: [PATCH 106/149] SC2: Quality of Life Changes/Fixes to Prepare For Future Feature (#550) --- Starcraft2Client.py | 61 ++++++--- worlds/sc2wol/Items.py | 2 +- worlds/sc2wol/Locations.py | 264 +++++++++++++++++++++++++----------- worlds/sc2wol/LogicMixin.py | 9 +- worlds/sc2wol/Regions.py | 85 +++++++----- 5 files changed, 284 insertions(+), 137 deletions(-) diff --git a/Starcraft2Client.py b/Starcraft2Client.py index 692e4bc3a7..934f71712f 100644 --- a/Starcraft2Client.py +++ b/Starcraft2Client.py @@ -57,13 +57,13 @@ class StarcraftClientProcessor(ClientCommandProcessor): def _cmd_available(self) -> bool: """Get what missions are currently available to play""" - request_available_missions(self.ctx.checked_locations, mission_req_table) + request_available_missions(self.ctx.checked_locations, mission_req_table, self.ctx.ui) return True def _cmd_unfinished(self) -> bool: """Get what missions are currently available to play and have not had all locations checked""" - request_unfinished_missions(self.ctx.checked_locations, mission_req_table) + request_unfinished_missions(self.ctx.checked_locations, mission_req_table, self.ctx.ui) return True @@ -378,22 +378,23 @@ class MissionInfo(typing.NamedTuple): extra_locations: int required_world: list[int] number: int = 0 # number of worlds need beaten + completion_critical: bool = False # missions needed to beat game or_requirements: bool = False # true if the requirements should be or-ed instead of and-ed mission_req_table = { - "Liberation Day": MissionInfo(1, 7, []), - "The Outlaws": MissionInfo(2, 2, [1]), - "Zero Hour": MissionInfo(3, 4, [2]), + "Liberation Day": MissionInfo(1, 7, [], completion_critical=True), + "The Outlaws": MissionInfo(2, 2, [1], completion_critical=True), + "Zero Hour": MissionInfo(3, 4, [2], completion_critical=True), "Evacuation": MissionInfo(4, 4, [3]), "Outbreak": MissionInfo(5, 3, [4]), "Safe Haven": MissionInfo(6, 1, [5], number=7), "Haven's Fall": MissionInfo(7, 1, [5], number=7), - "Smash and Grab": MissionInfo(8, 5, [3]), - "The Dig": MissionInfo(9, 4, [8], number=8), - "The Moebius Factor": MissionInfo(10, 9, [9], number=11), - "Supernova": MissionInfo(11, 5, [10], number=14), - "Maw of the Void": MissionInfo(12, 6, [11]), + "Smash and Grab": MissionInfo(8, 5, [3], completion_critical=True), + "The Dig": MissionInfo(9, 4, [8], number=8, completion_critical=True), + "The Moebius Factor": MissionInfo(10, 9, [9], number=11, completion_critical=True), + "Supernova": MissionInfo(11, 5, [10], number=14, completion_critical=True), + "Maw of the Void": MissionInfo(12, 6, [11], completion_critical=True), "Devil's Playground": MissionInfo(13, 3, [3], number=4), "Welcome to the Jungle": MissionInfo(14, 4, [13]), "Breakout": MissionInfo(15, 3, [14], number=8), @@ -407,10 +408,10 @@ mission_req_table = { "A Sinister Turn": MissionInfo(23, 4, [22]), "Echoes of the Future": MissionInfo(24, 3, [23]), "In Utter Darkness": MissionInfo(25, 3, [24]), - "Gates of Hell": MissionInfo(26, 2, [12]), - "Belly of the Beast": MissionInfo(27, 4, [26]), - "Shatter the Sky": MissionInfo(28, 5, [26]), - "All-In": MissionInfo(29, -1, [27, 28], or_requirements=True) + "Gates of Hell": MissionInfo(26, 2, [12], completion_critical=True), + "Belly of the Beast": MissionInfo(27, 4, [26], completion_critical=True), + "Shatter the Sky": MissionInfo(28, 5, [26], completion_critical=True), + "All-In": MissionInfo(29, -1, [27, 28], completion_critical=True, or_requirements=True) } lookup_id_to_mission: typing.Dict[int, str] = { @@ -431,16 +432,21 @@ def calc_objectives_completed(mission, missions_info, locations_done): return -1 -def request_unfinished_missions(locations_done, location_table): +def request_unfinished_missions(locations_done, location_table, ui): message = "Unfinished Missions: " unfinished_missions = calc_unfinished_missions(locations_done, location_table) - message += ", ".join(f"{mission}[{location_table[mission].id}] " + + message += ", ".join(f"{mark_critical(mission,location_table, ui)}[{location_table[mission].id}] " f"({unfinished_missions[mission]}/{location_table[mission].extra_locations})" for mission in unfinished_missions) - sc2_logger.info(message) + if ui: + ui.log_panels['All'].on_message_markup(message) + ui.log_panels['Starcraft2'].on_message_markup(message) + else: + sc2_logger.info(message) def calc_unfinished_missions(locations_done, locations): @@ -469,13 +475,28 @@ def is_mission_available(mission_id_to_check, locations_done, locations): return any(mission_id_to_check == locations[mission].id for mission in unfinished_missions) -def request_available_missions(locations_done, location_table): +def mark_critical(mission, location_table, ui): + """Checks if the mission is required for game completion and adds '*' to the name to mark that.""" + if location_table[mission].completion_critical: + if ui: + return "[color=AF99EF]" + mission + "[/color]" + else: + return "*" + mission + "*" + else: + return mission + + +def request_available_missions(locations_done, location_table, ui): message = "Available Missions: " missions = calc_available_missions(locations_done, location_table) - message += ", ".join(f"{mission}[{location_table[mission].id}]" for mission in missions) + message += ", ".join(f"{mark_critical(mission,location_table, ui)}[{location_table[mission].id}]" for mission in missions) - sc2_logger.info(message) + if ui: + ui.log_panels['All'].on_message_markup(message) + ui.log_panels['Starcraft2'].on_message_markup(message) + else: + sc2_logger.info(message) def calc_available_missions(locations_done, locations): diff --git a/worlds/sc2wol/Items.py b/worlds/sc2wol/Items.py index 4397c95e98..1e69cb2c32 100644 --- a/worlds/sc2wol/Items.py +++ b/worlds/sc2wol/Items.py @@ -116,7 +116,7 @@ item_table = { "Automated Refinery": ItemData(604 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 4), "Command Center Reactor": ItemData(605 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 5), "Raven": ItemData(606 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 6), - "Science Vessel": ItemData(607 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 7), + "Science Vessel": ItemData(607 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 7, progression=True), "Tech Reactor": ItemData(608 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 8), "Orbital Strike": ItemData(609 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 9), "Shrike Turret": ItemData(610 + SC2WOL_ITEM_ID_OFFSET, "Laboratory", 10), diff --git a/worlds/sc2wol/Locations.py b/worlds/sc2wol/Locations.py index aa4f070be6..402d21248f 100644 --- a/worlds/sc2wol/Locations.py +++ b/worlds/sc2wol/Locations.py @@ -5,6 +5,7 @@ from BaseClasses import Location SC2WOL_LOC_ID_OFFSET = 1000 + class SC2WoLLocation(Location): game: str = "Starcraft2WoL" @@ -17,6 +18,7 @@ class LocationData(NamedTuple): def get_locations(world: Optional[MultiWorld], player: Optional[int]) -> Tuple[LocationData, ...]: + # Note: rules which are ended with or True are rules identified as needed later when restricted units is an option location_table: List[LocationData] = [ LocationData("Liberation Day", "Liberation Day: Victory", SC2WOL_LOC_ID_OFFSET + 100), LocationData("Liberation Day", "Liberation Day: First Statue", SC2WOL_LOC_ID_OFFSET + 101), @@ -26,41 +28,84 @@ def get_locations(world: Optional[MultiWorld], player: Optional[int]) -> Tuple[L LocationData("Liberation Day", "Liberation Day: Fifth Statue", SC2WOL_LOC_ID_OFFSET + 105), LocationData("Liberation Day", "Liberation Day: Sixth Statue", SC2WOL_LOC_ID_OFFSET + 106), LocationData("Liberation Day", "Beat Liberation Day", None), - LocationData("The Outlaws", "The Outlaws: Victory", SC2WOL_LOC_ID_OFFSET + 200), - LocationData("The Outlaws", "The Outlaws: Rebel Base", SC2WOL_LOC_ID_OFFSET + 201), - LocationData("The Outlaws", "Beat The Outlaws", None), - LocationData("Zero Hour", "Zero Hour: Victory", SC2WOL_LOC_ID_OFFSET + 300), + LocationData("The Outlaws", "The Outlaws: Victory", SC2WOL_LOC_ID_OFFSET + 200, + lambda state: state._sc2wol_has_common_unit(world, player)), + LocationData("The Outlaws", "The Outlaws: Rebel Base", SC2WOL_LOC_ID_OFFSET + 201, + lambda state: state._sc2wol_has_common_unit(world, player)), + LocationData("The Outlaws", "Beat The Outlaws", None, + lambda state: state._sc2wol_has_common_unit(world, player)), + LocationData("Zero Hour", "Zero Hour: Victory", SC2WOL_LOC_ID_OFFSET + 300, + lambda state: state._sc2wol_has_common_unit(world, player)), LocationData("Zero Hour", "Zero Hour: First Group Rescued", SC2WOL_LOC_ID_OFFSET + 301), - LocationData("Zero Hour", "Zero Hour: Second Group Rescued", SC2WOL_LOC_ID_OFFSET + 302), - LocationData("Zero Hour", "Zero Hour: Third Group Rescued", SC2WOL_LOC_ID_OFFSET + 303), - LocationData("Zero Hour", "Beat Zero Hour", None), - LocationData("Evacuation", "Evacuation: Victory", SC2WOL_LOC_ID_OFFSET + 400), + LocationData("Zero Hour", "Zero Hour: Second Group Rescued", SC2WOL_LOC_ID_OFFSET + 302, + lambda state: state._sc2wol_has_common_unit(world, player)), + LocationData("Zero Hour", "Zero Hour: Third Group Rescued", SC2WOL_LOC_ID_OFFSET + 303, + lambda state: state._sc2wol_has_common_unit(world, player)), + LocationData("Zero Hour", "Beat Zero Hour", None, + lambda state: state._sc2wol_has_common_unit(world, player)), + LocationData("Evacuation", "Evacuation: Victory", SC2WOL_LOC_ID_OFFSET + 400, + lambda state: state._sc2wol_has_mobile_anti_air(world, player)), LocationData("Evacuation", "Evacuation: First Chysalis", SC2WOL_LOC_ID_OFFSET + 401), - LocationData("Evacuation", "Evacuation: Second Chysalis", SC2WOL_LOC_ID_OFFSET + 402), - LocationData("Evacuation", "Evacuation: Third Chysalis", SC2WOL_LOC_ID_OFFSET + 403), - LocationData("Evacuation", "Beat Evacuation", None), - LocationData("Outbreak", "Outbreak: Victory", SC2WOL_LOC_ID_OFFSET + 500), - LocationData("Outbreak", "Outbreak: Left Infestor", SC2WOL_LOC_ID_OFFSET + 501), - LocationData("Outbreak", "Outbreak: Right Infestor", SC2WOL_LOC_ID_OFFSET + 502), - LocationData("Outbreak", "Beat Outbreak", None), - LocationData("Safe Haven", "Safe Haven: Victory", SC2WOL_LOC_ID_OFFSET + 600), - LocationData("Safe Haven", "Beat Safe Haven", None), - LocationData("Haven's Fall", "Haven's Fall: Victory", SC2WOL_LOC_ID_OFFSET + 700), - LocationData("Haven's Fall", "Beat Haven's Fall", None), - LocationData("Smash and Grab", "Smash and Grab: Victory", SC2WOL_LOC_ID_OFFSET + 800), + LocationData("Evacuation", "Evacuation: Second Chysalis", SC2WOL_LOC_ID_OFFSET + 402, + lambda state: state._sc2wol_has_common_unit(world, player)), + LocationData("Evacuation", "Evacuation: Third Chysalis", SC2WOL_LOC_ID_OFFSET + 403, + lambda state: state._sc2wol_has_common_unit(world, player)), + LocationData("Evacuation", "Beat Evacuation", None, + lambda state: state._sc2wol_has_common_unit(world, player) and + state._sc2wol_has_mobile_anti_air(world, player)), + LocationData("Outbreak", "Outbreak: Victory", SC2WOL_LOC_ID_OFFSET + 500, + lambda state: state._sc2wol_has_common_unit(world, player) or state.has("Reaper", player)), + LocationData("Outbreak", "Outbreak: Left Infestor", SC2WOL_LOC_ID_OFFSET + 501, + lambda state: state._sc2wol_has_common_unit(world, player) or state.has("Reaper", player)), + LocationData("Outbreak", "Outbreak: Right Infestor", SC2WOL_LOC_ID_OFFSET + 502, + lambda state: state._sc2wol_has_common_unit(world, player) or state.has("Reaper", player)), + LocationData("Outbreak", "Beat Outbreak", None, + lambda state: state._sc2wol_has_common_unit(world, player) or state.has("Reaper", player)), + LocationData("Safe Haven", "Safe Haven: Victory", SC2WOL_LOC_ID_OFFSET + 600, + lambda state: state._sc2wol_has_common_unit(world, player) and + state._sc2wol_has_mobile_anti_air(world, player)), + LocationData("Safe Haven", "Beat Safe Haven", None, + lambda state: state._sc2wol_has_common_unit(world, player) and + state._sc2wol_has_mobile_anti_air(world, player)), + LocationData("Haven's Fall", "Haven's Fall: Victory", SC2WOL_LOC_ID_OFFSET + 700, + lambda state: state._sc2wol_has_common_unit(world, player) and + state._sc2wol_has_mobile_anti_air(world, player)), + LocationData("Haven's Fall", "Beat Haven's Fall", None, + lambda state: state._sc2wol_has_common_unit(world, player) and + state._sc2wol_has_mobile_anti_air(world, player)), + LocationData("Smash and Grab", "Smash and Grab: Victory", SC2WOL_LOC_ID_OFFSET + 800, + lambda state: state._sc2wol_has_common_unit(world, player) and + state._sc2wol_has_mobile_anti_air(world, player)), LocationData("Smash and Grab", "Smash and Grab: First Relic", SC2WOL_LOC_ID_OFFSET + 801), LocationData("Smash and Grab", "Smash and Grab: Second Relic", SC2WOL_LOC_ID_OFFSET + 802), - LocationData("Smash and Grab", "Smash and Grab: Third Relic", SC2WOL_LOC_ID_OFFSET + 803), - LocationData("Smash and Grab", "Smash and Grab: Fourth Relic", SC2WOL_LOC_ID_OFFSET + 804), - LocationData("Smash and Grab", "Beat Smash and Grab", None), - LocationData("The Dig", "The Dig: Victory", SC2WOL_LOC_ID_OFFSET + 900), - LocationData("The Dig", "The Dig: Left Relic", SC2WOL_LOC_ID_OFFSET + 901), - LocationData("The Dig", "The Dig: Right Ground Relic", SC2WOL_LOC_ID_OFFSET + 902), - LocationData("The Dig", "The Dig: Right Cliff Relic", SC2WOL_LOC_ID_OFFSET + 903), - LocationData("The Dig", "Beat The Dig", None), - LocationData("The Moebius Factor", "The Moebius Factor: 3rd Data Core", SC2WOL_LOC_ID_OFFSET + 1000), - LocationData("The Moebius Factor", "The Moebius Factor: 1st Data Core ", SC2WOL_LOC_ID_OFFSET + 1001), - LocationData("The Moebius Factor", "The Moebius Factor: 2nd Data Core", SC2WOL_LOC_ID_OFFSET + 1002), + LocationData("Smash and Grab", "Smash and Grab: Third Relic", SC2WOL_LOC_ID_OFFSET + 803, + lambda state: state._sc2wol_has_common_unit(world, player)), + LocationData("Smash and Grab", "Smash and Grab: Fourth Relic", SC2WOL_LOC_ID_OFFSET + 804, + lambda state: state._sc2wol_has_common_unit(world, player) and + state._sc2wol_has_anti_air(world, player)), + LocationData("Smash and Grab", "Beat Smash and Grab", None, + lambda state: state._sc2wol_has_common_unit(world, player) and + state._sc2wol_has_anti_air(world, player)), + LocationData("The Dig", "The Dig: Victory", SC2WOL_LOC_ID_OFFSET + 900, + lambda state: state._sc2wol_has_common_unit(world, player) and + state._sc2wol_has_anti_air(world, player) and + state._sc2wol_has_heavy_defense(world, player)), + LocationData("The Dig", "The Dig: Left Relic", SC2WOL_LOC_ID_OFFSET + 901, + lambda state: state._sc2wol_has_common_unit(world, player)), + LocationData("The Dig", "The Dig: Right Ground Relic", SC2WOL_LOC_ID_OFFSET + 902, + lambda state: state._sc2wol_has_common_unit(world, player)), + LocationData("The Dig", "The Dig: Right Cliff Relic", SC2WOL_LOC_ID_OFFSET + 903, + lambda state: state._sc2wol_has_common_unit(world, player)), + LocationData("The Dig", "Beat The Dig", None, + lambda state: state._sc2wol_has_common_unit(world, player) and + state._sc2wol_has_anti_air(world, player) and + state._sc2wol_has_heavy_defense(world, player)), + LocationData("The Moebius Factor", "The Moebius Factor: 3rd Data Core", SC2WOL_LOC_ID_OFFSET + 1000, + lambda state: state._sc2wol_has_air(world, player)), + LocationData("The Moebius Factor", "The Moebius Factor: 1st Data Core ", SC2WOL_LOC_ID_OFFSET + 1001, + lambda state: state._sc2wol_has_air(world, player) or True), + LocationData("The Moebius Factor", "The Moebius Factor: 2nd Data Core", SC2WOL_LOC_ID_OFFSET + 1002, + lambda state: state._sc2wol_has_air(world, player)), LocationData("The Moebius Factor", "The Moebius Factor: South Rescue", SC2WOL_LOC_ID_OFFSET + 1003, lambda state: state._sc2wol_able_to_rescue(world, player) or True), LocationData("The Moebius Factor", "The Moebius Factor: Wall Rescue", SC2WOL_LOC_ID_OFFSET + 1004, @@ -71,30 +116,58 @@ def get_locations(world: Optional[MultiWorld], player: Optional[int]) -> Tuple[L lambda state: state._sc2wol_able_to_rescue(world, player) or True), LocationData("The Moebius Factor", "The Moebius Factor: Alive Inside Rescue", SC2WOL_LOC_ID_OFFSET + 1007, lambda state: state._sc2wol_able_to_rescue(world, player) or True), - LocationData("The Moebius Factor", "The Moebius Factor: Brutalisk", SC2WOL_LOC_ID_OFFSET + 1008), - LocationData("The Moebius Factor", "Beat The Moebius Factor", None), - LocationData("Supernova", "Supernova: Victory", SC2WOL_LOC_ID_OFFSET + 1100), + LocationData("The Moebius Factor", "The Moebius Factor: Brutalisk", SC2WOL_LOC_ID_OFFSET + 1008, + lambda state: state._sc2wol_has_air(world, player)), + LocationData("The Moebius Factor", "Beat The Moebius Factor", None, + lambda state: state._sc2wol_has_air(world, player)), + LocationData("Supernova", "Supernova: Victory", SC2WOL_LOC_ID_OFFSET + 1100, + lambda state: state._sc2wol_has_common_unit(world, player)), LocationData("Supernova", "Supernova: West Relic", SC2WOL_LOC_ID_OFFSET + 1101), - LocationData("Supernova", "Supernova: North Relic", SC2WOL_LOC_ID_OFFSET + 1102), - LocationData("Supernova", "Supernova: South Relic", SC2WOL_LOC_ID_OFFSET + 1103), - LocationData("Supernova", "Supernova: East Relic", SC2WOL_LOC_ID_OFFSET + 1104), - LocationData("Supernova", "Beat Supernova", None), - LocationData("Maw of the Void", "Maw of the Void: Xel'Naga Vault", SC2WOL_LOC_ID_OFFSET + 1200), + LocationData("Supernova", "Supernova: North Relic", SC2WOL_LOC_ID_OFFSET + 1102, + lambda state: state._sc2wol_has_common_unit(world, player)), + LocationData("Supernova", "Supernova: South Relic", SC2WOL_LOC_ID_OFFSET + 1103, + lambda state: state._sc2wol_has_common_unit(world, player)), + LocationData("Supernova", "Supernova: East Relic", SC2WOL_LOC_ID_OFFSET + 1104, + lambda state: state._sc2wol_has_common_unit(world, player)), + LocationData("Supernova", "Beat Supernova", None, + lambda state: state._sc2wol_has_common_unit(world, player)), + LocationData("Maw of the Void", "Maw of the Void: Xel'Naga Vault", SC2WOL_LOC_ID_OFFSET + 1200, + lambda state: state.has('Battlecruiser', player) or state.has('Science Vessel', player) and + state._sc2wol_has_air(world, player)), LocationData("Maw of the Void", "Maw of the Void: Landing Zone Cleared", SC2WOL_LOC_ID_OFFSET + 1201), LocationData("Maw of the Void", "Maw of the Void: Expansion Prisoners", SC2WOL_LOC_ID_OFFSET + 1202), - LocationData("Maw of the Void", "Maw of the Void: South Close Prisoners", SC2WOL_LOC_ID_OFFSET + 1203), - LocationData("Maw of the Void", "Maw of the Void: South Far Prisoners", SC2WOL_LOC_ID_OFFSET + 1204), - LocationData("Maw of the Void", "Maw of the Void: North Prisoners", SC2WOL_LOC_ID_OFFSET + 1205), - LocationData("Maw of the Void", "Beat Maw of the Void", None), - LocationData("Devil's Playground", "Devil's Playground: 8000 Minerals", SC2WOL_LOC_ID_OFFSET + 1300), + LocationData("Maw of the Void", "Maw of the Void: South Close Prisoners", SC2WOL_LOC_ID_OFFSET + 1203, + lambda state: state.has('Battlecruiser', player) or state.has('Science Vessel', player) and + state._sc2wol_has_air(world, player)), + LocationData("Maw of the Void", "Maw of the Void: South Far Prisoners", SC2WOL_LOC_ID_OFFSET + 1204, + lambda state: state.has('Battlecruiser', player) or state.has('Science Vessel', player) and + state._sc2wol_has_air(world, player)), + LocationData("Maw of the Void", "Maw of the Void: North Prisoners", SC2WOL_LOC_ID_OFFSET + 1205, + lambda state: state.has('Battlecruiser', player) or state.has('Science Vessel', player) and + state._sc2wol_has_air(world, player)), + LocationData("Maw of the Void", "Beat Maw of the Void", None, + lambda state: state.has('Battlecruiser', player) or state.has('Science Vessel', player) and + state._sc2wol_has_air(world, player)), + LocationData("Devil's Playground", "Devil's Playground: 8000 Minerals", SC2WOL_LOC_ID_OFFSET + 1300, + lambda state: state._sc2wol_has_common_unit(world, player) or state.has("Reaper", player)), LocationData("Devil's Playground", "Devil's Playground: Tosh's Miners", SC2WOL_LOC_ID_OFFSET + 1301), - LocationData("Devil's Playground", "Devil's Playground: Brutalisk", SC2WOL_LOC_ID_OFFSET + 1302), - LocationData("Devil's Playground", "Beat Devil's Playground", None), - LocationData("Welcome to the Jungle", "Welcome to the Jungle: 7 Canisters", SC2WOL_LOC_ID_OFFSET + 1400), + LocationData("Devil's Playground", "Devil's Playground: Brutalisk", SC2WOL_LOC_ID_OFFSET + 1302, + lambda state: state._sc2wol_has_common_unit(world, player) or state.has("Reaper", player)), + LocationData("Devil's Playground", "Beat Devil's Playground", None, + lambda state: state._sc2wol_has_common_unit(world, player) or state.has("Reaper", player)), + LocationData("Welcome to the Jungle", "Welcome to the Jungle: 7 Canisters", SC2WOL_LOC_ID_OFFSET + 1400, + lambda state: state._sc2wol_has_common_unit(world, player) and + state._sc2wol_has_mobile_anti_air(world, player)), LocationData("Welcome to the Jungle", "Welcome to the Jungle: Close Relic", SC2WOL_LOC_ID_OFFSET + 1401), - LocationData("Welcome to the Jungle", "Welcome to the Jungle: West Relic", SC2WOL_LOC_ID_OFFSET + 1402), - LocationData("Welcome to the Jungle", "Welcome to the Jungle: North-East Relic", SC2WOL_LOC_ID_OFFSET + 1403), - LocationData("Welcome to the Jungle", "Beat Welcome to the Jungle", None), + LocationData("Welcome to the Jungle", "Welcome to the Jungle: West Relic", SC2WOL_LOC_ID_OFFSET + 1402, + lambda state: state._sc2wol_has_common_unit(world, player) and + state._sc2wol_has_mobile_anti_air(world, player)), + LocationData("Welcome to the Jungle", "Welcome to the Jungle: North-East Relic", SC2WOL_LOC_ID_OFFSET + 1403, + lambda state: state._sc2wol_has_common_unit(world, player) and + state._sc2wol_has_mobile_anti_air(world, player)), + LocationData("Welcome to the Jungle", "Beat Welcome to the Jungle", None, + lambda state: state._sc2wol_has_common_unit(world, player) and + state._sc2wol_has_mobile_anti_air(world, player)), LocationData("Breakout", "Breakout: Main Prison", SC2WOL_LOC_ID_OFFSET + 1500), LocationData("Breakout", "Breakout: Diamondback Prison", SC2WOL_LOC_ID_OFFSET + 1501), LocationData("Breakout", "Breakout: Siegetank Prison", SC2WOL_LOC_ID_OFFSET + 1502), @@ -106,36 +179,51 @@ def get_locations(world: Optional[MultiWorld], player: Optional[int]) -> Tuple[L LocationData("Ghost of a Chance", "Ghost of a Chance: Second Island Spectres", SC2WOL_LOC_ID_OFFSET + 1604), LocationData("Ghost of a Chance", "Ghost of a Chance: Third Island Spectres", SC2WOL_LOC_ID_OFFSET + 1605), LocationData("Ghost of a Chance", "Beat Ghost of a Chance", None), - LocationData("The Great Train Robbery", "The Great Train Robbery: 8 Trains", SC2WOL_LOC_ID_OFFSET + 1700, lambda state: state._sc2wol_has_train_killers(world, player)), + LocationData("The Great Train Robbery", "The Great Train Robbery: 8 Trains", SC2WOL_LOC_ID_OFFSET + 1700, + lambda state: state._sc2wol_has_train_killers(world, player)), LocationData("The Great Train Robbery", "The Great Train Robbery: North Defiler", SC2WOL_LOC_ID_OFFSET + 1701), LocationData("The Great Train Robbery", "The Great Train Robbery: Mid Defiler", SC2WOL_LOC_ID_OFFSET + 1702), LocationData("The Great Train Robbery", "The Great Train Robbery: South Defiler", SC2WOL_LOC_ID_OFFSET + 1703), LocationData("The Great Train Robbery", "Beat The Great Train Robbery", None, lambda state: state._sc2wol_has_train_killers(world, player)), - LocationData("Cutthroat", "Cutthroat: Orlan's Planetary", SC2WOL_LOC_ID_OFFSET + 1800), - LocationData("Cutthroat", "Cutthroat: Mira Han", SC2WOL_LOC_ID_OFFSET + 1801), - LocationData("Cutthroat", "Cutthroat: North Relic", SC2WOL_LOC_ID_OFFSET + 1802), + LocationData("Cutthroat", "Cutthroat: Orlan's Planetary", SC2WOL_LOC_ID_OFFSET + 1800, + lambda state: state._sc2wol_has_common_unit(world, player)), + LocationData("Cutthroat", "Cutthroat: Mira Han", SC2WOL_LOC_ID_OFFSET + 1801, + lambda state: state._sc2wol_has_common_unit(world, player)), + LocationData("Cutthroat", "Cutthroat: North Relic", SC2WOL_LOC_ID_OFFSET + 1802, + lambda state: state._sc2wol_has_common_unit(world, player)), LocationData("Cutthroat", "Cutthroat: Mid Relic", SC2WOL_LOC_ID_OFFSET + 1803), - LocationData("Cutthroat", "Cutthroat: Southwest Relic", SC2WOL_LOC_ID_OFFSET + 1804), - LocationData("Cutthroat", "Beat Cutthroat", None), + LocationData("Cutthroat", "Cutthroat: Southwest Relic", SC2WOL_LOC_ID_OFFSET + 1804, + lambda state: state._sc2wol_has_common_unit(world, player)), + LocationData("Cutthroat", "Beat Cutthroat", None, + lambda state: state._sc2wol_has_common_unit(world, player)), LocationData("Engine of Destruction", "Engine of Destruction: Dominion Bases", SC2WOL_LOC_ID_OFFSET + 1900, lambda state: state._sc2wol_has_mobile_anti_air(world, player)), LocationData("Engine of Destruction", "Engine of Destruction: Odin", SC2WOL_LOC_ID_OFFSET + 1901), LocationData("Engine of Destruction", "Engine of Destruction: Loki", SC2WOL_LOC_ID_OFFSET + 1902, - lambda state: state._sc2wol_has_mobile_anti_air(world, player)), + lambda state: state._sc2wol_has_mobile_anti_air(world, player) and + state._sc2wol_has_common_unit(world, player) or state.has('Wraith', player)), LocationData("Engine of Destruction", "Engine of Destruction: Lab Devourer", SC2WOL_LOC_ID_OFFSET + 1903), LocationData("Engine of Destruction", "Engine of Destruction: North Devourer", SC2WOL_LOC_ID_OFFSET + 1904, - lambda state: state._sc2wol_has_mobile_anti_air(world, player)), + lambda state: state._sc2wol_has_mobile_anti_air(world, player) and + state._sc2wol_has_common_unit(world, player) or state.has('Wraith', player)), LocationData("Engine of Destruction", "Engine of Destruction: Southeast Devourer", SC2WOL_LOC_ID_OFFSET + 1905, - lambda state: state._sc2wol_has_mobile_anti_air(world, player)), + lambda state: state._sc2wol_has_mobile_anti_air(world, player) and + state._sc2wol_has_common_unit(world, player) or state.has('Wraith', player)), LocationData("Engine of Destruction", "Beat Engine of Destruction", None, - lambda state: state._sc2wol_has_mobile_anti_air(world, player)), - LocationData("Media Blitz", "Media Blitz: Full Upload", SC2WOL_LOC_ID_OFFSET + 2000), - LocationData("Media Blitz", "Media Blitz: Tower 1", SC2WOL_LOC_ID_OFFSET + 2001), - LocationData("Media Blitz", "Media Blitz: Tower 2", SC2WOL_LOC_ID_OFFSET + 2002), - LocationData("Media Blitz", "Media Blitz: Tower 3", SC2WOL_LOC_ID_OFFSET + 2003), + lambda state: state._sc2wol_has_mobile_anti_air(world, player) and + state._sc2wol_has_common_unit(world, player) or state.has('Wraith', player)), + LocationData("Media Blitz", "Media Blitz: Full Upload", SC2WOL_LOC_ID_OFFSET + 2000, + lambda state: state._sc2wol_has_competent_comp(world, player)), + LocationData("Media Blitz", "Media Blitz: Tower 1", SC2WOL_LOC_ID_OFFSET + 2001, + lambda state: state._sc2wol_has_competent_comp(world, player)), + LocationData("Media Blitz", "Media Blitz: Tower 2", SC2WOL_LOC_ID_OFFSET + 2002, + lambda state: state._sc2wol_has_competent_comp(world, player)), + LocationData("Media Blitz", "Media Blitz: Tower 3", SC2WOL_LOC_ID_OFFSET + 2003, + lambda state: state._sc2wol_has_competent_comp(world, player)), LocationData("Media Blitz", "Media Blitz: Science Facility", SC2WOL_LOC_ID_OFFSET + 2004), - LocationData("Media Blitz", "Beat Media Blitz", None), + LocationData("Media Blitz", "Beat Media Blitz", None, + lambda state: state._sc2wol_has_competent_comp(world, player)), LocationData("Piercing the Shroud", "Piercing the Shroud: Facility Escape", SC2WOL_LOC_ID_OFFSET + 2100), LocationData("Piercing the Shroud", "Piercing the Shroud: Holding Cell Relic", SC2WOL_LOC_ID_OFFSET + 2101), LocationData("Piercing the Shroud", "Piercing the Shroud: Brutalisk Relic", SC2WOL_LOC_ID_OFFSET + 2102), @@ -156,31 +244,45 @@ def get_locations(world: Optional[MultiWorld], player: Optional[int]) -> Tuple[L lambda state: state._sc2wol_has_protoss_common_units(world, player)), LocationData("A Sinister Turn", "Beat A Sinister Turn", None, lambda state: state._sc2wol_has_protoss_medium_units(world, player)), - LocationData("Echoes of the Future", "Echoes of the Future: Overmind", SC2WOL_LOC_ID_OFFSET + 2400), + LocationData("Echoes of the Future", "Echoes of the Future: Overmind", SC2WOL_LOC_ID_OFFSET + 2400, + lambda state: state._sc2wol_has_protoss_medium_units(world, player)), LocationData("Echoes of the Future", "Echoes of the Future: Close Obelisk", SC2WOL_LOC_ID_OFFSET + 2401), - LocationData("Echoes of the Future", "Echoes of the Future: West Obelisk", SC2WOL_LOC_ID_OFFSET + 2402), - LocationData("Echoes of the Future", "Beat Echoes of the Future", None), - LocationData("In Utter Darkness", "In Utter Darkness: Kills", SC2WOL_LOC_ID_OFFSET + 2500), - LocationData("In Utter Darkness", "In Utter Darkness: Protoss Archive", SC2WOL_LOC_ID_OFFSET + 2501), + LocationData("Echoes of the Future", "Echoes of the Future: West Obelisk", SC2WOL_LOC_ID_OFFSET + 2402, + lambda state: state._sc2wol_has_protoss_common_units(world, player)), + LocationData("Echoes of the Future", "Beat Echoes of the Future", None, + lambda state: state._sc2wol_has_protoss_medium_units(world, player)), + LocationData("In Utter Darkness", "In Utter Darkness: Kills", SC2WOL_LOC_ID_OFFSET + 2500, + lambda state: state._sc2wol_has_protoss_medium_units(world, player)), + LocationData("In Utter Darkness", "In Utter Darkness: Protoss Archive", SC2WOL_LOC_ID_OFFSET + 2501, + lambda state: state._sc2wol_has_protoss_medium_units(world, player)), LocationData("In Utter Darkness", "In Utter Darkness: Defeat", SC2WOL_LOC_ID_OFFSET + 2502), - LocationData("In Utter Darkness", "Beat In Utter Darkness", None), - LocationData("Gates of Hell", "Gates of Hell: Nydus Worms", SC2WOL_LOC_ID_OFFSET + 2600), - LocationData("Gates of Hell", "Gates of Hell: Large Army", SC2WOL_LOC_ID_OFFSET + 2601), + LocationData("In Utter Darkness", "Beat In Utter Darkness", None, + lambda state: state._sc2wol_has_protoss_medium_units(world, player)), + LocationData("Gates of Hell", "Gates of Hell: Nydus Worms", SC2WOL_LOC_ID_OFFSET + 2600, + lambda state: state._sc2wol_has_competent_comp(world, player)), + LocationData("Gates of Hell", "Gates of Hell: Large Army", SC2WOL_LOC_ID_OFFSET + 2601, + lambda state: state._sc2wol_has_competent_comp(world, player)), LocationData("Gates of Hell", "Beat Gates of Hell", None), LocationData("Belly of the Beast", "Belly of the Beast: Extract", SC2WOL_LOC_ID_OFFSET + 2700), LocationData("Belly of the Beast", "Belly of the Beast: First Charge", SC2WOL_LOC_ID_OFFSET + 2701), LocationData("Belly of the Beast", "Belly of the Beast: Second Charge", SC2WOL_LOC_ID_OFFSET + 2702), LocationData("Belly of the Beast", "Belly of the Beast: Third Charge", SC2WOL_LOC_ID_OFFSET + 2703), LocationData("Belly of the Beast", "Beat Belly of the Beast", None), - LocationData("Shatter the Sky", "Shatter the Sky: Platform Destroyed", SC2WOL_LOC_ID_OFFSET + 2800), - LocationData("Shatter the Sky", "Shatter the Sky: Close Coolant Tower", SC2WOL_LOC_ID_OFFSET + 2801), - LocationData("Shatter the Sky", "Shatter the Sky: Northwest Coolant Tower", SC2WOL_LOC_ID_OFFSET + 2802), - LocationData("Shatter the Sky", "Shatter the Sky: Southeast Coolant Tower", SC2WOL_LOC_ID_OFFSET + 2803), - LocationData("Shatter the Sky", "Shatter the Sky: Southwest Coolant Tower", SC2WOL_LOC_ID_OFFSET + 2804), - LocationData("Shatter the Sky", "Shatter the Sky: Leviathan", SC2WOL_LOC_ID_OFFSET + 2805), - LocationData("Shatter the Sky", "Beat Shatter the Sky", None), + LocationData("Shatter the Sky", "Shatter the Sky: Platform Destroyed", SC2WOL_LOC_ID_OFFSET + 2800, + lambda state: state._sc2wol_has_competent_comp(world, player)), + LocationData("Shatter the Sky", "Shatter the Sky: Close Coolant Tower", SC2WOL_LOC_ID_OFFSET + 2801, + lambda state: state._sc2wol_has_competent_comp(world, player)), + LocationData("Shatter the Sky", "Shatter the Sky: Northwest Coolant Tower", SC2WOL_LOC_ID_OFFSET + 2802, + lambda state: state._sc2wol_has_competent_comp(world, player)), + LocationData("Shatter the Sky", "Shatter the Sky: Southeast Coolant Tower", SC2WOL_LOC_ID_OFFSET + 2803, + lambda state: state._sc2wol_has_competent_comp(world, player)), + LocationData("Shatter the Sky", "Shatter the Sky: Southwest Coolant Tower", SC2WOL_LOC_ID_OFFSET + 2804, + lambda state: state._sc2wol_has_competent_comp(world, player)), + LocationData("Shatter the Sky", "Shatter the Sky: Leviathan", SC2WOL_LOC_ID_OFFSET + 2805, + lambda state: state._sc2wol_has_competent_comp(world, player)), + LocationData("Shatter the Sky", "Beat Shatter the Sky", None, + lambda state: state._sc2wol_has_competent_comp(world, player)), LocationData("All-In", "All-In: Victory", None) ] return tuple(location_table) - diff --git a/worlds/sc2wol/LogicMixin.py b/worlds/sc2wol/LogicMixin.py index 721473726f..7e2fc2f0e8 100644 --- a/worlds/sc2wol/LogicMixin.py +++ b/worlds/sc2wol/LogicMixin.py @@ -12,9 +12,6 @@ class SC2WoLLogic(LogicMixin): def _sc2wol_has_air(self, world: MultiWorld, player: int) -> bool: return self.has_any({'Viking', 'Wraith', 'Medivac', 'Banshee', 'Hercules'}, player) - def _sc2wol_has_battlecruiser(self, world: MultiWorld, player: int) -> bool: - return self.has('Battlecruiser', player) - def _sc2wol_has_air_anti_air(self, world: MultiWorld, player: int) -> bool: return self.has_any({'Viking', 'Wraith'}, player) @@ -29,6 +26,12 @@ class SC2WoLLogic(LogicMixin): self.has('Bunker', player) and self._sc2wol_has_bunker_unit(world, player)) and \ self._sc2wol_has_anti_air(world, player) + def _sc2wol_has_competent_comp(self, world: MultiWorld, player: int) -> bool: + return (self.has('Marine', player) or self.has('Marauder', player) and + self._sc2wol_has_mobile_anti_air(world, player)) and self.has_any({'Medivac', 'Medic'}, player) or \ + self.has('Thor', player) or self.has("Banshee", player) and self._sc2wol_has_mobile_anti_air(world, player) or \ + self.has('Battlecruiser', player) and self._sc2wol_has_common_unit(world, player) + def _sc2wol_has_train_killers(self, world: MultiWorld, player: int) -> bool: return (self.has_any({'Siege Tank', 'Diamondback'}, player) or self.has_all({'Reaper', "G-4 Clusterbomb"}, player) or self.has_all({'Spectre', 'Psionic Lash'}, player)) diff --git a/worlds/sc2wol/Regions.py b/worlds/sc2wol/Regions.py index 0f0c408e9c..e0d8415b08 100644 --- a/worlds/sc2wol/Regions.py +++ b/worlds/sc2wol/Regions.py @@ -48,54 +48,71 @@ def create_regions(world: MultiWorld, player: int, locations: Tuple[LocationData connect(world, player, names, 'Menu', 'Liberation Day'), connect(world, player, names, 'Liberation Day', 'The Outlaws', - lambda state: state._sc2wol_has_common_unit(world, player)), - connect(world, player, names, 'The Outlaws', 'Zero Hour'), + lambda state: state.has("Beat Liberation Day", player)), + connect(world, player, names, 'The Outlaws', 'Zero Hour', + lambda state: state.has("Beat The Outlaws", player)), connect(world, player, names, 'Zero Hour', 'Evacuation', - lambda state: state._sc2wol_has_anti_air(world, player)), - connect(world, player, names, 'Evacuation', 'Outbreak'), + lambda state: state.has("Beat Zero Hour", player)), + connect(world, player, names, 'Evacuation', 'Outbreak', + lambda state: state.has("Beat Evacuation", player)), connect(world, player, names, "Outbreak", "Safe Haven", - lambda state: state._sc2wol_has_mobile_anti_air(world, player) and - state._sc2wol_cleared_missions(world, player, 7)), + lambda state: state._sc2wol_cleared_missions(world, player, 7) and + state.has("Beat Outbreak", player)), connect(world, player, names, "Outbreak", "Haven's Fall", - lambda state: state._sc2wol_has_mobile_anti_air(world, player) and - state._sc2wol_cleared_missions(world, player, 7)), + lambda state: state._sc2wol_cleared_missions(world, player, 7) and + state.has("Beat Outbreak", player)), connect(world, player, names, 'Zero Hour', 'Smash and Grab', - lambda state: state._sc2wol_has_anti_air(world, player)), + lambda state: state.has("Beat Zero Hour", player)), connect(world, player, names, 'Smash and Grab', 'The Dig', lambda state: state._sc2wol_cleared_missions(world, player, 8) and - state._sc2wol_has_heavy_defense(world, player)), + state.has("Beat Smash and Grab", player)), connect(world, player, names, 'The Dig', 'The Moebius Factor', lambda state: state._sc2wol_cleared_missions(world, player, 11) and - state._sc2wol_has_air(world, player)), + state.has("Beat The Dig", player)), connect(world, player, names, 'The Moebius Factor', 'Supernova', - lambda state: state._sc2wol_cleared_missions(world, player, 14)), - connect(world, player, names, 'Supernova', 'Maw of the Void'), + lambda state: state._sc2wol_cleared_missions(world, player, 14) and + state.has("Beat The Moebius Factor", player)), + connect(world, player, names, 'Supernova', 'Maw of the Void', + lambda state: state.has("Beat Supernova", player)), connect(world, player, names, 'Zero Hour', "Devil's Playground", - lambda state: state._sc2wol_cleared_missions(world, player, 4)), - connect(world, player, names, "Devil's Playground", 'Welcome to the Jungle'), + lambda state: state._sc2wol_cleared_missions(world, player, 4) and + state.has("Beat Zero Hour", player)), + connect(world, player, names, "Devil's Playground", 'Welcome to the Jungle', + lambda state: state.has("Beat Devil's Playground", player)), connect(world, player, names, "Welcome to the Jungle", 'Breakout', - lambda state: state._sc2wol_cleared_missions(world, player, 8)), + lambda state: state._sc2wol_cleared_missions(world, player, 8) and + state.has("Beat Welcome to the Jungle", player)), connect(world, player, names, "Welcome to the Jungle", 'Ghost of a Chance', - lambda state: state._sc2wol_cleared_missions(world, player, 8)), + lambda state: state._sc2wol_cleared_missions(world, player, 8) and + state.has("Beat Welcome to the Jungle", player)), connect(world, player, names, "Zero Hour", 'The Great Train Robbery', - lambda state: state._sc2wol_cleared_missions(world, player, 6)), + lambda state: state._sc2wol_cleared_missions(world, player, 6) and + state.has("Beat Zero Hour", player)), connect(world, player, names, 'The Great Train Robbery', 'Cutthroat', lambda state: state.has("Beat The Great Train Robbery", player)), connect(world, player, names, 'Cutthroat', 'Engine of Destruction', - lambda state: state.has("Beat The Great Train Robbery", player)), + lambda state: state.has("Beat Cutthroat", player)), connect(world, player, names, 'Engine of Destruction', 'Media Blitz', lambda state: state.has("Beat Engine of Destruction", player)), - connect(world, player, names, 'Media Blitz', 'Piercing the Shroud'), - connect(world, player, names, 'The Dig', 'Whispers of Doom',), - connect(world, player, names, 'Whispers of Doom', 'A Sinister Turn'), + connect(world, player, names, 'Media Blitz', 'Piercing the Shroud', + lambda state: state.has("Beat Media Blitz", player)), + connect(world, player, names, 'The Dig', 'Whispers of Doom', + lambda state: state.has("Beat The Dig", player)), + connect(world, player, names, 'Whispers of Doom', 'A Sinister Turn', + lambda state: state.has("Beat Whispers of Doom", player)), connect(world, player, names, 'A Sinister Turn', 'Echoes of the Future', lambda state: state.has("Beat A Sinister Turn", player)), - connect(world, player, names, 'Echoes of the Future', 'In Utter Darkness'), - connect(world, player, names, 'Maw of the Void', 'Gates of Hell'), - connect(world, player, names, 'Gates of Hell', 'Belly of the Beast'), - connect(world, player, names, 'Gates of Hell', 'Shatter the Sky'), + connect(world, player, names, 'Echoes of the Future', 'In Utter Darkness', + lambda state: state.has("Beat Echoes of the Future", player)), + connect(world, player, names, 'Maw of the Void', 'Gates of Hell', + lambda state: state.has("Beat Maw of the Void", player)), + connect(world, player, names, 'Gates of Hell', 'Belly of the Beast', + lambda state: state.has("Beat Gates of Hell", player)), + connect(world, player, names, 'Gates of Hell', 'Shatter the Sky', + lambda state: state.has("Beat Gates of Hell", player)), connect(world, player, names, 'Gates of Hell', 'All-In', - lambda state: state.has('Beat Gates of Hell', player) or state.has('Beat Shatter the Sky', player)) + lambda state: state.has('Beat Gates of Hell', player) and ( + state.has('Beat Shatter the Sky', player) or state.has('Beat Belly of the Beast', player))) def throwIfAnyLocationIsNotAssignedToARegion(regions: List[Region], regionNames: Set[str]): @@ -105,10 +122,12 @@ def throwIfAnyLocationIsNotAssignedToARegion(regions: List[Region], regionNames: existingRegions.add(region.name) if (regionNames - existingRegions): - raise Exception("Starcraft: the following regions are used in locations: {}, but no such region exists".format(regionNames - existingRegions)) + raise Exception("Starcraft: the following regions are used in locations: {}, but no such region exists".format( + regionNames - existingRegions)) -def create_location(player: int, location_data: LocationData, region: Region, location_cache: List[Location]) -> Location: +def create_location(player: int, location_data: LocationData, region: Region, + location_cache: List[Location]) -> Location: location = Location(player, location_data.name, location_data.code, region) location.access_rule = location_data.rule @@ -121,7 +140,8 @@ def create_location(player: int, location_data: LocationData, region: Region, lo return location -def create_region(world: MultiWorld, player: int, locations_per_region: Dict[str, List[LocationData]], location_cache: List[Location], name: str) -> Region: +def create_region(world: MultiWorld, player: int, locations_per_region: Dict[str, List[LocationData]], + location_cache: List[Location], name: str) -> Region: region = Region(name, RegionType.Generic, name, player) region.world = world @@ -133,7 +153,8 @@ def create_region(world: MultiWorld, player: int, locations_per_region: Dict[str return region -def connect(world: MultiWorld, player: int, used_names: Dict[str, int], source: str, target: str, rule: Optional[Callable] = None): +def connect(world: MultiWorld, player: int, used_names: Dict[str, int], source: str, target: str, + rule: Optional[Callable] = None): sourceRegion = world.get_region(source, player) targetRegion = world.get_region(target, player) @@ -154,7 +175,7 @@ def connect(world: MultiWorld, player: int, used_names: Dict[str, int], source: def get_locations_per_region(locations: Tuple[LocationData, ...]) -> Dict[str, List[LocationData]]: - per_region: Dict[str, List[LocationData]] = {} + per_region: Dict[str, List[LocationData]] = {} for location in locations: per_region.setdefault(location.region, []).append(location) From 388f064307546bb1d3f1f323269c3604991e2923 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Fri, 20 May 2022 17:05:16 +0200 Subject: [PATCH 107/149] SC2: fix typo in AllInMap Choice --- worlds/sc2wol/Options.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/worlds/sc2wol/Options.py b/worlds/sc2wol/Options.py index 6a06872c6f..8772aa60e5 100644 --- a/worlds/sc2wol/Options.py +++ b/worlds/sc2wol/Options.py @@ -2,6 +2,7 @@ from typing import Dict from BaseClasses import MultiWorld from Options import Choice, Option + class GameDifficulty(Choice): """The difficulty of the campaign, affects enemy AI, starting units, and game speed.""" display_name = "Game Difficulty" @@ -10,6 +11,7 @@ class GameDifficulty(Choice): option_hard = 2 option_brutal = 3 + class UpgradeBonus(Choice): """Determines what lab upgrade to use, whether it is Ultra-Capacitors which boost attack speed with every weapon upgrade or Vanadium Plating which boosts life with every armor upgrade.""" @@ -17,6 +19,7 @@ class UpgradeBonus(Choice): option_ultra_capacitors = 0 option_vanadium_plating = 1 + class BunkerUpgrade(Choice): """Determines what bunker lab upgrade to use, whether it is Shrike Turret which outfits bunkers with an automated turret or Fortified Bunker which boosts the life of bunkers.""" @@ -24,8 +27,9 @@ class BunkerUpgrade(Choice): option_shrike_turret = 0 option_fortified_bunker = 1 + class AllInMap(Choice): - """Determines what verion of All-In (final map) that will be generated for the campaign.""" + """Determines what version of All-In (final map) that will be generated for the campaign.""" display_name = "All In Map" option_ground = 0 option_air = 1 @@ -39,10 +43,11 @@ sc2wol_options: Dict[str, Option] = { "all_in_map": AllInMap, } + def get_option_value(world: MultiWorld, player: int, name: str) -> int: option = getattr(world, name, None) if option == None: return 0 - return int(option[player].value) \ No newline at end of file + return int(option[player].value) From effba9fdec1bbaf049478e91e843a8c157c28fb9 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sat, 21 May 2022 02:36:06 +0200 Subject: [PATCH 108/149] Factorio: fix crude-oil having no requirements at all --- worlds/factorio/Technologies.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/worlds/factorio/Technologies.py b/worlds/factorio/Technologies.py index 7ffd1d1712..3f6f6ea951 100644 --- a/worlds/factorio/Technologies.py +++ b/worlds/factorio/Technologies.py @@ -195,6 +195,7 @@ all_product_sources: Dict[str, Set[Recipe]] = {"character": set()} # add uranium mining to logic graph. TODO: add to automatic extractor for mod support raw_recipes["uranium-ore"] = {"ingredients": {"sulfuric-acid": 1}, "products": {"uranium-ore": 1}, "category": "mining", "energy": 2} +raw_recipes["crude-oil"] = {"ingredients": {}, "products": {"crude-oil"}, "category": "basic-fluid"} # raw_recipes["iron-ore"] = {"ingredients": {}, "products": {"iron-ore": 1}, "category": "mining", "energy": 2} # raw_recipes["copper-ore"] = {"ingredients": {}, "products": {"copper-ore": 1}, "category": "mining", "energy": 2} @@ -225,6 +226,7 @@ for name, categories in raw_machines.items(): # add electric mining drill as a crafting machine to resolve uranium-ore machines["electric-mining-drill"] = Machine("electric-mining-drill", {"mining"}) +machines["pumpjack"] = Machine("pumpjack", {"basic-fluid"}) machines["assembling-machine-1"].categories.add("crafting-with-fluid") # mod enables this machines["character"].categories.add("basic-crafting") # somehow this is implied and not exported del (raw_machines) @@ -301,6 +303,7 @@ for category_name, machine_name in machine_per_category.items(): required_technologies: Dict[str, FrozenSet[Technology]] = Utils.KeyedDefaultDict(lambda ingredient_name: frozenset( recursively_get_unlocking_technologies(ingredient_name, unlock_func=unlock))) + def get_rocket_requirements(silo_recipe: Recipe, part_recipe: Recipe, satellite_recipe: Recipe) -> Set[str]: techs = set() if silo_recipe: From f515f680a421edb646769eaab7b51431dbe982ba Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Sat, 21 May 2022 00:12:28 -0400 Subject: [PATCH 109/149] ArchipIDLE is only visible during April --- worlds/archipidle/__init__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/worlds/archipidle/__init__.py b/worlds/archipidle/__init__.py index e54530afea..c515330260 100644 --- a/worlds/archipidle/__init__.py +++ b/worlds/archipidle/__init__.py @@ -2,6 +2,7 @@ from BaseClasses import Item, MultiWorld, Region, Location, Entrance, Tutorial from .Items import item_table from .Rules import set_rules from ..AutoWorld import World, WebWorld +from datetime import datetime class ArchipIDLEWebWorld(WebWorld): @@ -23,6 +24,7 @@ class ArchipIDLEWorld(World): game = "ArchipIDLE" topology_present = False data_version = 3 + hidden = (datetime.now().month != 4) # ArchipIDLE is only visible during April web = ArchipIDLEWebWorld() item_name_to_id = {} From e1926c973e478639431239edcaf4a73916c00170 Mon Sep 17 00:00:00 2001 From: Alchav <59858495+Alchav@users.noreply.github.com> Date: Sat, 21 May 2022 14:52:00 -0400 Subject: [PATCH 110/149] [SC2] Item name groups and item game name fix (#555) --- worlds/sc2wol/Items.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/worlds/sc2wol/Items.py b/worlds/sc2wol/Items.py index 1e69cb2c32..daa3d98cfd 100644 --- a/worlds/sc2wol/Items.py +++ b/worlds/sc2wol/Items.py @@ -1,6 +1,7 @@ from BaseClasses import Item import typing + class ItemData(typing.NamedTuple): code: typing.Optional[int] type: typing.Optional[str] @@ -11,7 +12,7 @@ class ItemData(typing.NamedTuple): class StarcraftWoLItem(Item): - game: str = "Starcraft2WoL" + game: str = "Starcraft 2 Wings of Liberty" def __init__(self, name, advancement: bool = False, code: int = None, player: int = None): super(StarcraftWoLItem, self).__init__(name, advancement, code, player) @@ -153,13 +154,15 @@ basic_unit: typing.Tuple[str, ...] = ( ) -item_name_groups = {"Missions": - {"Beat Liberation Day", "Beat The Outlaws", "Beat Zero Hour", "Beat Evacuation", +item_name_groups = {} +for item, data in item_table.items(): + item_name_groups.setdefault(data.type, []).append(item) +item_name_groups["Missions"] = ["Beat Liberation Day", "Beat The Outlaws", "Beat Zero Hour", "Beat Evacuation", "None Outbreak", "Beat Safe Haven", "Beat Haven's Fall", "Beat Smash and Grab", "Beat The Dig", "Beat The Moebius Factor", "Beat Supernova", "Beat Maw of the Void", "Beat Devil's Playground", "Beat Welcome to the Jungle", "Beat Breakout", "Beat Ghost of a Chance", "Beat The Great Train Robbery", "Beat Cutthroat", "Beat Engine of Destruction", - "Beat Media Blitz", "Beat Piercing the Shroud"}} + "Beat Media Blitz", "Beat Piercing the Shroud"] filler_items: typing.Tuple[str, ...] = ( '+5 Starting Minerals', From 2b8a0f8cd897c6c8ed2209e8a5d47e538ba264ba Mon Sep 17 00:00:00 2001 From: TheCondor07 Date: Sat, 21 May 2022 13:12:49 -0400 Subject: [PATCH 111/149] SC2: Better set-up instructs and a section for those having issues --- worlds/sc2wol/docs/setup_en.md | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/worlds/sc2wol/docs/setup_en.md b/worlds/sc2wol/docs/setup_en.md index 5ca7a7e7e0..af32047be9 100644 --- a/worlds/sc2wol/docs/setup_en.md +++ b/worlds/sc2wol/docs/setup_en.md @@ -13,10 +13,10 @@ Starcraft 2 AP Client launches a custom version of Starcraft 2 running modified ## Installation Procedures -Download latest release on [Starcraft 2 Archipelago Data Releases](https://github.com/TheCondor07/Starcraft2ArchipelagoData/releases) you -can find the .zip files on the releases page. Download the zip then extract the zip to the -folder where your Starcraft 2 game is installed. The just run ArchipelagoStarcraftClient.exe to start the client to - connect to a Multiworld Game. +Follow the installation directions at the +[Starcraft 2 AP Maps and Data](https://github.com/TheCondor07/Starcraft2ArchipelagoData) page you can find the .zip +files on the releases page. After it is installed just run ArchipelagoStarcraftClient.exe to start the client to connect +to a Multiworld Game. ## Joining a MultiWorld Game @@ -31,3 +31,21 @@ new games under default settings the first mission available will always be Libe The [Player Settings](/games/Starcraft%202%20Wings%20of%20Liberty/player-settings) page on the website allows you to configure your personal settings and export them into a config file + +## Game isn't launching when I type /play + +First check the log file for issues (stored at [Archipelago Directory]/logs/SC2Client.txt. There is sometimes an issue +where the client can not find Starcraft 2. Usually Documents/Starcraft 2/ExecuteInfo.txt is checked to find where +Starcraft 2 is installed. On some computers particularly if you have OneDrive running this may fail. The following +directions may help you in this case if you are on Windows. + +1. Navigate to '%userprofile%'. Easiest way to do this is to hit Windows key+R type in %userprofile% and hit run or +type in %userprofile% in the navigation bar of your file explorer. +2. If it does not exist create a folder in her named 'Documents'. +3. Locate your 'My Documents' folder on your pc. If you navigate to 'My PC' on the sidebar of file explorer should be a +link to this folder there labeled 'Documents'. +4. Find a folder labeled 'Starcraft 2' and copy it. +5. Paste this Starcraft 2 folder into the folder created or found in step 2. + +These steps have been shown to work for some people for some people having issues with launching the game. If you are +still having issues check out our [Discord](https://discord.com/invite/8Z65BR2) for help. \ No newline at end of file From 0c80cd017f6213a5480c2e3e0e407bdb98b9afc2 Mon Sep 17 00:00:00 2001 From: jtoyoda Date: Sat, 21 May 2022 11:28:31 -0600 Subject: [PATCH 112/149] Adding in error message for FF1 if player name is empty in the ROM --- FF1Client.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/FF1Client.py b/FF1Client.py index f9f4d00ee0..2b406cebcd 100644 --- a/FF1Client.py +++ b/FF1Client.py @@ -187,6 +187,9 @@ async def nes_sync_task(ctx: FF1Context): asyncio.create_task(parse_locations(data_decoded['locations'], ctx, False)) if not ctx.auth: ctx.auth = ''.join([chr(i) for i in data_decoded['playerName'] if i != 0]) + if ctx.auth == '': + logger.info("Invalid ROM detected. No player name built into the ROM. Please regenerate" + "the ROM using the same link but adding your slot name") if ctx.awaiting_rom: await ctx.server_auth(False) except asyncio.TimeoutError: From 86013328d6c2a429e44364ed35eb8587b70f9ba4 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sat, 21 May 2022 20:57:26 +0200 Subject: [PATCH 113/149] Factorio: fix crude-oil related crashes (#552) --- Options.py | 1 + worlds/factorio/Technologies.py | 15 ++++++++++++--- worlds/factorio/__init__.py | 4 +++- .../data/mod_template/data-final-fixes.lua | 4 ++-- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/Options.py b/Options.py index 6a3dd5bc4d..2fdb92dae7 100644 --- a/Options.py +++ b/Options.py @@ -8,6 +8,7 @@ import random from schema import Schema, And, Or, Optional from Utils import get_fuzzy_results + class AssembleOptions(abc.ABCMeta): def __new__(mcs, name, bases, attrs): options = attrs["options"] = {} diff --git a/worlds/factorio/Technologies.py b/worlds/factorio/Technologies.py index 3f6f6ea951..d7d1b88b41 100644 --- a/worlds/factorio/Technologies.py +++ b/worlds/factorio/Technologies.py @@ -193,9 +193,18 @@ del (raw) recipes = {} all_product_sources: Dict[str, Set[Recipe]] = {"character": set()} # add uranium mining to logic graph. TODO: add to automatic extractor for mod support -raw_recipes["uranium-ore"] = {"ingredients": {"sulfuric-acid": 1}, "products": {"uranium-ore": 1}, "category": "mining", - "energy": 2} -raw_recipes["crude-oil"] = {"ingredients": {}, "products": {"crude-oil"}, "category": "basic-fluid"} +raw_recipes["uranium-ore"] = { + "ingredients": {"sulfuric-acid": 1}, + "products": {"uranium-ore": 1}, + "category": "mining", + "energy": 2 +} +raw_recipes["crude-oil"] = { + "ingredients": {}, + "products": {"crude-oil": 1}, + "category": "basic-fluid", + "energy": 1 +} # raw_recipes["iron-ore"] = {"ingredients": {}, "products": {"iron-ore": 1}, "category": "mining", "energy": 2} # raw_recipes["copper-ore"] = {"ingredients": {}, "products": {"copper-ore": 1}, "category": "mining", "energy": 2} diff --git a/worlds/factorio/__init__.py b/worlds/factorio/__init__.py index 9ca1156ecc..6cf6f35751 100644 --- a/worlds/factorio/__init__.py +++ b/worlds/factorio/__init__.py @@ -245,14 +245,16 @@ class Factorio(World): ingredient = pool.pop() if liquids_used == allow_liquids and ingredient in liquids: continue # can't use this ingredient as we already have maximum liquid in our recipe. + ingredient_raw = 0 if ingredient in all_product_sources: ingredient_recipe = min(all_product_sources[ingredient], key=lambda recipe: recipe.rel_cost) ingredient_raw = sum((count for ingredient, count in ingredient_recipe.base_cost.items())) ingredient_energy = ingredient_recipe.total_energy else: # assume simple ore TODO: remove if tree when mining data is harvested from Factorio - ingredient_raw = 1 ingredient_energy = 2 + if not ingredient_raw: + ingredient_raw = 1 if remaining_num_ingredients == 1: max_raw = 1.1 * remaining_raw min_raw = 0.9 * remaining_raw diff --git a/worlds/factorio/data/mod_template/data-final-fixes.lua b/worlds/factorio/data/mod_template/data-final-fixes.lua index d9b16bf5fa..36d1df5393 100644 --- a/worlds/factorio/data/mod_template/data-final-fixes.lua +++ b/worlds/factorio/data/mod_template/data-final-fixes.lua @@ -178,13 +178,13 @@ data:extend{new_tree_copy} {% endfor %} {% if recipe_time_scale %} {%- for recipe_name, recipe in recipes.items() %} -{%- if recipe.category != "mining" %} +{%- if recipe.category not in ("mining", "basic-fluid") %} adjust_energy("{{ recipe_name }}", {{ flop_random(*recipe_time_scale) }}) {%- endif %} {%- endfor -%} {% elif recipe_time_range %} {%- for recipe_name, recipe in recipes.items() %} -{%- if recipe.category != "mining" %} +{%- if recipe.category not in ("mining", "basic-fluid") %} set_energy("{{ recipe_name }}", {{ flop_random(*recipe_time_range) }}) {%- endif %} {%- endfor -%} From 909ea9dc9967f76f46c729bf9216eda47d705fb6 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sat, 21 May 2022 23:18:34 +0200 Subject: [PATCH 114/149] WebHost: fix plando options type error --- WebHostLib/check.py | 1 + 1 file changed, 1 insertion(+) diff --git a/WebHostLib/check.py b/WebHostLib/check.py index 46de51b8cf..9557e5093b 100644 --- a/WebHostLib/check.py +++ b/WebHostLib/check.py @@ -63,6 +63,7 @@ def get_yaml_data(file) -> Union[Dict[str, str], str]: def roll_options(options: Dict[str, Union[dict, str]], plando_options: set = {"bosses", "items", "connections", "texts"}) -> Tuple[Dict[str, Union[str, bool]], Dict[str, dict]]: + plando_options = set(plando_options) results = {} rolled_results = {} for filename, text in options.items(): From 9eb237b3af9c142fb551580346c74d8bb8a50319 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sat, 21 May 2022 22:24:49 +0200 Subject: [PATCH 115/149] Clients: some cleanup --- CommonClient.py | 36 +++++++++++++++++------------------- SNIClient.py | 2 +- Starcraft2Client.py | 13 ++++++++++++- 3 files changed, 30 insertions(+), 21 deletions(-) diff --git a/CommonClient.py b/CommonClient.py index a8374f3d0d..2c2236b375 100644 --- a/CommonClient.py +++ b/CommonClient.py @@ -24,7 +24,7 @@ import os logger = logging.getLogger("Client") -# without terminal we have to use gui mode +# without terminal, we have to use gui mode gui_enabled = not sys.stdout or "--nogui" not in sys.argv @@ -125,7 +125,7 @@ class CommonContext(): input_task: typing.Optional[asyncio.Task] = None keep_alive_task: typing.Optional[asyncio.Task] = None items_handling: typing.Optional[int] = None - current_energy_link_value = 0 # to display in UI, gets set by server + current_energy_link_value: int = 0 # to display in UI, gets set by server def __init__(self, server_address, password): # server state @@ -181,14 +181,24 @@ class CommonContext(): return len(self.checked_locations | self.missing_locations) async def connection_closed(self): + self.reset_server_state() + if self.server and self.server.socket is not None: + await self.server.socket.close() + + def reset_server_state(self): self.auth = None self.items_received = [] self.locations_info = {} self.server_version = Version(0, 0, 0) - if self.server and self.server.socket is not None: - await self.server.socket.close() self.server = None self.server_task = None + self.games = {} + self.hint_cost = None + self.permissions = { + "forfeit": "disabled", + "collect": "disabled", + "remaining": "disabled", + } # noinspection PyAttributeOutsideInit def set_getters(self, data_package: dict, network=False): @@ -219,13 +229,6 @@ class CommonContext(): self.location_name_getter = get_location_name_from_address - @property - def endpoints(self): - if self.server: - return [self.server] - else: - return [] - async def disconnect(self): if self.server and not self.server.socket.closed: await self.server.socket.close() @@ -385,7 +388,6 @@ async def keep_alive(ctx: CommonContext, seconds_between_checks=100): async def server_loop(ctx: CommonContext, address=None): - cached_address = None if ctx.server and ctx.server.socket: logger.error('Already connected') return @@ -413,16 +415,12 @@ async def server_loop(ctx: CommonContext, address=None): await process_server_cmd(ctx, msg) logger.warning('Disconnected from multiworld server, type /connect to reconnect') except ConnectionRefusedError: - if cached_address: - logger.error('Unable to connect to multiworld server at cached address. ' - 'Please use the connect button above.') - else: - logger.exception('Connection refused by the multiworld server') + logger.exception('Connection refused by the server. May not be running Archipelago on that address or port.') except websockets.InvalidURI: logger.exception('Failed to connect to the multiworld server (invalid URI)') - except (OSError, websockets.InvalidURI): + except OSError: logger.exception('Failed to connect to the multiworld server') - except Exception as e: + except Exception: logger.exception('Lost connection to the multiworld server, type /connect to reconnect') finally: await ctx.connection_closed() diff --git a/SNIClient.py b/SNIClient.py index 1fa46899ff..9173a45190 100644 --- a/SNIClient.py +++ b/SNIClient.py @@ -28,7 +28,7 @@ from worlds.alttp.Rom import ROM_PLAYER_LIMIT from worlds.sm.Rom import ROM_PLAYER_LIMIT as SM_ROM_PLAYER_LIMIT from worlds.smz3.Rom import ROM_PLAYER_LIMIT as SMZ3_ROM_PLAYER_LIMIT import Utils -from CommonClient import CommonContext, server_loop, console_loop, ClientCommandProcessor, gui_enabled, get_base_parser +from CommonClient import CommonContext, server_loop, ClientCommandProcessor, gui_enabled, get_base_parser from Patch import GAME_ALTTP, GAME_SM, GAME_SMZ3 snes_logger = logging.getLogger("SNES") diff --git a/Starcraft2Client.py b/Starcraft2Client.py index 934f71712f..e62fd7e487 100644 --- a/Starcraft2Client.py +++ b/Starcraft2Client.py @@ -43,7 +43,12 @@ class StarcraftClientProcessor(ClientCommandProcessor): mission_number = int(options[0]) if is_mission_available(mission_number, self.ctx.checked_locations, mission_req_table): - asyncio.create_task(starcraft_launch(self.ctx, mission_number), name="Starcraft Launch") + if self.ctx.sc2_run_task: + if not self.ctx.sc2_run_task.done(): + sc2_logger.warning("Starcraft 2 Client is still running!") + self.ctx.sc2_run_task.cancel() # doesn't actually close the game, just stops the python task + self.ctx.sc2_run_task = asyncio.create_task(starcraft_launch(self.ctx, mission_number), + name="Starcraft 2 Launch") else: sc2_logger.info( "This mission is not currently unlocked. Use /unfinished or /available to see what is available.") @@ -79,6 +84,7 @@ class Context(CommonContext): sent_announce_pos = 0 announcements = [] announcement_pos = 0 + sc2_run_task: typing.Optional[asyncio.Task] = None async def server_auth(self, password_requested: bool = False): if password_requested and not self.password: @@ -116,6 +122,11 @@ class Context(CommonContext): self.ui = SC2Manager(self) self.ui_task = asyncio.create_task(self.ui.async_run(), name="UI") + async def shutdown(self): + await super(Context, self).shutdown() + if self.sc2_run_task: + self.sc2_run_task.cancel() + async def main(): multiprocessing.freeze_support() From e901a87afd35928fa8dec232bfcc51262d115058 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sun, 22 May 2022 17:20:24 +0200 Subject: [PATCH 116/149] LttP: fix adjuster partial settings store crash --- LttPAdjuster.py | 38 +++++++++++++++++++++----------------- WebHostLib/check.py | 8 +++++--- 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/LttPAdjuster.py b/LttPAdjuster.py index 8835fdc213..a34d9f89d6 100644 --- a/LttPAdjuster.py +++ b/LttPAdjuster.py @@ -513,25 +513,29 @@ def get_rom_frame(parent=None): def get_rom_options_frame(parent=None): adjuster_settings = get_adjuster_settings(GAME_ALTTP) + defaults = { + "auto_apply": 'ask', + "music": True, + "reduceflashing": True, + "deathlink": False, + "sprite": None, + "quickswap": True, + "menuspeed": 'normal', + "heartcolor": 'red', + "heartbeep": 'normal', + "ow_palettes": 'default', + "uw_palettes": 'default', + "hud_palettes": 'default', + "sword_palettes": 'default', + "shield_palettes": 'default', + "sprite_pool": [], + "allowcollect": False, + } if not adjuster_settings: adjuster_settings = Namespace() - adjuster_settings.auto_apply = 'ask' - adjuster_settings.music = True - adjuster_settings.reduceflashing = True - adjuster_settings.deathlink = False - adjuster_settings.allowcollect = False - adjuster_settings.sprite = None - adjuster_settings.quickswap = True - adjuster_settings.menuspeed = 'normal' - adjuster_settings.heartcolor = 'red' - adjuster_settings.heartbeep = 'normal' - adjuster_settings.ow_palettes = 'default' - adjuster_settings.uw_palettes = 'default' - adjuster_settings.hud_palettes = 'default' - adjuster_settings.sword_palettes = 'default' - adjuster_settings.shield_palettes = 'default' - if not hasattr(adjuster_settings, 'sprite_pool'): - adjuster_settings.sprite_pool = [] + for key, defaultvalue in defaults.items(): + if not hasattr(adjuster_settings, key): + setattr(adjuster_settings, key, defaultvalue) romOptionsFrame = LabelFrame(parent, text="Rom options") romOptionsFrame.columnconfigure(0, weight=1) diff --git a/WebHostLib/check.py b/WebHostLib/check.py index 9557e5093b..b560801c1b 100644 --- a/WebHostLib/check.py +++ b/WebHostLib/check.py @@ -62,7 +62,9 @@ def get_yaml_data(file) -> Union[Dict[str, str], str]: return options -def roll_options(options: Dict[str, Union[dict, str]], plando_options: set = {"bosses", "items", "connections", "texts"}) -> Tuple[Dict[str, Union[str, bool]], Dict[str, dict]]: +def roll_options(options: Dict[str, Union[dict, str]], + plando_options: Set[str] = frozenset({"bosses", "items", "connections", "texts"})) -> \ + Tuple[Dict[str, Union[str, bool]], Dict[str, dict]]: plando_options = set(plando_options) results = {} rolled_results = {} @@ -78,11 +80,11 @@ def roll_options(options: Dict[str, Union[dict, str]], plando_options: set = {"b try: if len(yaml_datas) == 1: rolled_results[filename] = roll_settings(yaml_datas[0], - plando_options=plando_options) + plando_options=plando_options) else: for i, yaml_data in enumerate(yaml_datas): rolled_results[f"{filename}/{i + 1}"] = roll_settings(yaml_data, - plando_options=plando_options) + plando_options=plando_options) except Exception as e: results[filename] = f"Failed to generate mystery in {filename}: {e}" else: From a7f647e3ca6c2f267022575413f3bd57e703bb51 Mon Sep 17 00:00:00 2001 From: CaitSith2 Date: Sun, 22 May 2022 18:02:33 -0700 Subject: [PATCH 117/149] Block collection of Sahasrahlah. (#562) --- SNIClient.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/SNIClient.py b/SNIClient.py index 9173a45190..b7c9ba9036 100644 --- a/SNIClient.py +++ b/SNIClient.py @@ -530,7 +530,8 @@ boss_locations = {Regions.lookup_name_to_id[name] for name in {'Eastern Palace - "Thieves' Town - Boss", 'Ice Palace - Boss', 'Misery Mire - Boss', - 'Turtle Rock - Boss'}} + 'Turtle Rock - Boss', + 'Sahasrahla'}} location_table_uw_id = {Regions.lookup_name_to_id[name]: data for name, data in location_table_uw.items()} @@ -974,8 +975,9 @@ async def track_locations(ctx: Context, roomid, roomdata): for location_id, mask in location_table_npc_id.items(): if npc_value & mask != 0 and location_id not in ctx.locations_checked: new_check(location_id) - if ctx.allow_collect and location_id in ctx.checked_locations and location_id not in ctx.locations_checked \ - and location_id in ctx.locations_info and ctx.locations_info[location_id].player != ctx.slot: + if ctx.allow_collect and location_id not in boss_locations and location_id in ctx.checked_locations \ + and location_id not in ctx.locations_checked and location_id in ctx.locations_info \ + and ctx.locations_info[location_id].player != ctx.slot: npc_value |= mask npc_value_changed = True if npc_value_changed: From 7126b7bca09c5287e86cf79a903d1ba487664643 Mon Sep 17 00:00:00 2001 From: TheCondor07 Date: Mon, 23 May 2022 09:13:44 -0400 Subject: [PATCH 118/149] SC2: Launch game in fullscreen mode. --- Starcraft2Client.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Starcraft2Client.py b/Starcraft2Client.py index e62fd7e487..971d92b132 100644 --- a/Starcraft2Client.py +++ b/Starcraft2Client.py @@ -218,8 +218,10 @@ async def starcraft_launch(ctx: Context, mission_id): ctx.sent_announce_pos = len(ctx.items_sent_to_announce) ctx.announcements_pos = len(ctx.announcements) + sc2_logger.info(f"Launching {lookup_id_to_mission[mission_id]}. If game does not launch check log file for errors.") + run_game(sc2.maps.get(maps_table[mission_id - 1]), [ - Bot(Race.Terran, ArchipelagoBot(ctx, mission_id), name="Archipelago")], realtime=True) + Bot(Race.Terran, ArchipelagoBot(ctx, mission_id), name="Archipelago", fullscreen=True)], realtime=True) class ArchipelagoBot(sc2.bot_ai.BotAI): From 4165f58414893c241c3b619966bce05a5e94148b Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Tue, 24 May 2022 00:20:02 +0200 Subject: [PATCH 119/149] Clients: now featuring tooltips and some general cleanup (#564) * Clients: now featuring tooltips and some general cleanup * Clients: fade in tooltip over 0.25 seconds * Clients: reset slot and team when disconnecting * Clients: allow joining multiworld via link (TextClient only for now) --- CommonClient.py | 19 ++++- FF1Client.py | 2 +- NetUtils.py | 1 + Starcraft2Client.py | 6 +- WebHostLib/templates/hostRoom.html | 8 +- WebHostLib/templates/macros.html | 2 +- data/client.kv | 6 +- inno_setup.iss | 4 + kvui.py | 115 ++++++++++++++++++++++++++--- 9 files changed, 145 insertions(+), 18 deletions(-) diff --git a/CommonClient.py b/CommonClient.py index 2c2236b375..e7d079ee07 100644 --- a/CommonClient.py +++ b/CommonClient.py @@ -17,7 +17,7 @@ if __name__ == "__main__": Utils.init_logging("TextClient", exception_logger="Client") from MultiServer import CommandProcessor -from NetUtils import Endpoint, decode, NetworkItem, encode, JSONtoTextParser, ClientStatus, Permission +from NetUtils import Endpoint, decode, NetworkItem, encode, JSONtoTextParser, ClientStatus, Permission, NetworkSlot from Utils import Version, stream_input from worlds import network_data_package, AutoWorldRegister import os @@ -125,6 +125,7 @@ class CommonContext(): input_task: typing.Optional[asyncio.Task] = None keep_alive_task: typing.Optional[asyncio.Task] = None items_handling: typing.Optional[int] = None + slot_info: typing.Dict[int, NetworkSlot] current_energy_link_value: int = 0 # to display in UI, gets set by server def __init__(self, server_address, password): @@ -136,6 +137,7 @@ class CommonContext(): self.server_version = Version(0, 0, 0) self.hint_cost: typing.Optional[int] = None self.games: typing.Dict[int, str] = {} + self.slot_info = {} self.permissions = { "forfeit": "disabled", "collect": "disabled", @@ -187,6 +189,8 @@ class CommonContext(): def reset_server_state(self): self.auth = None + self.slot = None + self.team = None self.items_received = [] self.locations_info = {} self.server_version = Version(0, 0, 0) @@ -511,6 +515,8 @@ async def process_server_cmd(ctx: CommonContext, args: dict): elif cmd == 'Connected': ctx.team = args["team"] ctx.slot = args["slot"] + # int keys get lost in JSON transfer + ctx.slot_info = {int(pid): data for pid, data in args["slot_info"].items()} ctx.consume_players_package(args["players"]) msgs = [] if ctx.locations_checked: @@ -643,6 +649,7 @@ if __name__ == '__main__': async def main(args): ctx = TextContext(args.connect, args.password) + ctx.auth = args.name ctx.server_task = asyncio.create_task(server_loop(ctx), name="server loop") if gui_enabled: @@ -656,8 +663,16 @@ if __name__ == '__main__': import colorama parser = get_base_parser(description="Gameless Archipelago Client, for text interfacing.") + parser.add_argument('--name', default=None, help="Slot Name to connect as.") + parser.add_argument("url", nargs="?", help="Archipelago connection url") + args = parser.parse_args() + + if args.url: + url = urllib.parse.urlparse(args.url) + args.connect = url.netloc + args.name = urllib.parse.unquote(url.username) + args.password = urllib.parse.unquote(url.password) - args, rest = parser.parse_known_args() colorama.init() asyncio.run(main(args)) diff --git a/FF1Client.py b/FF1Client.py index 2b406cebcd..f6bd08299f 100644 --- a/FF1Client.py +++ b/FF1Client.py @@ -263,7 +263,7 @@ if __name__ == '__main__': import colorama parser = get_base_parser() - args, rest = parser.parse_known_args() + args = parser.parse_args() colorama.init() asyncio.run(main(args)) diff --git a/NetUtils.py b/NetUtils.py index c581175673..9b207715b3 100644 --- a/NetUtils.py +++ b/NetUtils.py @@ -111,6 +111,7 @@ def get_any_version(data: dict) -> Version: whitelist = { "NetworkPlayer": NetworkPlayer, "NetworkItem": NetworkItem, + "NetworkSlot": NetworkSlot } custom_hooks = { diff --git a/Starcraft2Client.py b/Starcraft2Client.py index 971d92b132..51a04ea4a7 100644 --- a/Starcraft2Client.py +++ b/Starcraft2Client.py @@ -47,6 +47,9 @@ class StarcraftClientProcessor(ClientCommandProcessor): if not self.ctx.sc2_run_task.done(): sc2_logger.warning("Starcraft 2 Client is still running!") self.ctx.sc2_run_task.cancel() # doesn't actually close the game, just stops the python task + if self.ctx.slot is None: + sc2_logger.warning("Launching Mission without Archipelago authentication, " + "checks will not be registered to server.") self.ctx.sc2_run_task = asyncio.create_task(starcraft_launch(self.ctx, mission_number), name="Starcraft 2 Launch") else: @@ -131,10 +134,11 @@ class Context(CommonContext): async def main(): multiprocessing.freeze_support() parser = get_base_parser() - parser.add_argument('--loglevel', default='info', choices=['debug', 'info', 'warning', 'error', 'critical']) + parser.add_argument('--name', default=None, help="Slot Name to connect as.") args = parser.parse_args() ctx = Context(args.connect, args.password) + ctx.auth = args.name if ctx.server_task is None: ctx.server_task = asyncio.create_task(server_loop(ctx), name="ServerLoop") diff --git a/WebHostLib/templates/hostRoom.html b/WebHostLib/templates/hostRoom.html index 7530798997..13770e85de 100644 --- a/WebHostLib/templates/hostRoom.html +++ b/WebHostLib/templates/hostRoom.html @@ -20,7 +20,13 @@ later, you can simply refresh this page and the server will be started again.
    {% if room.last_port %} - You can connect to this room by using '/connect {{ config['PATCH_TARGET'] }}:{{ room.last_port }}' + You can connect to this room by using +
    + '/connect {{ config['PATCH_TARGET'] }}:{{ room.last_port }}' + + in the client.
    {% endif %} {{ macros.list_patches_room(room) }} {% if room.owner == session["_id"] %} diff --git a/WebHostLib/templates/macros.html b/WebHostLib/templates/macros.html index 663f3581e9..70b41fad9e 100644 --- a/WebHostLib/templates/macros.html +++ b/WebHostLib/templates/macros.html @@ -22,7 +22,7 @@ {% for patch in room.seed.slots|list|sort(attribute="player_id") %} {{ patch.player_id }} - {{ patch.player_name }} + {{ patch.player_name }} {{ patch.game }} {% if patch.game == "Minecraft" %} diff --git a/data/client.kv b/data/client.kv index 09be018830..4f924896d9 100644 --- a/data/client.kv +++ b/data/client.kv @@ -30,7 +30,7 @@ size_hint_x: 1 size_hint_y: 1 pos: (0, 0) -: +: size: self.texture_size size_hint: None, None font_size: dp(18) @@ -51,4 +51,6 @@ rgba: 0.235, 0.678, 0.843, 1 Line: width: 1 - rectangle: self.x-2, self.y-2, self.width+4, self.height+4 \ No newline at end of file + rectangle: self.x-2, self.y-2, self.width+4, self.height+4 +: + pos_hint: {'center_y': 0.5, 'center_x': 0.5} diff --git a/inno_setup.iss b/inno_setup.iss index 7f5d11f048..47809c8768 100644 --- a/inno_setup.iss +++ b/inno_setup.iss @@ -167,6 +167,10 @@ Root: HKCR; Subkey: "{#MyAppName}multidata"; ValueData: "Arc Root: HKCR; Subkey: "{#MyAppName}multidata\DefaultIcon"; ValueData: "{app}\ArchipelagoServer.exe,0"; ValueType: string; ValueName: ""; Components: server Root: HKCR; Subkey: "{#MyAppName}multidata\shell\open\command"; ValueData: """{app}\ArchipelagoServer.exe"" ""%1"""; ValueType: string; ValueName: ""; Components: server +Root: HKCR; Subkey: "archipelago"; ValueType: "string"; ValueData: "Archipegalo Protocol"; Flags: uninsdeletekey; Components: client/text +Root: HKCR; Subkey: "archipelago"; ValueType: "string"; ValueName: "URL Protocol"; ValueData: ""; Components: client/text +Root: HKCR; Subkey: "archipelago\DefaultIcon"; ValueType: "string"; ValueData: "{app}\ArchipelagoTextClient.exe,0"; Components: client/text +Root: HKCR; Subkey: "archipelago\shell\open\command"; ValueType: "string"; ValueData: """{app}\ArchipelagoTextClient.exe"" ""%1"""; Components: client/text [Code] const diff --git a/kvui.py b/kvui.py index c11301031d..8f681d693c 100644 --- a/kvui.py +++ b/kvui.py @@ -36,9 +36,12 @@ from kivy.uix.recycleview.views import RecycleDataViewBehavior from kivy.uix.behaviors import FocusBehavior from kivy.uix.recycleboxlayout import RecycleBoxLayout from kivy.uix.recycleview.layout import LayoutSelectionBehavior +from kivy.animation import Animation + +fade_in_animation = Animation(opacity=0, duration=0) + Animation(opacity=1, duration=0.25) import Utils -from NetUtils import JSONtoTextParser, JSONMessagePart +from NetUtils import JSONtoTextParser, JSONMessagePart, SlotType if typing.TYPE_CHECKING: import CommonClient @@ -50,7 +53,7 @@ else: # I was surprised to find this didn't already exist in kivy :( class HoverBehavior(object): - """from https://stackoverflow.com/a/605348110""" + """originally from https://stackoverflow.com/a/605348110""" hovered = BooleanProperty(False) border_point = ObjectProperty(None) @@ -61,11 +64,11 @@ class HoverBehavior(object): Window.bind(on_cursor_leave=self.on_cursor_leave) super(HoverBehavior, self).__init__(**kwargs) - def on_mouse_pos(self, *args): + def on_mouse_pos(self, window, pos): if not self.get_root_window(): - return # do proceed if I'm not displayed <=> If have no parent - pos = args[1] - # Next line to_widget allow to compensate for relative layout + return # Abort if not displayed + + # to_widget translates window pos to within widget pos inside = self.collide_point(*self.to_widget(*pos)) if self.hovered == inside: return # We have already done what was needed @@ -87,11 +90,19 @@ class HoverBehavior(object): Factory.register('HoverBehavior', HoverBehavior) -class ServerToolTip(Label): +class ToolTip(Label): + pass + + +class ServerToolTip(ToolTip): pass class HovererableLabel(HoverBehavior, Label): + pass + + +class ServerLabel(HovererableLabel): def __init__(self, *args, **kwargs): super(HovererableLabel, self).__init__(*args, **kwargs) self.layout = FloatLayout() @@ -101,6 +112,7 @@ class HovererableLabel(HoverBehavior, Label): def on_enter(self): self.popuplabel.text = self.get_text() App.get_running_app().root.add_widget(self.layout) + fade_in_animation.start(self.layout) def on_leave(self): App.get_running_app().root.remove_widget(self.layout) @@ -109,8 +121,6 @@ class HovererableLabel(HoverBehavior, Label): def ctx(self) -> context_type: return App.get_running_app().ctx - -class ServerLabel(HovererableLabel): def get_text(self): if self.ctx.server: ctx = self.ctx @@ -158,10 +168,11 @@ class SelectableRecycleBoxLayout(FocusBehavior, LayoutSelectionBehavior, """ Adds selection and focus behaviour to the view. """ -class SelectableLabel(RecycleDataViewBehavior, Label): +class SelectableLabel(RecycleDataViewBehavior, HovererableLabel): """ Add selection support to the Label """ index = None selected = BooleanProperty(False) + tooltip = None def refresh_view_attrs(self, rv, index, data): """ Catch and handle the view changes """ @@ -169,6 +180,56 @@ class SelectableLabel(RecycleDataViewBehavior, Label): return super(SelectableLabel, self).refresh_view_attrs( rv, index, data) + def create_tooltip(self, text, x, y): + text = text.replace("
    ", "\n") + if self.tooltip: + # update + self.tooltip.children[0].text = text + else: + self.tooltip = FloatLayout() + tooltip_label = ToolTip(text=text) + self.tooltip.add_widget(tooltip_label) + fade_in_animation.start(self.tooltip) + App.get_running_app().root.add_widget(self.tooltip) + + # handle left-side boundary to not render off-screen + x = max(x, 3+self.tooltip.children[0].texture_size[0] / 2) + + # position float layout + self.tooltip.x = x - self.tooltip.width / 2 + self.tooltip.y = y - self.tooltip.height / 2 + 48 + + def remove_tooltip(self): + if self.tooltip: + App.get_running_app().root.remove_widget(self.tooltip) + self.tooltip = None + + def on_mouse_pos(self, window, pos): + if not self.get_root_window(): + return # Abort if not displayed + super().on_mouse_pos(window, pos) + if self.refs and self.hovered: + + tx, ty = self.to_widget(*pos, relative=True) + # Why TF is Y flipped *within* the texture? + ty = self.texture_size[1] - ty + hit = False + for uid, zones in self.refs.items(): + for zone in zones: + x, y, w, h = zone + if x <= tx <= w and y <= ty <= h: + self.create_tooltip(uid.split("|", 1)[1], *pos) + hit = True + break + if not hit: + self.remove_tooltip() + + def on_enter(self): + pass + + def on_leave(self): + self.remove_tooltip() + def on_touch_down(self, touch): """ Add selection on touch down """ if super(SelectableLabel, self).on_touch_down(touch): @@ -416,6 +477,34 @@ class E(ExceptionHandler): class KivyJSONtoTextParser(JSONtoTextParser): + def __call__(self, *args, **kwargs): + self.ref_count = 0 + return super(KivyJSONtoTextParser, self).__call__(*args, **kwargs) + + def _handle_item_name(self, node: JSONMessagePart): + flags = node.get("flags", 0) + if flags & 0b001: # advancement + itemtype = "progression" + elif flags & 0b010: # never_exclude + itemtype = "useful" + elif flags & 0b100: # trap + itemtype = "trap" + else: + itemtype = "normal" + node.setdefault("refs", []).append("Item Class: " + itemtype) + return super(KivyJSONtoTextParser, self)._handle_item_name(node) + + def _handle_player_id(self, node: JSONMessagePart): + player = int(node["text"]) + slot_info = self.ctx.slot_info.get(player, None) + if slot_info: + text = f"Game: {slot_info.game}
    " \ + f"Type: {SlotType(slot_info.type).name}" + if slot_info.group_members: + text += f"
    Members:
    " + \ + '
    '.join(self.ctx.player_names[player] for player in slot_info.group_members) + node.setdefault("refs", []).append(text) + return super(KivyJSONtoTextParser, self)._handle_player_id(node) def _handle_color(self, node: JSONMessagePart): colors = node["color"].split(";") @@ -427,6 +516,12 @@ class KivyJSONtoTextParser(JSONtoTextParser): return self._handle_text(node) return self._handle_text(node) + def _handle_text(self, node: JSONMessagePart): + for ref in node.get("refs", []): + node["text"] = f"[ref={self.ref_count}|{ref}]{node['text']}[/ref]" + self.ref_count += 1 + return super(KivyJSONtoTextParser, self)._handle_text(node) + ExceptionManager.add_handler(E()) From c661da57d814d063ffd9d81c67190b487429890c Mon Sep 17 00:00:00 2001 From: Zach Parks Date: Mon, 23 May 2022 23:17:41 +0000 Subject: [PATCH 120/149] add tooltip for Plando Options on Generate page (#563) --- WebHostLib/templates/generate.html | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/WebHostLib/templates/generate.html b/WebHostLib/templates/generate.html index 4a5620831b..916ed72b8d 100644 --- a/WebHostLib/templates/generate.html +++ b/WebHostLib/templates/generate.html @@ -163,6 +163,10 @@ + (?) + From e8be80ccd793d1c763ffe499d26c0c40375f5424 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Tue, 24 May 2022 05:22:52 +0200 Subject: [PATCH 121/149] Network: remove "SlotAlreadyTaken" from docs and clients, as it was removed from the server in 0.2 --- CommonClient.py | 10 +++++----- FactorioClient.py | 1 - docs/network protocol.md | 3 +-- worlds/meritous/docs/setup_en.md | 1 - 4 files changed, 6 insertions(+), 9 deletions(-) diff --git a/CommonClient.py b/CommonClient.py index e7d079ee07..62ed32a1b6 100644 --- a/CommonClient.py +++ b/CommonClient.py @@ -347,7 +347,7 @@ class CommonContext(): } }]) - async def update_death_link(self, death_link): + async def update_death_link(self, death_link: bool): old_tags = self.tags.copy() if death_link: self.tags.add("DeathLink") @@ -496,8 +496,6 @@ async def process_server_cmd(ctx: CommonContext, args: dict): ctx.event_invalid_slot() elif 'InvalidGame' in errors: ctx.event_invalid_game() - elif 'SlotAlreadyTaken' in errors: - raise Exception('Player slot already in use for that team') elif 'IncompatibleVersion' in errors: raise Exception('Server reported your client version as incompatible') elif 'InvalidItemsHandling' in errors: @@ -670,8 +668,10 @@ if __name__ == '__main__': if args.url: url = urllib.parse.urlparse(args.url) args.connect = url.netloc - args.name = urllib.parse.unquote(url.username) - args.password = urllib.parse.unquote(url.password) + if url.username: + args.name = urllib.parse.unquote(url.username) + if url.password: + args.password = urllib.parse.unquote(url.password) colorama.init() diff --git a/FactorioClient.py b/FactorioClient.py index dd1792ca2a..31798392dd 100644 --- a/FactorioClient.py +++ b/FactorioClient.py @@ -5,7 +5,6 @@ import json import string import copy import subprocess -import sys import time import random diff --git a/docs/network protocol.md b/docs/network protocol.md index b7e7ccc3ea..3dca2b8f63 100644 --- a/docs/network protocol.md +++ b/docs/network protocol.md @@ -101,11 +101,10 @@ Sent to clients when the server refuses connection. This is sent during the init #### Arguments | Name | Type | Notes | | ---- | ---- | ----- | -| errors | list\[str\] | Optional. When provided, should contain any one of: `InvalidSlot`, `InvalidGame`, `SlotAlreadyTaken`, `IncompatibleVersion`, `InvalidPassword`, or `InvalidItemsHandling`. | +| errors | list\[str\] | Optional. When provided, should contain any one of: `InvalidSlot`, `InvalidGame`, `IncompatibleVersion`, `InvalidPassword`, or `InvalidItemsHandling`. | InvalidSlot indicates that the sent 'name' field did not match any auth entry on the server. InvalidGame indicates that a correctly named slot was found, but the game for it mismatched. -SlotAlreadyTaken indicates a connection with a different uuid is already established. IncompatibleVersion indicates a version mismatch. InvalidPassword indicates the wrong, or no password when it was required, was sent. InvalidItemsHandling indicates a wrong value type or flag combination was sent. diff --git a/worlds/meritous/docs/setup_en.md b/worlds/meritous/docs/setup_en.md index 4cfdb6fdb2..c829765e53 100644 --- a/worlds/meritous/docs/setup_en.md +++ b/worlds/meritous/docs/setup_en.md @@ -58,7 +58,6 @@ More in-depth information about the game can be found in the game's help file, a - `Disconnected`: If the game does not reconnect automatically, you may need to save, quit, and reload the game to reconnect. Keep in mind that the game does not auto-save, and it is only possible to save the game at Save Tiles. - `InvalidSlot`, `InvalidGame`: Make sure the `slotname` in `meritous-ap.json` matches the name provided in your Meritous YAML file. -- `SlotAlreadyTaken`: Make sure Meritous Gaiden is not already running and connected to the server. - `IncompatibleVersion`: Make sure Meritous Gaiden has been updated to the latest version. - `InvalidPassword`: Make sure the `password` in `meritous-ap.json` matches the password for your game. If there is no password, either set this to `null` (no quotes) or omit/remove it completely. - `InvalidItemsHandling`: This is a bug and shouldn't happen if you downloaded a precompiled copy of the game. If you downloaded a precompiled copy, please let KewlioMZX know over GitHub or the AP Discord. From 9b855c7de0e05bf9e48e90438ddb23065c499986 Mon Sep 17 00:00:00 2001 From: lordlou <87331798+lordlou@users.noreply.github.com> Date: Wed, 25 May 2022 02:50:32 -0400 Subject: [PATCH 122/149] Sm various fixes (#518) --- worlds/sm/__init__.py | 48 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 9 deletions(-) diff --git a/worlds/sm/__init__.py b/worlds/sm/__init__.py index c3bf2d59e9..8863114eab 100644 --- a/worlds/sm/__init__.py +++ b/worlds/sm/__init__.py @@ -93,12 +93,11 @@ class SMWorld(World): itemManager: ItemManager - locations = {} - Logic.factory('vanilla') def __init__(self, world: MultiWorld, player: int): self.rom_name_available_event = threading.Event() + self.locations = {} super().__init__(world, player) @classmethod @@ -142,6 +141,7 @@ class SMWorld(World): # Generate item pool pool = [] self.locked_items = {} + self.NothingPool = [] weaponCount = [0, 0, 0] for item in itemPool: isAdvancement = True @@ -167,6 +167,8 @@ class SMWorld(World): smitem = SMItem(item.Name, isAdvancement, item.Type, None if itemClass == 'Boss' else self.item_name_to_id[item.Name], player = self.player) if itemClass == 'Boss': self.locked_items[item.Name] = smitem + elif item.Category == 'Nothing': + self.NothingPool.append(smitem) else: pool.append(smitem) @@ -182,7 +184,8 @@ class SMWorld(World): for src, dest in self.variaRando.randoExec.areaGraph.InterAreaTransitions: src_region = self.world.get_region(src.Name, self.player) dest_region = self.world.get_region(dest.Name, self.player) - src_region.exits.append(Entrance(self.player, src.Name + "->" + dest.Name, src_region)) + if ((src.Name + "->" + dest.Name, self.player) not in self.world._entrance_cache): + src_region.exits.append(Entrance(self.player, src.Name + "->" + dest.Name, src_region)) srcDestEntrance = self.world.get_entrance(src.Name + "->" + dest.Name, self.player) srcDestEntrance.connect(dest_region) add_entrance_rule(self.world.get_entrance(src.Name + "->" + dest.Name, self.player), self.player, getAccessPoint(src.Name).traverse) @@ -556,6 +559,28 @@ class SMWorld(World): item.player != self.player or item.name != "Morph Ball"] + if len(self.NothingPool) > 0: + nonChozoLoc = [] + chozoLoc = [] + + for loc in self.locations.values(): + if loc.item is None: + if locationsDict[loc.name].isChozo(): + chozoLoc.append(loc) + else: + nonChozoLoc.append(loc) + + self.world.random.shuffle(nonChozoLoc) + self.world.random.shuffle(chozoLoc) + missingCount = len(self.NothingPool) - len(nonChozoLoc) + locations = nonChozoLoc + if (missingCount > 0): + locations += chozoLoc[:missingCount] + locations = locations[:len(self.NothingPool)] + for item, loc in zip(self.NothingPool, locations): + loc.place_locked_item(item) + loc.address = loc.item.code = None + @classmethod def stage_fill_hook(cls, world, progitempool, nonexcludeditempool, localrestitempool, nonlocalrestitempool, restitempool, fill_locations): @@ -581,11 +606,6 @@ class SMWorld(World): world.state.smbm[player].onlyBossLeft = True break - # Turn Nothing items into event pairs. - for location in world.get_locations(): - if location.game == location.item.game == "Super Metroid" and location.item.type == "Nothing": - location.address = location.item.code = None - def write_spoiler(self, spoiler_handle: TextIO): if self.world.area_randomization[self.player].value != 0: spoiler_handle.write('\n\nArea Transitions:\n\n') @@ -627,8 +647,18 @@ class SMLocation(Location): super(SMLocation, self).__init__(player, name, address, parent) def can_fill(self, state: CollectionState, item: Item, check_access=True) -> bool: - return self.always_allow(state, item) or (self.item_rule(item) and (not check_access or self.can_reach(state))) + return self.always_allow(state, item) or (self.item_rule(item) and (not check_access or (self.can_reach(state) and self.can_comeback(state, item)))) + def can_comeback(self, state: CollectionState, item: Item): + randoExec = state.world.worlds[self.player].variaRando.randoExec + for key in locationsDict[self.name].AccessFrom.keys(): + if (randoExec.areaGraph.canAccess( state.smbm[self.player], + key, + randoExec.graphSettings.startAP, + state.smbm[self.player].maxDiff, + None)): + return True + return False class SMItem(Item): game = "Super Metroid" From a332d4935d5ac799a7925bfc7bcc9685dc50465d Mon Sep 17 00:00:00 2001 From: N00byKing Date: Wed, 25 May 2022 19:53:36 +0200 Subject: [PATCH 123/149] v6,sm64ex: Use standard Death Link option name --- worlds/sm64ex/Options.py | 2 +- worlds/sm64ex/__init__.py | 2 +- worlds/v6/Options.py | 2 +- worlds/v6/__init__.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/worlds/sm64ex/Options.py b/worlds/sm64ex/Options.py index a078e9e190..99b3b3ee0b 100644 --- a/worlds/sm64ex/Options.py +++ b/worlds/sm64ex/Options.py @@ -45,6 +45,6 @@ sm64_options: typing.Dict[str,type(Option)] = { "StrictCannonRequirements": StrictCannonRequirements, "StarsToFinish": StarsToFinish, "ExtraStars": ExtraStars, - "DeathLink": DeathLink, + "death_link": DeathLink, "BuddyChecks": BuddyChecks, } \ No newline at end of file diff --git a/worlds/sm64ex/__init__.py b/worlds/sm64ex/__init__.py index e268dcdacb..f7b3918235 100644 --- a/worlds/sm64ex/__init__.py +++ b/worlds/sm64ex/__init__.py @@ -111,7 +111,7 @@ class SM64World(World): return { "AreaRando": self.area_connections, "StarsToFinish": self.world.StarsToFinish[self.player].value, - "DeathLink": self.world.DeathLink[self.player].value, + "DeathLink": self.world.death_link[self.player].value, } def generate_output(self, output_directory: str): diff --git a/worlds/v6/Options.py b/worlds/v6/Options.py index 0f363f351e..107fbab465 100644 --- a/worlds/v6/Options.py +++ b/worlds/v6/Options.py @@ -30,6 +30,6 @@ v6_options: typing.Dict[str,type(Option)] = { "AreaRandomizer": AreaRandomizer, "DoorCost": DoorCost, "AreaCostRandomizer": AreaCostRandomizer, - "DeathLink": DeathLink, + "death_link": DeathLink, "DeathLinkAmnesty": DeathLinkAmnesty } \ No newline at end of file diff --git a/worlds/v6/__init__.py b/worlds/v6/__init__.py index 014b9c88cf..fc9b6ed719 100644 --- a/worlds/v6/__init__.py +++ b/worlds/v6/__init__.py @@ -71,7 +71,7 @@ class V6World(World): "AreaRando": self.area_connections, "DoorCost": self.world.DoorCost[self.player].value, "AreaCostRando": self.area_cost_map, - "DeathLink": self.world.DeathLink[self.player].value, + "DeathLink": self.world.death_link[self.player].value, "DeathLink_Amnesty": self.world.DeathLinkAmnesty[self.player].value } From 1710e15e49ede83e2cbcf57ea9cf3c920e79ba44 Mon Sep 17 00:00:00 2001 From: espeon65536 Date: Wed, 25 May 2022 16:02:43 -0500 Subject: [PATCH 124/149] MC: Bee Trap is renamed and trap --- worlds/minecraft/Items.py | 2 +- worlds/minecraft/__init__.py | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/worlds/minecraft/Items.py b/worlds/minecraft/Items.py index a176c4f7ae..c142ec2e7d 100644 --- a/worlds/minecraft/Items.py +++ b/worlds/minecraft/Items.py @@ -57,7 +57,7 @@ item_table = { "Shulker Box": ItemData(45042, False), "Dragon Egg Shard": ItemData(45043, True), "Spyglass": ItemData(45044, True), - "Bee Trap (Minecraft)": ItemData(45100, False), + "Bee Trap": ItemData(45100, False), "Blaze Rods": ItemData(None, True), "Defeat Ender Dragon": ItemData(None, True), diff --git a/worlds/minecraft/__init__.py b/worlds/minecraft/__init__.py index b0f0ae7492..63d87d2300 100644 --- a/worlds/minecraft/__init__.py +++ b/worlds/minecraft/__init__.py @@ -65,7 +65,7 @@ class MinecraftWorld(World): item_name_to_id = {name: data.code for name, data in item_table.items()} location_name_to_id = {name: data.id for name, data in advancement_table.items()} - data_version = 5 + data_version = 6 def _get_mc_data(self): exits = [connection[0] for connection in default_connections] @@ -168,6 +168,8 @@ class MinecraftWorld(World): nonexcluded_items = ["Sharpness III Book", "Infinity Book", "Looting III Book"] if name in nonexcluded_items: # prevent books from going on excluded locations item.never_exclude = True + if name == "Bee Trap": + item.trap = True return item def mc_update_output(raw_data, server, port): From a800b148a2eab6d1529033c5f352dab494aef7a4 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Wed, 25 May 2022 19:05:34 +0200 Subject: [PATCH 125/149] Clients: allow "&[]" in tooltips, as kivy-escaped characters and fix similar translate issues in copy-paste clipboard --- CommonClient.py | 4 ++-- kvui.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/CommonClient.py b/CommonClient.py index 62ed32a1b6..bd8e124802 100644 --- a/CommonClient.py +++ b/CommonClient.py @@ -223,12 +223,12 @@ class CommonContext(): for location_name, location_id in gamedata["location_name_to_id"].items(): locations_lookup[location_id] = location_name - def get_item_name_from_id(code: int): + def get_item_name_from_id(code: int) -> str: return item_lookup.get(code, f'Unknown item (ID:{code})') self.item_name_getter = get_item_name_from_id - def get_location_name_from_address(address: int): + def get_location_name_from_address(address: int) -> str: return locations_lookup.get(address, f'Unknown location (ID:{address})') self.location_name_getter = get_location_name_from_address diff --git a/kvui.py b/kvui.py index 8f681d693c..3ea14191a2 100644 --- a/kvui.py +++ b/kvui.py @@ -181,7 +181,7 @@ class SelectableLabel(RecycleDataViewBehavior, HovererableLabel): rv, index, data) def create_tooltip(self, text, x, y): - text = text.replace("
    ", "\n") + text = text.replace("
    ", "\n").replace('&', '&').replace('&bl;', '[').replace('&br;', ']') if self.tooltip: # update self.tooltip.children[0].text = text @@ -240,7 +240,7 @@ class SelectableLabel(RecycleDataViewBehavior, HovererableLabel): else: # Not a fan of the following few lines, but they work. temp = MarkupLabel(text=self.text).markup - text = "".join(part for part in temp if not part.startswith(("[color", "[/color]"))) + text = "".join(part for part in temp if not part.startswith(("[color", "[/color]", "[ref=", "[/ref]"))) cmdinput = App.get_running_app().textinput if not cmdinput.text and " did you mean " in text: for question in ("Didn't find something that closely matches, did you mean ", @@ -253,7 +253,7 @@ class SelectableLabel(RecycleDataViewBehavior, HovererableLabel): elif not cmdinput.text and text.startswith("Missing: "): cmdinput.text = text.replace("Missing: ", "!hint_location ") - Clipboard.copy(text) + Clipboard.copy(text.replace('&', '&').replace('&bl;', '[').replace('&br;', ']')) return self.parent.select_with_touch(self.index, touch) def apply_selection(self, rv, index, is_selected): From 4f24c4ea780d774863d051beabc3c844fa794fc4 Mon Sep 17 00:00:00 2001 From: espeon65536 Date: Wed, 25 May 2022 16:38:15 -0500 Subject: [PATCH 126/149] OoT: write double-ended shuffled entrances to spoiler log more clearly --- worlds/oot/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/worlds/oot/__init__.py b/worlds/oot/__init__.py index 7a9c52d586..01941a3cfa 100644 --- a/worlds/oot/__init__.py +++ b/worlds/oot/__init__.py @@ -832,7 +832,7 @@ class OOTWorld(World): else: entrance = loadzone.reverse if entrance.reverse is not None: - self.world.spoiler.set_entrance(entrance, entrance.replaces, 'both', self.player) + self.world.spoiler.set_entrance(entrance, entrance.replaces.reverse, 'both', self.player) else: self.world.spoiler.set_entrance(entrance, entrance.replaces, 'entrance', self.player) else: From a66b11e6ec0a60400df86874f3e21efbb809369f Mon Sep 17 00:00:00 2001 From: espeon65536 Date: Wed, 25 May 2022 17:01:01 -0500 Subject: [PATCH 127/149] OoT: remove warning message during multidata manipulation --- worlds/oot/__init__.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/worlds/oot/__init__.py b/worlds/oot/__init__.py index 01941a3cfa..713d94caa2 100644 --- a/worlds/oot/__init__.py +++ b/worlds/oot/__init__.py @@ -942,13 +942,13 @@ class OOTWorld(World): return None # Remove undesired items from start_inventory + # This is because we don't want them to show up in the autotracker, + # they just don't exist in-game. for item_name in self.remove_from_start_inventory: item_id = self.item_name_to_id.get(item_name, None) - try: - multidata["precollected_items"][self.player].remove(item_id) - except ValueError as e: - logger.warning( - f"Attempted to remove nonexistent item id {item_id} from OoT precollected items ({item_name})") + if item_id is None: + continue + multidata["precollected_items"][self.player].remove(item_id) # Add ER hint data if self.shuffle_interior_entrances != 'off' or self.shuffle_dungeon_entrances or self.shuffle_grotto_entrances: From 1c231b703a24e237da0bd9b57225459f33413cce Mon Sep 17 00:00:00 2001 From: espeon65536 Date: Wed, 25 May 2022 17:52:49 -0500 Subject: [PATCH 128/149] OoT: trap display rework Traps from all games now disguise themselves as OoT items Traps all display "[Player] is a FOOL!" when picked up --- worlds/oot/Patches.py | 18 +++++++++--------- worlds/oot/__init__.py | 6 +++--- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/worlds/oot/Patches.py b/worlds/oot/Patches.py index bb1c588823..522dd4cbe2 100644 --- a/worlds/oot/Patches.py +++ b/worlds/oot/Patches.py @@ -1828,7 +1828,6 @@ def get_override_entry(player_id, location): player_id = 0 if player_id == location.item.player else min(location.item.player, 255) if location.item.game != 'Ocarina of Time': # This is an AP sendable. It's guaranteed to not be None. - looks_like_item_id = 0 if location.item.advancement: item_id = 0xCB else: @@ -1838,10 +1837,11 @@ def get_override_entry(player_id, location): if None in [scene, default, item_id]: return None - if location.item.looks_like_item is not None: - looks_like_item_id = location.item.looks_like_item.index - else: - looks_like_item_id = 0 + if location.item.trap: + item_id = 0x7C # Ice Trap ID, to get "X is a fool" message + looks_like_item_id = location.item.looks_like_item.index + else: + looks_like_item_id = 0 if location.type in ['NPC', 'BossHeart']: type = 0 @@ -2078,15 +2078,15 @@ def place_shop_items(rom, world, shop_items, messages, locations, init_shop_id=F shop_objs.add(location.item.special['object']) rom.write_int16(location.address1, location.item.index) else: - if location.item.game != "Ocarina of Time": + if location.item.trap: + item_display = location.item.looks_like_item + elif location.item.game != "Ocarina of Time": item_display = location.item if location.item.advancement: item_display.index = 0xCB else: item_display.index = 0xCC item_display.special = {} - elif location.item.looks_like_item is not None: - item_display = location.item.looks_like_item else: item_display = location.item @@ -2137,7 +2137,7 @@ def place_shop_items(rom, world, shop_items, messages, locations, init_shop_id=F else: shop_item_name = item_display.name - if location.item.name == 'Ice Trap': + if location.item.trap: shop_item_name = create_fake_name(shop_item_name) if len(world.world.worlds) > 1: diff --git a/worlds/oot/__init__.py b/worlds/oot/__init__.py index 713d94caa2..05dfed4321 100644 --- a/worlds/oot/__init__.py +++ b/worlds/oot/__init__.py @@ -567,7 +567,7 @@ class OOTWorld(World): self.fake_items.extend(item for item in self.itempool if item.index and self.is_major_item(item)) if self.ice_trap_appearance in ['junk_only', 'anything']: self.fake_items.extend(item for item in self.itempool if - item.index and not self.is_major_item(item) and item.name != 'Ice Trap') + item.index and not self.type == 'Shop' and not self.is_major_item(item) and item.name != 'Ice Trap') # Kill unreachable events that can't be gotten even with all items # Make sure to only kill actual internal events, not in-game "events" @@ -803,8 +803,8 @@ class OOTWorld(World): self.hint_data_available.wait() with i_o_limiter: - # Make ice traps appear as other random items - ice_traps = [loc.item for loc in self.get_locations() if loc.item.name == 'Ice Trap'] + # Make traps appear as other random items + ice_traps = [loc.item for loc in self.get_locations() if loc.item.trap] for trap in ice_traps: trap.looks_like_item = self.create_item(self.world.slot_seeds[self.player].choice(self.fake_items).name) From ac876295509a92018355be6e090f1fff09dfc3ab Mon Sep 17 00:00:00 2001 From: espeon65536 Date: Wed, 25 May 2022 22:39:54 -0500 Subject: [PATCH 129/149] OoT: write data into autotracking context useful for the client and autotrackers to gather data easily --- worlds/oot/Patches.py | 29 + worlds/oot/__init__.py | 2 +- worlds/oot/data/generated/rom_patch.txt | 23287 +++++++++++----------- worlds/oot/data/generated/symbols.json | 248 +- 4 files changed, 11803 insertions(+), 11763 deletions(-) diff --git a/worlds/oot/Patches.py b/worlds/oot/Patches.py index 522dd4cbe2..177a4c6165 100644 --- a/worlds/oot/Patches.py +++ b/worlds/oot/Patches.py @@ -1781,6 +1781,35 @@ def patch_rom(world, rom): save_context.equip_current_items(world.starting_age) save_context.write_save_table(rom) + # Write data into AP autotracking context + rom.write_int32(rom.sym('DUNGEON_IS_MQ_ADDRESS'), rom.sym('cfg_dungeon_is_mq')) + rom.write_int32(rom.sym('DUNGEON_REWARDS_ADDRESS'), rom.sym('cfg_dungeon_rewards')) + rom.write_byte(rom.sym('BIG_POE_COUNT'), world.big_poe_count) + if world.enhance_map_compass: + rom.write_byte(rom.sym('ENHANCE_MAP_COMPASS'), 0x01) + if world.enhance_map_compass or world.misc_hints: + rom.write_byte(rom.sym('SHOW_DUNGEON_REWARDS'), 0x01) + if world.shuffle_smallkeys == 'remove': + rom.write_byte(rom.sym('SMALL_KEY_SHUFFLE'), 0x01) + elif world.shuffle_smallkeys in ['overworld', 'any_dungeon', 'keysanity']: + rom.write_byte(rom.sym('SMALL_KEY_SHUFFLE'), 0x02) + if world.shuffle_scrubs != 'off': + rom.write_byte(rom.sym('SHUFFLE_SCRUBS'), 0x01) + if world.open_forest == 'closed_deku': + rom.write_byte(rom.sym('OPEN_FOREST'), 0x01) + elif world.open_forest == 'closed': + rom.write_byte(rom.sym('OPEN_FOREST'), 0x02) + if world.zora_fountain == 'adult': + rom.write_byte(rom.sym('OPEN_FOUNTAIN'), 0x01) + elif world.zora_fountain == 'closed': + rom.write_byte(rom.sym('OPEN_FOUNTAIN'), 0x02) + + rom.write_bytes(rom.sym('SHOP_SLOTS'), [ + sum(f'{shop} Item {idx}' in world.shop_prices for idx in ('7', '5', '8', '6')) + for shop in ('KF Shop', 'Market Bazaar', 'Market Potion Shop', 'Market Bombchu Shop', + 'Kak Bazaar', 'Kak Potion Shop', 'GC Shop', 'ZD Shop') + ]) + return rom diff --git a/worlds/oot/__init__.py b/worlds/oot/__init__.py index 05dfed4321..43120b696a 100644 --- a/worlds/oot/__init__.py +++ b/worlds/oot/__init__.py @@ -567,7 +567,7 @@ class OOTWorld(World): self.fake_items.extend(item for item in self.itempool if item.index and self.is_major_item(item)) if self.ice_trap_appearance in ['junk_only', 'anything']: self.fake_items.extend(item for item in self.itempool if - item.index and not self.type == 'Shop' and not self.is_major_item(item) and item.name != 'Ice Trap') + item.index and not item.type == 'Shop' and not self.is_major_item(item) and item.name != 'Ice Trap') # Kill unreachable events that can't be gotten even with all items # Make sure to only kill actual internal events, not in-game "events" diff --git a/worlds/oot/data/generated/rom_patch.txt b/worlds/oot/data/generated/rom_patch.txt index 67225a5842..0d78b0bf0c 100644 --- a/worlds/oot/data/generated/rom_patch.txt +++ b/worlds/oot/data/generated/rom_patch.txt @@ -1,7 +1,7 @@ -10,107b6b3a -14,36f34be0 +10,107b6b7a +14,368db766 d1b0,3480000 -d1b4,348f310 +d1b4,348f330 d1b8,3480000 d1c0,0 d1c4,0 @@ -186,23 +186,23 @@ d288,0 89ebe8,0 89ebec,0 89ebf0,0 -a88f78,c1023a6 -a89048,c1023bf -a98c30,c1003c5 -a9e838,810077b -ac7ad4,c100345 +a88f78,c1023ae +a89048,c1023c7 +a98c30,c1003cb +a9e838,8100781 +ac7ad4,c10034b ac8608,902025 ac860c,848e00a4 ac8610,34010043 ac8614,0 ac8618,0 ac91b4,0 -ac9abc,c100406 +ac9abc,c10040c ac9ac0,0 -accd34,c1004c0 +accd34,c1004c6 accd38,8e190000 -accde0,c101ba4 -acce18,c1008d5 +accde0,c101bac +acce18,c1008db acce1c,8e0200a4 acce20,1060001e acce24,0 @@ -211,7 +211,7 @@ acce2c,0 acce34,0 acce38,0 acce3c,0 -acce88,c101a68 +acce88,c101a70 acce8c,34040001 acce90,0 acce94,0 @@ -229,45 +229,45 @@ adaa78,0 adaba8,0 adabcc,0 adabe4,0 -ae5764,81006a1 +ae5764,81006a7 ae5768,0 -ae59e0,81006bd -ae5df8,c1003fe +ae59e0,81006c3 +ae5df8,c100404 ae5e04,0 ae74d8,340e0000 ae807c,6010007 ae8080,84b80030 -ae8084,c100b23 +ae8084,c100b29 ae8088,0 ae8090,0 ae8094,0 ae8098,0 -ae986c,8100b03 +ae986c,8100b09 ae9870,3c01800f ae9ed8,35ee0000 -aeb67c,c1009b2 +aeb67c,c1009b8 aeb680,0 aeb764,26380008 aeb768,ae9802b0 -aeb76c,c101de0 +aeb76c,c101de8 aeb778,400821 -af1814,c100e64 +af1814,c100e6a af1818,0 af74f8,afbf0044 -af74fc,c100a34 +af74fc,c100a3a af7500,0 af7504,8fbf0044 af7650,afbf0034 -af7654,c100a42 +af7654,c100a48 af7658,0 af765c,8fbf0034 af76b8,afbf000c -af76bc,c100a29 +af76bc,c100a2f af76c4,8fbf000c b06400,820f0ede b0640c,31f80002 b06bb8,34190000 -b06c2c,c1007bc +b06c2c,c1007c2 b06c30,a2280020 b10218,afa40020 b1021c,30a8fffe @@ -319,23 +319,23 @@ b10320,242983fc b10324,242a82c4 b10328,242b83e4 b1032c,242c83d8 -b10cc0,c1004a8 +b10cc0,c1004ae b10cc4,3c010001 -b12a34,c100654 +b12a34,c10065a b12a38,0 -b12a60,8101fc2 -b12e30,c101fd3 -b12e44,8101fe2 +b12a60,8101fca +b12e30,c101fdb +b12e44,8101fea b17bb4,afbf001c b17bb8,afa40140 b17bbc,3c048040 -b17bc0,3406f310 +b17bc0,3406f330 b17bc4,c00037c b17bc8,3c050348 -b17bcc,c100338 +b17bcc,c10033e b17bd0,0 b17bd4,0 -b2b488,c100bee +b2b488,c100bf4 b2b48c,0 b2b490,0 b2b494,0 @@ -344,7 +344,7 @@ b2b49c,0 b2b4f0,3c048013 b2b4f4,24848a50 b2b4f8,3c058040 -b2b4fc,24a52f98 +b2b4fc,24a52fb0 b2b500,c015c0c b2b504,34060018 b2b508,3c048013 @@ -365,53 +365,53 @@ b2e830,8ca5b188 b2e854,3c058001 b2e858,8ca5b198 b3dd3c,3c018040 -b3dd40,8c242fb0 +b3dd40,8c242fc8 b3dd44,c02e195 -b3dd48,8c252fb4 +b3dd48,8c252fcc b3dd4c,8fbf0014 b3dd54,27bd0018 -b51694,c1007cf -b516c4,c1007d6 -b52784,c1007f0 +b51694,c1007d5 +b516c4,c1007dc +b52784,c1007f6 b52788,0 b5278c,8fbf003c b5293c,10000018 -b54b38,c10076a -b54e5c,c100757 +b54b38,c100770 +b54e5c,c10075d b55428,a42063ed -b55a64,c1007a1 +b55a64,c1007a7 b575c8,acae0000 b58320,afbf0000 -b58324,c1009ee +b58324,c1009f4 b58328,0 b5832c,8fbf0000 b58330,0 b7ec4c,8009a3ac -ba16ac,c100cd8 +ba16ac,c100cde ba16b0,a42fca2a -ba16e0,c100ce3 +ba16e0,c100ce9 ba16e4,a439ca2a ba18c4,340c00c8 ba1980,340800c8 ba19dc,0 -ba1c68,c100cee +ba1c68,c100cf4 ba1c6c,a42dca2a ba1c70,850e4a38 -ba1cd0,c100cf9 +ba1cd0,c100cff ba1cd4,a439ca2a -ba1d04,c100d04 +ba1d04,c100d0a ba1d08,0 ba1e20,340d00c8 -ba32cc,c100d0f +ba32cc,c100d15 ba32d0,a439ca2a -ba3300,c100d1a +ba3300,c100d20 ba3304,a42bca2a ba34dc,341800c8 ba3654,0 ba39d0,340d00c8 -baa168,c100cc2 +baa168,c100cc8 baa16c,a42eca2a -baa198,c100ccd +baa198,c100cd3 baa19c,a42dca2a baa3ac,a07025 bac064,7821 @@ -422,10 +422,10 @@ bae5a4,a46b4a6c bae5c8,0 bae864,0 baed6c,0 -baf4f4,c100d25 +baf4f4,c100d2b baf4f8,2002025 baf738,102825 -baf73c,c101848 +baf73c,c101850 baf740,330400ff baf744,8fb00018 baf748,8fbf001c @@ -457,80 +457,80 @@ bb6134,0 bb6138,0 bb61e0,0 bb61e4,0 -bb6688,c100663 +bb6688,c100669 bb668c,0 -bb67c4,c100663 +bb67c4,c100669 bb67c8,1826021 -bb6cf0,c100692 +bb6cf0,c100698 bb6cf4,0 bb77b4,0 bb7894,0 bb7ba0,0 bb7bfc,0 -bb7c88,c10065d +bb7c88,c100663 bb7c8c,1cf8821 -bb7d10,c10065d +bb7d10,c100663 bb7d14,0 -bc088c,c100670 +bc088c,c100676 bc0890,0 -bcdbd8,c100d37 -bcecbc,8100376 +bcdbd8,c100d3d +bcecbc,810037c bcecc0,0 bcecc4,0 bcecc8,0 bceccc,0 bcecd0,0 bcf73c,afbf0000 -bcf740,c10080e +bcf740,c100814 bcf744,0 bcf748,8fbf0000 -bcf914,c100806 +bcf914,c10080c bcf918,0 -bd4c58,c100b97 +bd4c58,c100b9d bd4c5c,270821 -bd5c58,c1005bf +bd5c58,c1005c5 bd5c5c,301c825 -bd6958,c100a1f +bd6958,c100a25 bd695c,0 -bd9a04,c1009cf +bd9a04,c1009d5 bd9a08,0 -bda0a0,c100349 -bda0d8,c100366 +bda0a0,c10034f +bda0d8,c10036c bda0e4,0 -bda264,c100369 +bda264,c10036f bda270,0 -bda2e8,c100384 +bda2e8,c10038a bda2ec,812a0002 bda2f0,5600018 bda2f4,0 -be1bc8,c1005d0 +be1bc8,c1005d6 be1bcc,afa50034 be1c98,3c014218 -be4a14,c100e12 -be4a40,c100e2c -be4a60,8100e44 +be4a14,c100e18 +be4a40,c100e32 +be4a60,8100e4a be4a64,0 -be5d8c,c100e6e +be5d8c,c100e74 be5d90,0 -be9ac0,c1003a0 -be9ad8,c1003ab +be9ac0,c1003a6 +be9ad8,c1003b1 be9adc,8fa20024 be9ae4,8fa40028 be9bdc,24018383 -bea044,c100484 +bea044,c10048a bea048,0 -c004ec,81005f9 +c004ec,81005ff c0067c,28610064 c0082c,340e0018 c00830,8c4f00a0 -c01078,c100843 +c01078,c100849 c0107c,0 c01080,0 c01084,0 c01088,0 c0108c,0 -c018a0,c10060e -c06198,c1009bc +c018a0,c100614 +c06198,c1009c2 c064bc,920201ec c06e5c,920201ec c07230,920201ec @@ -538,11 +538,11 @@ c07494,920201ec c075a8,931901ed c07648,931901ed c0796c,1f0 -c0e77c,c1007b6 +c0e77c,c1007bc c0e780,ac400428 -c5a9f0,c100cbd -c6c7a8,c10061e -c6c920,c10061e +c5a9f0,c100cc3 +c6c7a8,c100624 +c6c920,c100624 c6cedc,340b0001 c6ed84,946f00a2 c6ed88,31f80018 @@ -552,7 +552,7 @@ c6ff38,4600848d c6ff3c,44069000 c6ff44,27bdffe8 c6ff48,afbf0004 -c6ff4c,c1009fa +c6ff4c,c100a00 c6ff50,0 c6ff54,8fbf0004 c6ff58,27bd0018 @@ -563,7 +563,7 @@ c6ff68,0 c6ff6c,0 c6ff70,0 c6ff74,0 -c72c64,c100bd5 +c72c64,c100bdb c72c68,2002021 c72c70,15e00006 c72c74,0 @@ -577,32 +577,32 @@ c7bd08,0 c82550,0 c892dc,340e0001 c8931c,340a0001 -c89744,c1003d2 +c89744,c1003d8 c89868,920e1d28 c898a4,92191d29 c898c8,920a1d2a -c8b24c,c100503 +c8b24c,c100509 c8b250,2002025 -ca6dc0,81023e1 +ca6dc0,81023e9 ca6dc4,0 -cb6874,c10069b -cc0038,c100464 +cb6874,c1006a1 +cc0038,c10046a cc003c,8fa40018 cc3fa8,a20101f8 cc4024,0 -cc4038,c1009a1 +cc4038,c1009a7 cc403c,240c0004 cc453c,806 -cc8594,c1005e3 +cc8594,c1005e9 cc8598,24180006 -cc85b8,c100df7 +cc85b8,c100dfd cc85bc,afa50064 -cce9a4,c100eb6 +cce9a4,c100ebc cce9a8,8e04011c cdf3ec,0 cdf404,0 -cdf420,c1005b3 -cdf638,c1005c7 +cdf420,c1005b9 +cdf638,c1005cd cdf63c,e7a40034 cdf790,2405001e cf1ab8,0 @@ -611,44 +611,44 @@ cf1ac0,31280040 cf1ac4,35390040 cf1ac8,af19b4a8 cf1acc,34090006 -cf73c8,c100baf +cf73c8,c100bb5 cf73cc,3c010001 -cf7ad4,c1005ad +cf7ad4,c1005b3 cf7ad8,afa50044 d12f78,340f0000 -d357d4,c100b11 +d357d4,c100b17 d35efc,0 d35f54,10000008 -d4bcb0,c100dd2 +d4bcb0,c100dd8 d4bcb4,8619001c -d4be6c,c100985 -d52698,c1004df +d4be6c,c10098b +d52698,c1004e5 d5269c,8e190024 -d5b264,c100a9f -d5b660,8100aa2 +d5b264,c100aa5 +d5b660,8100aa8 d5b664,0 -d5ff94,c100eac +d5ff94,c100eb2 d5ff98,44d9f800 -d62100,c100c5f +d62100,c100c65 d62110,3c014248 d62128,0 d6215c,0 -d621cc,c100c6d +d621cc,c100c73 d621dc,3c014248 d6221c,0 -d68d68,c100c17 +d68d68,c100c1d d68d6c,afb20044 d68d70,3c098040 -d68d74,25293054 +d68d74,2529306c d68d78,81290000 d68d7c,11200186 d68d80,8fbf004c -d68d84,c100c2b +d68d84,c100c31 d68d88,f7b80030 -d69c80,c100c33 -d6cc18,c100cb5 +d69c80,c100c39 +d6cc18,c100cbb d6cc1c,0 -d6cdd4,c100cb9 +d6cdd4,c100cbf d6cdd8,0 d73118,0 d73128,0 @@ -715,34 +715,34 @@ d7e8d4,340e0001 d7e8d8,804f0ede d7e8e0,5700000f d7eb4c,0 -d7eb70,c100d54 +d7eb70,c100d5a d7eb74,acc80004 d7ebbc,0 -d7ebc8,c100d5c +d7ebc8,c100d62 d7ebf0,27bdffe8 d7ebf4,afbf0014 -d7ebf8,c100d67 +d7ebf8,c100d6d d7ebfc,8ca21c44 d7ec04,0 -d7ec10,c100d6b +d7ec10,c100d71 d7ec14,971804c6 d7ec2c,0 -d7ec34,c100d82 +d7ec34,c100d88 d7ec40,0 d7ec54,0 -d7ec60,8100d74 -d7ec70,8100d9a +d7ec60,8100d7a +d7ec70,8100da0 db13d0,24090076 -db532c,c100434 -db53e8,8102413 +db532c,c10043a +db53e8,810241b db53ec,0 dbec80,34020000 -dbf428,c1007f8 +dbf428,c1007fe dbf434,44989000 dbf438,e652019c dbf484,0 dbf4a8,0 -dc7090,c100818 +dc7090,c10081e dc7094,c60a0198 dc87a0,0 dc87bc,0 @@ -762,7 +762,7 @@ dd3754,3c064000 dd375c,3c074000 dd3760,0 dd3764,0 -de1018,c10242c +de1018,c102434 de101c,0 de1020,0 de1024,0 @@ -772,20 +772,20 @@ de1030,0 de1034,0 de1038,0 de103c,0 -de1050,810242c +de1050,8102434 de1054,0 df2644,76 df7a90,340e0018 df7a94,8c4f00a0 -df7cb0,c10063e +df7cb0,c100644 dfec3c,3c188012 dfec40,8f18ae8c dfec48,33190010 dfec4c,0 e09f68,806f0ede e09f74,31f80004 -e09fb0,c100421 -e0ec50,c100c05 +e09fb0,c100427 +e0ec50,c100c0b e0ec54,2202825 e11e98,9442a674 e11e9c,304e0040 @@ -800,35 +800,35 @@ e11ebc,0 e11ec0,0 e11ec4,0 e11ec8,0 -e11f90,c1004ea +e11f90,c1004f0 e11f94,0 -e12a04,c100e4b +e12a04,c100e51 e12a20,ac8302a4 e1f72c,27bdffe8 e1f730,afbf0014 -e1f734,c100e90 +e1f734,c100e96 e1f738,0 e1f73c,8fbf0014 e1f740,27bd0018 e1f744,28410005 e1f748,14200012 e1f74c,24010005 -e1feac,c100ea2 +e1feac,c100ea8 e1feb0,3c0743cf -e20410,c100b3d +e20410,c100b43 e20414,0 -e206dc,c100b4b +e206dc,c100b51 e206e0,0 -e2076c,c100b5b +e2076c,c100b61 e20770,afa40020 -e20798,c100b53 +e20798,c100b59 e2079c,0 -e24e7c,c1004b7 +e24e7c,c1004bd e24e80,0 -e29388,8100442 -e2a044,c10044b -e2b0b4,c100453 -e2b434,c100856 +e29388,8100448 +e2a044,c100451 +e2b0b4,c100459 +e2b434,c10085c e2b438,0 e2b43c,0 e2b440,0 @@ -840,28 +840,28 @@ e2b454,0 e2b458,0 e2b45c,0 e2b460,0 -e2c03c,c100978 +e2c03c,c10097e e2c040,2442a5d0 e2cc1c,3c058012 e2cc20,24a5a5d0 e2cc24,86080270 e2cc28,15000009 e2cc2c,90b9008a -e2d714,c100825 +e2d714,c10082b e2d71c,340900bf e2d720,0 -e2d890,c100834 +e2d890,c10083a e2d894,0 e2f090,34 -e429dc,c100558 +e429dc,c10055e e429e0,0 e429e4,10000053 e429e8,0 -e42b5c,c10053e +e42b5c,c100544 e42b64,1000000d e42b68,0 -e42c00,c100536 -e42c44,c10059f +e42c00,c10053c +e42c44,c1005a5 e42c48,860e008a e42c4c,15400045 e50888,340403e7 @@ -869,16 +869,16 @@ e55c4c,340c0000 e56290,0 e56294,340b401f e56298,0 -e565d0,c100bf6 +e565d0,c100bfc e565d4,0 e565d8,2002025 e571d0,3c038041 -e571d4,906db5a4 +e571d4,906db5c4 e571d8,340c0001 e571dc,11ac0004 e571e0,0 e57208,3c038041 -e5720c,906db5a4 +e5720c,906db5c4 e57210,340c0002 e57214,11ac000d e57218,0 @@ -893,13 +893,13 @@ e57238,0 e5723c,0 e59cd4,0 e59cd8,0 -e59e68,8102465 +e59e68,810246d e59e6c,0 -e59ecc,810248e +e59ecc,8102496 e59ed0,0 -e5b2f4,c100e79 +e5b2f4,c100e7f e5b2f8,afa5001c -e5b538,c100e85 +e5b538,c100e8b e5b53c,3c07461c e62630,a48001f8 e62634,2463a5d0 @@ -955,7 +955,7 @@ e6befc,0 e6bf4c,340d0000 e6bf50,0 e7cc90,240e000c -e7d19c,c100d2b +e7d19c,c100d31 e7d1a0,3c050600 e7d1a4,10a80003 e7d1a8,3025 @@ -975,19 +975,19 @@ e9f5b0,3e00008 e9f5b4,0 e9f5b8,0 e9f5bc,0 -e9f678,c1004ea +e9f678,c1004f0 e9f67c,0 -e9f7a8,c1004ea +e9f7a8,c1004f0 e9f7ac,0 -ebb85c,c100629 +ebb85c,c10062f ebb864,14400012 ebb86c,10000014 -ec1120,c1004ea +ec1120,c1004f0 ec1124,0 ec68bc,8fad002c ec68c0,340c000a ec68c4,a5ac0110 -ec68c8,c101b62 +ec68c8,c101b6a ec68cc,2002021 ec68d0,0 ec68d4,0 @@ -997,14 +997,14 @@ ec68e0,0 ec69ac,8fad002c ec69b0,340c000a ec69b4,a5ac0110 -ec69b8,c101b62 +ec69b8,c101b6a ec69bc,2002021 ec69c0,0 ec69c4,0 ec69c8,0 ec69cc,0 ec69d0,0 -ec6b04,81023fa +ec6b04,8102402 ec6b08,0 ec9ce4,2419007a ed2858,20180008 @@ -1012,9 +1012,9 @@ ed2fac,806e0f18 ed2fec,340a0000 ed5a28,340e0018 ed5a2c,8ccf00a0 -ed645c,c100821 +ed645c,c100827 ed6460,0 -ee7b84,c10094f +ee7b84,c100955 ee7b8c,0 ee7b90,0 ee7b94,0 @@ -1022,19 +1022,19 @@ ee7b98,0 ee7b9c,0 ee7ba0,0 ee7ba4,0 -ee7e4c,c100a85 -ef32b8,c100a7a +ee7e4c,c100a8b +ef32b8,c100a80 ef32bc,0 ef32c0,8fbf003c -ef36e4,c100a50 +ef36e4,c100a56 ef36e8,0 -ef373c,c100a62 -ef4f98,c100794 +ef373c,c100a68 +ef4f98,c10079a ef4f9c,0 26c10e0,38ff 3480000,80400020 3480004,80400844 -3480008,8040a314 +3480008,8040a334 3480020,3 3480034,dfdfdfdf 3480038,dfdfdfdf @@ -1567,11312 +1567,11305 @@ ef4f9c,0 3480888,100 3480cd0,640000 3480cd4,100 -3480ce0,27bdffe8 -3480ce4,afbf0010 -3480ce8,c101fa4 -3480cf0,3c028012 -3480cf4,2442d2a0 -3480cf8,240e0140 -3480cfc,3c018010 -3480d00,ac2ee500 -3480d04,240f00f0 -3480d08,8fbf0010 -3480d0c,3e00008 -3480d10,27bd0018 -3480d14,3c088040 -3480d18,ac4815d4 -3480d1c,3e00008 -3480d20,340215c0 -3480d24,308400ff -3480d28,3c088012 -3480d2c,2508a5d0 -3480d30,3401008c -3480d34,10810016 -3480d38,91020075 -3480d3c,3401008d -3480d40,10810013 -3480d44,91020075 -3480d48,10800011 -3480d4c,91020074 -3480d50,3401008a -3480d54,1081000e -3480d58,91020074 -3480d5c,3401008b -3480d60,1081000b +3480ce8,10000 +3480cf8,27bdffe8 +3480cfc,afbf0010 +3480d00,c101fac +3480d08,3c028012 +3480d0c,2442d2a0 +3480d10,240e0140 +3480d14,3c018010 +3480d18,ac2ee500 +3480d1c,240f00f0 +3480d20,8fbf0010 +3480d24,3e00008 +3480d28,27bd0018 +3480d2c,3c088040 +3480d30,ac4815d4 +3480d34,3e00008 +3480d38,340215c0 +3480d3c,308400ff +3480d40,3c088012 +3480d44,2508a5d0 +3480d48,3401008c +3480d4c,10810016 +3480d50,91020075 +3480d54,3401008d +3480d58,10810013 +3480d5c,91020075 +3480d60,10800011 3480d64,91020074 -3480d68,34010058 -3480d6c,10810008 -3480d70,34020000 -3480d74,34010078 -3480d78,10810005 -3480d7c,34020000 -3480d80,34010079 -3480d84,10810002 +3480d68,3401008a +3480d6c,1081000e +3480d70,91020074 +3480d74,3401008b +3480d78,1081000b +3480d7c,91020074 +3480d80,34010058 +3480d84,10810008 3480d88,34020000 -3480d8c,340200ff -3480d90,3e00008 -3480d98,8fa60030 -3480d9c,810036c -3480da0,84c50004 -3480da4,8fb9002c -3480da8,810036c -3480dac,87250004 -3480db0,3c0a8041 -3480db4,254ab56c -3480db8,8d4a0000 -3480dbc,11400004 -3480dc4,3c058041 -3480dc8,24a5b560 -3480dcc,8ca50000 -3480dd0,3e00008 -3480dd8,3c088041 -3480ddc,2508b56c -3480de0,8d080000 -3480de4,11000004 -3480dec,3c038041 -3480df0,2463b55c -3480df4,8c630000 -3480df8,30fc3 -3480dfc,614026 -3480e00,1014023 -3480e04,a0880852 -3480e08,3e00008 -3480e10,3c088040 -3480e14,25080cd6 -3480e18,91080000 -3480e1c,1500000c -3480e20,240bffff -3480e24,3c088041 -3480e28,2508b56c -3480e2c,8d080000 -3480e30,11000007 -3480e34,1405821 -3480e38,3c088041 -3480e3c,2508b558 -3480e40,8d080000 -3480e44,15000002 -3480e48,240bffff -3480e4c,340b0001 -3480e50,5600009 -3480e58,27bdffe8 -3480e5c,afab0010 -3480e60,afbf0014 -3480e64,c01c508 -3480e6c,8fab0010 -3480e70,8fbf0014 -3480e74,27bd0018 -3480e78,3e00008 -3480e80,90450003 -3480e84,3c088041 -3480e88,2508b56c -3480e8c,8d080000 -3480e90,11000004 -3480e98,3c058041 -3480e9c,24a5b564 -3480ea0,8ca50000 -3480ea4,3e00008 -3480eac,27bdffe8 -3480eb0,afb00010 -3480eb4,afbf0014 -3480eb8,3c088041 -3480ebc,2508b570 -3480ec0,8d080000 -3480ec4,31080001 -3480ec8,1500000b -3480ecc,34100041 -3480ed0,3c048041 -3480ed4,2484b56c -3480ed8,8c840000 -3480edc,10800006 -3480ee0,90500000 -3480ee4,3c088041 -3480ee8,2508b568 -3480eec,8d100000 -3480ef0,c101efb -3480ef8,c101ab5 -3480f00,2002821 -3480f04,8fb00010 -3480f08,8fbf0014 -3480f0c,3e00008 -3480f10,27bd0018 -3480f14,27bdffe0 -3480f18,afa70010 -3480f1c,afa20014 -3480f20,afa30018 -3480f24,afbf001c -3480f28,c101b26 -3480f2c,e02821 -3480f30,8fa70010 -3480f34,8fa20014 -3480f38,8fa30018 -3480f3c,8fbf001c -3480f40,3e00008 -3480f44,27bd0020 -3480f48,27bdffe8 -3480f4c,afbf0010 -3480f50,8c881d2c -3480f54,34090001 -3480f58,94e00 -3480f5c,1091024 -3480f60,10400021 -3480f68,94ca02dc -3480f6c,3c0b8012 -3480f70,256ba5d0 -3480f74,948c00a4 -3480f78,3401003d -3480f7c,1181000a -3480f84,8a6021 -3480f88,918d1d28 -3480f8c,15a00014 -3480f94,340d0001 -3480f98,a18d1d28 -3480f9c,254a0013 -3480fa0,1000000a -3480fa8,340c0001 -3480fac,14c6004 -3480fb0,916d0ef2 -3480fb4,1ac7024 -3480fb8,15c00009 -3480fc0,1ac7025 -3480fc4,a16e0ef2 -3480fc8,254a0010 -3480fcc,1294827 -3480fd0,1094024 -3480fd4,ac881d2c -3480fd8,c101a68 -3480fdc,1402021 -3480fe0,c102532 -3480fe8,8fbf0010 -3480fec,34020000 -3480ff0,3e00008 -3480ff4,27bd0018 -3480ff8,27bdffe8 -3480ffc,afbf0010 -3481000,c101a68 -3481004,20e4ffc6 -3481008,340200ff -348100c,8fbf0010 -3481010,3e00008 -3481014,27bd0018 -3481018,27bdffe0 -348101c,afa10010 -3481020,afa30014 -3481024,afbf0018 -3481028,c101a68 -348102c,34040023 -3481030,8fa10010 -3481034,8fa30014 -3481038,8fbf0018 -348103c,3e00008 -3481040,27bd0020 -3481044,27bdffe0 -3481048,afa60010 -348104c,afa70014 -3481050,afbf0018 -3481054,3c018012 -3481058,2421a5d0 -348105c,80280ede -3481060,35080001 -3481064,a0280ede -3481068,c101a68 -348106c,34040027 -3481070,8fa60010 -3481074,8fa70014 -3481078,8fbf0018 -348107c,3e00008 -3481080,27bd0020 -3481084,27bdffe8 -3481088,afa30010 -348108c,afbf0014 -3481090,3c018012 -3481094,2421a5d0 -3481098,80280ede -348109c,35080004 -34810a0,a0280ede -34810a4,3c188040 -34810a8,83180cd8 -34810ac,13000003 -34810b4,c101a68 -34810b8,34040029 -34810bc,240f0001 -34810c0,8fa30010 -34810c4,8fbf0014 -34810c8,3e00008 -34810cc,27bd0018 -34810d0,27bdffd8 -34810d4,afa40010 -34810d8,afa20014 -34810dc,afaf0018 -34810e0,afbf0020 -34810e4,c101a68 -34810e8,3404002a -34810ec,34050003 -34810f0,8fa40010 -34810f4,8fa20014 -34810f8,8faf0018 -34810fc,8fbf0020 -3481100,3e00008 -3481104,27bd0028 -3481108,607821 -348110c,81ec0edf -3481110,318e0080 -3481114,11c00003 -3481118,34030005 -348111c,3e00008 -3481120,34020002 -3481124,3e00008 -3481128,601021 -348112c,85c200a4 -3481130,3c088012 -3481134,2508a5d0 -3481138,81090edf -348113c,35290080 -3481140,a1090edf -3481144,3e00008 -348114c,27bdfff0 -3481150,afbf0004 -3481154,c035886 -348115c,3c0c8012 -3481160,258ca5d0 -3481164,858d0f2e -3481168,8d980004 -348116c,13000002 -3481170,340e0001 -3481174,340e0002 -3481178,1ae6825 -348117c,a58d0f2e -3481180,8fbf0004 -3481184,27bd0010 -3481188,3e00008 -3481190,24090041 -3481194,27bdffe0 -3481198,afa80004 -348119c,afa90008 -34811a0,afaa000c -34811a4,afac0010 -34811a8,3c0affff -34811ac,a5403 -34811b0,3c08801d -34811b4,850c894c -34811b8,118a0002 -34811c0,a500894c -34811c4,3c08801e -34811c8,810a887c -34811cc,11400009 -34811d4,3c090036 -34811d8,94c03 -34811dc,a109887c -34811e0,3c090002 -34811e4,94c03 -34811e8,a109895f -34811ec,3c08801f -34811f0,a1008d38 -34811f4,8fac0010 -34811f8,8faa000c -34811fc,8fa90008 -3481200,8fa80004 -3481204,3e00008 -3481208,27bd0020 -3481210,3c0a8010 -3481214,254ae49c -3481218,8d4a0000 -348121c,1140001e -3481224,3c08801d -3481228,250884a0 -348122c,3c0b0001 -3481230,356b04c4 -3481234,10b4020 -3481238,85090000 -348123c,3c0b0002 -3481240,356b26cc -3481244,14b5020 -3481248,94840 -348124c,12a5021 -3481250,85490000 -3481254,a5091956 -3481258,3c0c801e -348125c,258c84a0 -3481260,34090003 -3481264,a1891e5e -3481268,34090014 -348126c,a1091951 -3481270,34090001 -3481274,3c018040 -3481278,a029120c -348127c,3c088012 -3481280,2508a5d0 -3481284,850913d2 -3481288,11200003 -3481290,34090001 -3481294,a50913d4 -3481298,3e00008 -34812a0,3421241c -34812a4,3c0d8040 -34812a8,25ad120c -34812ac,81a90000 -34812b0,11200008 -34812b4,862a00a4 -34812b8,340b005e -34812bc,114b0005 -34812c0,3c0c801e -34812c4,258c84a0 -34812c8,34090003 -34812cc,a1891e5e -34812d0,a1a00000 -34812d4,3e00008 -34812dc,3c02801d -34812e0,244284a0 -34812e4,3c010001 -34812e8,411020 -34812ec,3401047e -34812f0,a4411e1a -34812f4,34010014 -34812f8,3e00008 -34812fc,a0411e15 -3481300,27bdffe8 -3481304,afbf0014 -3481308,afa40018 -348130c,8e190004 -3481310,17200015 -3481314,8e190000 -3481318,3c018010 -348131c,24219c90 -3481320,19c880 -3481324,3210820 -3481328,90210000 -348132c,34190052 -3481330,1721000d -3481334,8e190000 -3481338,960200a6 -348133c,304c0007 -3481340,398c0007 -3481344,15800008 -3481348,240400aa -348134c,c00a22d -3481354,14400004 -3481358,8e190000 -348135c,341900db -3481360,10000002 -3481364,ae190000 -3481368,340101e1 -348136c,8fbf0014 -3481370,8fa40018 -3481374,3e00008 -3481378,27bd0018 -348137c,3c088040 -3481380,81080cde -3481384,11000005 -3481388,3c018012 -348138c,2421a5d0 -3481390,80280ed6 -3481394,35080001 -3481398,a0280ed6 -348139c,34080000 -34813a0,3e00008 -34813a4,adf90000 -34813a8,3c0b801d -34813ac,256b84a0 -34813b0,856b00a4 -34813b4,340c005a -34813b8,156c0003 -34813bc,340b01a5 -34813c0,a42b1e1a -34813c4,1000000e -34813c8,3c0c8012 -34813cc,258ca5d0 -34813d0,8d8c0004 -34813d4,15800008 -34813d8,3c0b8040 -34813dc,816b0cde -34813e0,11600007 -34813e4,842b1e1a -34813e8,340c01a5 -34813ec,116c0002 -34813f4,10000002 -34813f8,340b0129 -34813fc,a42b1e1a -3481400,3e00008 -348140c,2202825 -3481410,3c0a801e -3481414,254aaa30 -3481418,c544002c -348141c,3c0bc43c -3481420,256b8000 -3481424,448b3000 -3481428,4606203c -3481430,45000026 -3481438,c5440024 -348143c,3c0bc28a -3481440,448b3000 -3481444,4606203c -348144c,4501001f -3481454,3c0b41c8 +3480d8c,34010078 +3480d90,10810005 +3480d94,34020000 +3480d98,34010079 +3480d9c,10810002 +3480da0,34020000 +3480da4,340200ff +3480da8,3e00008 +3480db0,8fa60030 +3480db4,8100372 +3480db8,84c50004 +3480dbc,8fb9002c +3480dc0,8100372 +3480dc4,87250004 +3480dc8,3c0a8041 +3480dcc,254ab58c +3480dd0,8d4a0000 +3480dd4,11400004 +3480ddc,3c058041 +3480de0,24a5b580 +3480de4,8ca50000 +3480de8,3e00008 +3480df0,3c088041 +3480df4,2508b58c +3480df8,8d080000 +3480dfc,11000004 +3480e04,3c038041 +3480e08,2463b57c +3480e0c,8c630000 +3480e10,30fc3 +3480e14,614026 +3480e18,1014023 +3480e1c,a0880852 +3480e20,3e00008 +3480e28,3c088040 +3480e2c,25080cd6 +3480e30,91080000 +3480e34,1500000c +3480e38,240bffff +3480e3c,3c088041 +3480e40,2508b58c +3480e44,8d080000 +3480e48,11000007 +3480e4c,1405821 +3480e50,3c088041 +3480e54,2508b578 +3480e58,8d080000 +3480e5c,15000002 +3480e60,240bffff +3480e64,340b0001 +3480e68,5600009 +3480e70,27bdffe8 +3480e74,afab0010 +3480e78,afbf0014 +3480e7c,c01c508 +3480e84,8fab0010 +3480e88,8fbf0014 +3480e8c,27bd0018 +3480e90,3e00008 +3480e98,90450003 +3480e9c,3c088041 +3480ea0,2508b58c +3480ea4,8d080000 +3480ea8,11000004 +3480eb0,3c058041 +3480eb4,24a5b584 +3480eb8,8ca50000 +3480ebc,3e00008 +3480ec4,27bdffe8 +3480ec8,afb00010 +3480ecc,afbf0014 +3480ed0,3c088041 +3480ed4,2508b590 +3480ed8,8d080000 +3480edc,31080001 +3480ee0,1500000b +3480ee4,34100041 +3480ee8,3c048041 +3480eec,2484b58c +3480ef0,8c840000 +3480ef4,10800006 +3480ef8,90500000 +3480efc,3c088041 +3480f00,2508b588 +3480f04,8d100000 +3480f08,c101f03 +3480f10,c101abd +3480f18,2002821 +3480f1c,8fb00010 +3480f20,8fbf0014 +3480f24,3e00008 +3480f28,27bd0018 +3480f2c,27bdffe0 +3480f30,afa70010 +3480f34,afa20014 +3480f38,afa30018 +3480f3c,afbf001c +3480f40,c101b2e +3480f44,e02821 +3480f48,8fa70010 +3480f4c,8fa20014 +3480f50,8fa30018 +3480f54,8fbf001c +3480f58,3e00008 +3480f5c,27bd0020 +3480f60,27bdffe8 +3480f64,afbf0010 +3480f68,8c881d2c +3480f6c,34090001 +3480f70,94e00 +3480f74,1091024 +3480f78,10400021 +3480f80,94ca02dc +3480f84,3c0b8012 +3480f88,256ba5d0 +3480f8c,948c00a4 +3480f90,3401003d +3480f94,1181000a +3480f9c,8a6021 +3480fa0,918d1d28 +3480fa4,15a00014 +3480fac,340d0001 +3480fb0,a18d1d28 +3480fb4,254a0013 +3480fb8,1000000a +3480fc0,340c0001 +3480fc4,14c6004 +3480fc8,916d0ef2 +3480fcc,1ac7024 +3480fd0,15c00009 +3480fd8,1ac7025 +3480fdc,a16e0ef2 +3480fe0,254a0010 +3480fe4,1294827 +3480fe8,1094024 +3480fec,ac881d2c +3480ff0,c101a70 +3480ff4,1402021 +3480ff8,c10253a +3481000,8fbf0010 +3481004,34020000 +3481008,3e00008 +348100c,27bd0018 +3481010,27bdffe8 +3481014,afbf0010 +3481018,c101a70 +348101c,20e4ffc6 +3481020,340200ff +3481024,8fbf0010 +3481028,3e00008 +348102c,27bd0018 +3481030,27bdffe0 +3481034,afa10010 +3481038,afa30014 +348103c,afbf0018 +3481040,c101a70 +3481044,34040023 +3481048,8fa10010 +348104c,8fa30014 +3481050,8fbf0018 +3481054,3e00008 +3481058,27bd0020 +348105c,27bdffe0 +3481060,afa60010 +3481064,afa70014 +3481068,afbf0018 +348106c,3c018012 +3481070,2421a5d0 +3481074,80280ede +3481078,35080001 +348107c,a0280ede +3481080,c101a70 +3481084,34040027 +3481088,8fa60010 +348108c,8fa70014 +3481090,8fbf0018 +3481094,3e00008 +3481098,27bd0020 +348109c,27bdffe8 +34810a0,afa30010 +34810a4,afbf0014 +34810a8,3c018012 +34810ac,2421a5d0 +34810b0,80280ede +34810b4,35080004 +34810b8,a0280ede +34810bc,3c188040 +34810c0,83180cd8 +34810c4,13000003 +34810cc,c101a70 +34810d0,34040029 +34810d4,240f0001 +34810d8,8fa30010 +34810dc,8fbf0014 +34810e0,3e00008 +34810e4,27bd0018 +34810e8,27bdffd8 +34810ec,afa40010 +34810f0,afa20014 +34810f4,afaf0018 +34810f8,afbf0020 +34810fc,c101a70 +3481100,3404002a +3481104,34050003 +3481108,8fa40010 +348110c,8fa20014 +3481110,8faf0018 +3481114,8fbf0020 +3481118,3e00008 +348111c,27bd0028 +3481120,607821 +3481124,81ec0edf +3481128,318e0080 +348112c,11c00003 +3481130,34030005 +3481134,3e00008 +3481138,34020002 +348113c,3e00008 +3481140,601021 +3481144,85c200a4 +3481148,3c088012 +348114c,2508a5d0 +3481150,81090edf +3481154,35290080 +3481158,a1090edf +348115c,3e00008 +3481164,27bdfff0 +3481168,afbf0004 +348116c,c035886 +3481174,3c0c8012 +3481178,258ca5d0 +348117c,858d0f2e +3481180,8d980004 +3481184,13000002 +3481188,340e0001 +348118c,340e0002 +3481190,1ae6825 +3481194,a58d0f2e +3481198,8fbf0004 +348119c,27bd0010 +34811a0,3e00008 +34811a8,24090041 +34811ac,27bdffe0 +34811b0,afa80004 +34811b4,afa90008 +34811b8,afaa000c +34811bc,afac0010 +34811c0,3c0affff +34811c4,a5403 +34811c8,3c08801d +34811cc,850c894c +34811d0,118a0002 +34811d8,a500894c +34811dc,3c08801e +34811e0,810a887c +34811e4,11400009 +34811ec,3c090036 +34811f0,94c03 +34811f4,a109887c +34811f8,3c090002 +34811fc,94c03 +3481200,a109895f +3481204,3c08801f +3481208,a1008d38 +348120c,8fac0010 +3481210,8faa000c +3481214,8fa90008 +3481218,8fa80004 +348121c,3e00008 +3481220,27bd0020 +3481228,3c0a8010 +348122c,254ae49c +3481230,8d4a0000 +3481234,1140001e +348123c,3c08801d +3481240,250884a0 +3481244,3c0b0001 +3481248,356b04c4 +348124c,10b4020 +3481250,85090000 +3481254,3c0b0002 +3481258,356b26cc +348125c,14b5020 +3481260,94840 +3481264,12a5021 +3481268,85490000 +348126c,a5091956 +3481270,3c0c801e +3481274,258c84a0 +3481278,34090003 +348127c,a1891e5e +3481280,34090014 +3481284,a1091951 +3481288,34090001 +348128c,3c018040 +3481290,a0291224 +3481294,3c088012 +3481298,2508a5d0 +348129c,850913d2 +34812a0,11200003 +34812a8,34090001 +34812ac,a50913d4 +34812b0,3e00008 +34812b8,3421241c +34812bc,3c0d8040 +34812c0,25ad1224 +34812c4,81a90000 +34812c8,11200008 +34812cc,862a00a4 +34812d0,340b005e +34812d4,114b0005 +34812d8,3c0c801e +34812dc,258c84a0 +34812e0,34090003 +34812e4,a1891e5e +34812e8,a1a00000 +34812ec,3e00008 +34812f4,3c02801d +34812f8,244284a0 +34812fc,3c010001 +3481300,411020 +3481304,3401047e +3481308,a4411e1a +348130c,34010014 +3481310,3e00008 +3481314,a0411e15 +3481318,27bdffe8 +348131c,afbf0014 +3481320,afa40018 +3481324,8e190004 +3481328,17200015 +348132c,8e190000 +3481330,3c018010 +3481334,24219c90 +3481338,19c880 +348133c,3210820 +3481340,90210000 +3481344,34190052 +3481348,1721000d +348134c,8e190000 +3481350,960200a6 +3481354,304c0007 +3481358,398c0007 +348135c,15800008 +3481360,240400aa +3481364,c00a22d +348136c,14400004 +3481370,8e190000 +3481374,341900db +3481378,10000002 +348137c,ae190000 +3481380,340101e1 +3481384,8fbf0014 +3481388,8fa40018 +348138c,3e00008 +3481390,27bd0018 +3481394,3c088040 +3481398,81080cde +348139c,11000005 +34813a0,3c018012 +34813a4,2421a5d0 +34813a8,80280ed6 +34813ac,35080001 +34813b0,a0280ed6 +34813b4,34080000 +34813b8,3e00008 +34813bc,adf90000 +34813c0,3c0b801d +34813c4,256b84a0 +34813c8,856b00a4 +34813cc,340c005a +34813d0,156c0003 +34813d4,340b01a5 +34813d8,a42b1e1a +34813dc,1000000e +34813e0,3c0c8012 +34813e4,258ca5d0 +34813e8,8d8c0004 +34813ec,15800008 +34813f0,3c0b8040 +34813f4,816b0cde +34813f8,11600007 +34813fc,842b1e1a +3481400,340c01a5 +3481404,116c0002 +348140c,10000002 +3481410,340b0129 +3481414,a42b1e1a +3481418,3e00008 +3481424,2202825 +3481428,3c0a801e +348142c,254aaa30 +3481430,c544002c +3481434,3c0bc43c +3481438,256b8000 +348143c,448b3000 +3481440,4606203c +3481448,45000026 +3481450,c5440024 +3481454,3c0bc28a 3481458,448b3000 348145c,4606203c -3481464,45000019 -348146c,3c098040 -3481470,25291408 -3481474,814b0424 -3481478,1160000e -348147c,812e0000 -3481480,340c007e -3481484,116c000b -348148c,15c00009 -3481490,340c0001 -3481494,a12c0000 -3481498,3c0dc1a0 -348149c,ad4d0024 -34814a0,3c0d4120 -34814a4,ad4d0028 -34814a8,3c0dc446 -34814ac,25ad8000 -34814b0,ad4d002c -34814b4,11c00005 -34814bc,15600003 -34814c0,340d8000 -34814c4,a54d00b6 -34814c8,a1200000 -34814cc,3e00008 -34814d8,3c0a801e -34814dc,254aaa30 -34814e0,8d4b066c -34814e4,3c0cd000 -34814e8,258cffff -34814ec,16c5824 -34814f0,3e00008 -34814f4,ad4b066c -34814f8,27bdffe0 -34814fc,afbf0014 -3481500,afa40018 -3481504,1c17825 -3481508,ac4f0680 -348150c,34040001 -3481510,c01b638 -3481518,3c088040 -348151c,81080cd8 -3481520,15000007 -3481528,3c04801d -348152c,248484a0 -3481530,3c058040 -3481534,80a50cd9 -3481538,c037500 -3481540,8fa40018 -3481544,8c880138 -3481548,8d090010 -348154c,252a03d4 -3481550,ac8a029c -3481554,8fbf0014 -3481558,3e00008 -348155c,27bd0020 -3481560,27bdffe0 -3481564,afbf0014 -3481568,afa40018 -348156c,3c088040 -3481570,81080cd8 -3481574,1500001a -348157c,3c09801e -3481580,2529887c -3481584,81280000 -3481588,340b0036 -348158c,150b001e -3481594,3c088040 -3481598,810814d4 -348159c,1500001a -34815a4,34080001 -34815a8,3c018040 -34815ac,a02814d4 -34815b0,3c04801d -34815b4,248484a0 -34815b8,3c058040 -34815bc,90a50cda -34815c0,34060000 -34815c4,c037385 -34815cc,34044802 -34815d0,c0191bc -34815d8,10000025 -34815e0,3c04801d -34815e4,248484a0 -34815e8,34050065 -34815ec,c01bf73 -34815f4,34040032 -34815f8,c01b638 -3481600,1000000c -3481608,8fa40018 -348160c,3c05801d -3481610,24a584a0 -3481614,c008ab4 -348161c,10400014 -3481624,3c088040 -3481628,810814d4 -348162c,11000010 -3481634,8fa40018 -3481638,8c880138 -348163c,8d090010 -3481640,252a035c -3481644,ac8a029c -3481648,3c028012 -348164c,2442a5d0 -3481650,94490ee0 -3481654,352a0020 -3481658,a44a0ee0 -348165c,8c880004 -3481660,3c09ffff -3481664,2529ffff -3481668,1094024 -348166c,ac880004 -3481670,8fbf0014 -3481674,3e00008 -3481678,27bd0020 -348167c,860f00b6 -3481680,9739b4ae -3481684,3c09801e -3481688,2529aa30 -348168c,812a0424 -3481690,11400004 -3481698,3409007e -348169c,15490003 -34816a4,3e00008 -34816a8,340a0000 -34816ac,3e00008 -34816b0,340a0001 -34816b4,8c8e0134 -34816b8,15c00002 -34816bc,3c0e4480 -34816c0,ac8e0024 +3481464,4501001f +348146c,3c0b41c8 +3481470,448b3000 +3481474,4606203c +348147c,45000019 +3481484,3c098040 +3481488,25291420 +348148c,814b0424 +3481490,1160000e +3481494,812e0000 +3481498,340c007e +348149c,116c000b +34814a4,15c00009 +34814a8,340c0001 +34814ac,a12c0000 +34814b0,3c0dc1a0 +34814b4,ad4d0024 +34814b8,3c0d4120 +34814bc,ad4d0028 +34814c0,3c0dc446 +34814c4,25ad8000 +34814c8,ad4d002c +34814cc,11c00005 +34814d4,15600003 +34814d8,340d8000 +34814dc,a54d00b6 +34814e0,a1200000 +34814e4,3e00008 +34814f0,3c0a801e +34814f4,254aaa30 +34814f8,8d4b066c +34814fc,3c0cd000 +3481500,258cffff +3481504,16c5824 +3481508,3e00008 +348150c,ad4b066c +3481510,27bdffe0 +3481514,afbf0014 +3481518,afa40018 +348151c,1c17825 +3481520,ac4f0680 +3481524,34040001 +3481528,c01b638 +3481530,3c088040 +3481534,81080cd8 +3481538,15000007 +3481540,3c04801d +3481544,248484a0 +3481548,3c058040 +348154c,80a50cd9 +3481550,c037500 +3481558,8fa40018 +348155c,8c880138 +3481560,8d090010 +3481564,252a03d4 +3481568,ac8a029c +348156c,8fbf0014 +3481570,3e00008 +3481574,27bd0020 +3481578,27bdffe0 +348157c,afbf0014 +3481580,afa40018 +3481584,3c088040 +3481588,81080cd8 +348158c,1500001a +3481594,3c09801e +3481598,2529887c +348159c,81280000 +34815a0,340b0036 +34815a4,150b001e +34815ac,3c088040 +34815b0,810814ec +34815b4,1500001a +34815bc,34080001 +34815c0,3c018040 +34815c4,a02814ec +34815c8,3c04801d +34815cc,248484a0 +34815d0,3c058040 +34815d4,90a50cda +34815d8,34060000 +34815dc,c037385 +34815e4,34044802 +34815e8,c0191bc +34815f0,10000025 +34815f8,3c04801d +34815fc,248484a0 +3481600,34050065 +3481604,c01bf73 +348160c,34040032 +3481610,c01b638 +3481618,1000000c +3481620,8fa40018 +3481624,3c05801d +3481628,24a584a0 +348162c,c008ab4 +3481634,10400014 +348163c,3c088040 +3481640,810814ec +3481644,11000010 +348164c,8fa40018 +3481650,8c880138 +3481654,8d090010 +3481658,252a035c +348165c,ac8a029c +3481660,3c028012 +3481664,2442a5d0 +3481668,94490ee0 +348166c,352a0020 +3481670,a44a0ee0 +3481674,8c880004 +3481678,3c09ffff +348167c,2529ffff +3481680,1094024 +3481684,ac880004 +3481688,8fbf0014 +348168c,3e00008 +3481690,27bd0020 +3481694,860f00b6 +3481698,9739b4ae +348169c,3c09801e +34816a0,2529aa30 +34816a4,812a0424 +34816a8,11400004 +34816b0,3409007e +34816b4,15490003 +34816bc,3e00008 +34816c0,340a0000 34816c4,3e00008 -34816c8,8fae0044 -34816cc,260501a4 -34816d0,27bdffe0 -34816d4,afbf0014 -34816d8,afa50018 -34816dc,8625001c -34816e0,52a03 -34816e4,c008134 -34816e8,30a5003f -34816ec,8fa50018 -34816f0,8fbf0014 -34816f4,3e00008 -34816f8,27bd0020 -34816fc,ae19066c -3481700,8e0a0428 -3481704,3c09801e -3481708,2529aa30 -348170c,854b00b6 -3481710,216b8000 -3481714,3e00008 -3481718,a52b00b6 -348171c,3c08801e -3481720,2508aa30 -3481724,810a0434 -3481728,340b0008 -348172c,154b0002 -3481730,34090007 -3481734,a1090434 -3481738,3e00008 -348173c,c606000c -3481740,3c08801e -3481744,2508aa30 -3481748,8d0901ac -348174c,3c0a0400 -3481750,254a2f98 -3481754,152a000b -3481758,8d0b01bc -348175c,3c0c42cf -3481760,156c0003 -3481764,3c0d4364 -3481768,10000006 -348176c,ad0d01bc -3481770,3c0c4379 -3481774,156c0003 -3481778,3c09803b -348177c,2529967c -3481780,ad090664 -3481784,3e00008 -3481788,260501a4 -348178c,a498017c -3481790,3c08801d -3481794,250884a0 -3481798,850900a4 -348179c,340a0002 -34817a0,152a000e -34817a4,8c890138 -34817a8,8d290010 -34817ac,252a3398 -34817b0,ac8a0184 -34817b4,340b0001 -34817b8,a48b017c -34817bc,27bdffe8 -34817c0,afbf0014 -34817c4,3c053dcd -34817c8,24a5cccd -34817cc,c0083e2 -34817d4,8fbf0014 -34817d8,27bd0018 -34817dc,3e00008 -34817e4,948e001c -34817e8,21cdffce -34817ec,5a00010 -34817f0,34020000 -34817f4,31a90007 -34817f8,340a0001 -34817fc,12a5004 -3481800,d48c2 -3481804,3c0c8012 -3481808,258ca5d0 -348180c,1896020 -3481810,918b05b4 -3481814,16a5824 -3481818,34020000 -348181c,11600004 -3481824,340d0026 -3481828,a48d001c -348182c,34020001 -3481830,3e00008 -3481838,94ae001c -348183c,21cdffce -3481840,5a0000b -3481844,34020000 -3481848,31a90007 -348184c,340a0001 -3481850,12a5004 -3481854,d48c2 -3481858,3c0c8012 -348185c,258ca5d0 -3481860,1896020 -3481864,918b05b4 -3481868,16a5825 -348186c,a18b05b4 -3481870,3e00008 -3481878,27bdfff0 -348187c,afbf0008 -3481880,28810032 -3481884,10200003 -3481888,801021 -348188c,320f809 -3481894,8fbf0008 -3481898,27bd0010 -348189c,3e00008 -34818a4,3c08801d -34818a8,250884a0 -34818ac,3c098012 -34818b0,2529a5d0 -34818b4,950a00a4 -34818b8,3401003e -34818bc,15410002 -34818c0,912b1397 -34818c4,216aff2a -34818c8,960b001c -34818cc,216b0001 -34818d0,340c0001 -34818d4,16c6004 -34818d8,3401001c -34818dc,1410018 -34818e0,6812 -34818e4,12d7020 -34818e8,8dcf00e4 -34818ec,18f1024 -34818f0,3e00008 -34818f8,3c08801d -34818fc,250884a0 -3481900,3c098012 -3481904,2529a5d0 -3481908,950a00a4 -348190c,3401003e -3481910,15410002 -3481914,912b1397 -3481918,216aff2a -348191c,848b001c -3481920,216b0001 -3481924,340c0001 -3481928,16c6004 -348192c,3401001c -3481930,1410018 -3481934,6812 -3481938,12d7020 -348193c,8dcf00e4 -3481940,18f7825 -3481944,adcf00e4 -3481948,3e00008 -3481950,27bdffe8 -3481954,afbf0010 -3481958,c101fb3 -3481960,8fbf0010 -3481964,27bd0018 -3481968,8fae0018 -348196c,3e00008 -3481970,3c018010 -3481974,340100ff -3481978,15210002 -348197c,92220000 -3481980,340200ff +34816c8,340a0001 +34816cc,8c8e0134 +34816d0,15c00002 +34816d4,3c0e4480 +34816d8,ac8e0024 +34816dc,3e00008 +34816e0,8fae0044 +34816e4,260501a4 +34816e8,27bdffe0 +34816ec,afbf0014 +34816f0,afa50018 +34816f4,8625001c +34816f8,52a03 +34816fc,c008134 +3481700,30a5003f +3481704,8fa50018 +3481708,8fbf0014 +348170c,3e00008 +3481710,27bd0020 +3481714,ae19066c +3481718,8e0a0428 +348171c,3c09801e +3481720,2529aa30 +3481724,854b00b6 +3481728,216b8000 +348172c,3e00008 +3481730,a52b00b6 +3481734,3c08801e +3481738,2508aa30 +348173c,810a0434 +3481740,340b0008 +3481744,154b0002 +3481748,34090007 +348174c,a1090434 +3481750,3e00008 +3481754,c606000c +3481758,3c08801e +348175c,2508aa30 +3481760,8d0901ac +3481764,3c0a0400 +3481768,254a2f98 +348176c,152a000b +3481770,8d0b01bc +3481774,3c0c42cf +3481778,156c0003 +348177c,3c0d4364 +3481780,10000006 +3481784,ad0d01bc +3481788,3c0c4379 +348178c,156c0003 +3481790,3c09803b +3481794,2529967c +3481798,ad090664 +348179c,3e00008 +34817a0,260501a4 +34817a4,a498017c +34817a8,3c08801d +34817ac,250884a0 +34817b0,850900a4 +34817b4,340a0002 +34817b8,152a000e +34817bc,8c890138 +34817c0,8d290010 +34817c4,252a3398 +34817c8,ac8a0184 +34817cc,340b0001 +34817d0,a48b017c +34817d4,27bdffe8 +34817d8,afbf0014 +34817dc,3c053dcd +34817e0,24a5cccd +34817e4,c0083e2 +34817ec,8fbf0014 +34817f0,27bd0018 +34817f4,3e00008 +34817fc,948e001c +3481800,21cdffce +3481804,5a00010 +3481808,34020000 +348180c,31a90007 +3481810,340a0001 +3481814,12a5004 +3481818,d48c2 +348181c,3c0c8012 +3481820,258ca5d0 +3481824,1896020 +3481828,918b05b4 +348182c,16a5824 +3481830,34020000 +3481834,11600004 +348183c,340d0026 +3481840,a48d001c +3481844,34020001 +3481848,3e00008 +3481850,94ae001c +3481854,21cdffce +3481858,5a0000b +348185c,34020000 +3481860,31a90007 +3481864,340a0001 +3481868,12a5004 +348186c,d48c2 +3481870,3c0c8012 +3481874,258ca5d0 +3481878,1896020 +348187c,918b05b4 +3481880,16a5825 +3481884,a18b05b4 +3481888,3e00008 +3481890,27bdfff0 +3481894,afbf0008 +3481898,28810032 +348189c,10200003 +34818a0,801021 +34818a4,320f809 +34818ac,8fbf0008 +34818b0,27bd0010 +34818b4,3e00008 +34818bc,3c08801d +34818c0,250884a0 +34818c4,3c098012 +34818c8,2529a5d0 +34818cc,950a00a4 +34818d0,3401003e +34818d4,15410002 +34818d8,912b1397 +34818dc,216aff2a +34818e0,960b001c +34818e4,216b0001 +34818e8,340c0001 +34818ec,16c6004 +34818f0,3401001c +34818f4,1410018 +34818f8,6812 +34818fc,12d7020 +3481900,8dcf00e4 +3481904,18f1024 +3481908,3e00008 +3481910,3c08801d +3481914,250884a0 +3481918,3c098012 +348191c,2529a5d0 +3481920,950a00a4 +3481924,3401003e +3481928,15410002 +348192c,912b1397 +3481930,216aff2a +3481934,848b001c +3481938,216b0001 +348193c,340c0001 +3481940,16c6004 +3481944,3401001c +3481948,1410018 +348194c,6812 +3481950,12d7020 +3481954,8dcf00e4 +3481958,18f7825 +348195c,adcf00e4 +3481960,3e00008 +3481968,27bdffe8 +348196c,afbf0010 +3481970,c101fbb +3481978,8fbf0010 +348197c,27bd0018 +3481980,8fae0018 3481984,3e00008 -3481988,34010009 -348198c,27bdffe8 -3481990,afa20010 -3481994,afbf0014 -3481998,c100687 -34819a0,14400002 -34819a4,91830000 -34819a8,340300ff -34819ac,8fa20010 -34819b0,8fbf0014 -34819b4,27bd0018 -34819b8,3e00008 -34819bc,34010009 -34819c0,27bdffe8 -34819c4,afa20010 -34819c8,afbf0014 -34819cc,960201e8 -34819d0,34010003 -34819d4,14410007 -34819dc,c100687 -34819e4,14400007 -34819ec,10000005 -34819f0,3403007a -34819f4,3401017a -34819f8,14610002 -3481a00,3403007a -3481a04,36280 -3481a08,18d2821 -3481a0c,8fa20010 -3481a10,8fbf0014 -3481a14,3e00008 -3481a18,27bd0018 -3481a1c,27bdfff0 -3481a20,afbf0000 -3481a24,afa30004 -3481a28,afa40008 -3481a2c,c101fef -3481a34,8fbf0000 -3481a38,8fa30004 -3481a3c,8fa40008 -3481a40,3e00008 -3481a44,27bd0010 -3481a48,6d7024 -3481a4c,15c00002 -3481a50,91ec0000 -3481a54,27ff003c +3481988,3c018010 +348198c,340100ff +3481990,15210002 +3481994,92220000 +3481998,340200ff +348199c,3e00008 +34819a0,34010009 +34819a4,27bdffe8 +34819a8,afa20010 +34819ac,afbf0014 +34819b0,c10068d +34819b8,14400002 +34819bc,91830000 +34819c0,340300ff +34819c4,8fa20010 +34819c8,8fbf0014 +34819cc,27bd0018 +34819d0,3e00008 +34819d4,34010009 +34819d8,27bdffe8 +34819dc,afa20010 +34819e0,afbf0014 +34819e4,960201e8 +34819e8,34010003 +34819ec,14410007 +34819f4,c10068d +34819fc,14400007 +3481a04,10000005 +3481a08,3403007a +3481a0c,3401017a +3481a10,14610002 +3481a18,3403007a +3481a1c,36280 +3481a20,18d2821 +3481a24,8fa20010 +3481a28,8fbf0014 +3481a2c,3e00008 +3481a30,27bd0018 +3481a34,27bdfff0 +3481a38,afbf0000 +3481a3c,afa30004 +3481a40,afa40008 +3481a44,c101ff7 +3481a4c,8fbf0000 +3481a50,8fa30004 +3481a54,8fa40008 3481a58,3e00008 -3481a6c,3c088012 -3481a70,2508a5d0 -3481a74,8509009c -3481a78,352a0002 -3481a7c,3e00008 -3481a80,a50a009c -3481a84,3c058012 -3481a88,24a5a5d0 -3481a8c,3c088040 -3481a90,25081a60 -3481a94,8ca90068 -3481a98,ad090000 -3481a9c,8ca9006c -3481aa0,ad090004 -3481aa4,94a90070 -3481aa8,a5090008 -3481aac,94a9009c -3481ab0,a509000a -3481ab4,340807e4 -3481ab8,1054021 -3481abc,34090e64 -3481ac0,1254821 -3481ac4,340a0008 -3481ac8,8d0b0000 -3481acc,8d2c0000 -3481ad0,ad2b0000 -3481ad4,ad0c0000 -3481ad8,2508001c -3481adc,25290004 -3481ae0,254affff -3481ae4,1d40fff8 -3481aec,801be03 -3481af4,27bdffe0 -3481af8,afb00010 -3481afc,afb10014 -3481b00,afbf0018 -3481b04,3c108012 -3481b08,2610a5d0 -3481b0c,3c118040 -3481b10,26311a60 -3481b14,8e080004 -3481b18,11000005 -3481b20,c1006e7 -3481b28,10000003 -3481b30,c1006fa -3481b38,c1006da -3481b3c,34040000 -3481b40,c1006da -3481b44,34040001 -3481b48,c1006da -3481b4c,34040002 -3481b50,8fb00010 -3481b54,8fb10014 -3481b58,8fbf0018 -3481b5c,27bd0020 -3481b60,3e00008 -3481b68,2044021 -3481b6c,9109006c -3481b70,340100ff -3481b74,11210007 -3481b7c,2094821 -3481b80,91290074 -3481b84,3401002c -3481b88,11210002 -3481b90,a1090069 -3481b94,3e00008 -3481b9c,27bdffe8 -3481ba0,afbf0010 -3481ba4,8e280000 -3481ba8,ae080040 -3481bac,8e280004 -3481bb0,ae080044 -3481bb4,96280008 -3481bb8,a6080048 -3481bbc,a2000f33 -3481bc0,9208004a -3481bc4,340100ff -3481bc8,15010003 -3481bd0,c10070d -3481bd8,8fbf0010 -3481bdc,27bd0018 -3481be0,3e00008 -3481be8,8e080040 -3481bec,ae080068 -3481bf0,8e080044 -3481bf4,ae08006c -3481bf8,96080048 -3481bfc,9209009d -3481c00,31290020 -3481c04,15200002 -3481c0c,3108ffdf -3481c10,a6080070 -3481c14,92080068 -3481c18,340100ff -3481c1c,15010003 -3481c24,34080001 -3481c28,a2080f33 -3481c2c,3e00008 -3481c34,27bdffe8 -3481c38,afbf0010 -3481c3c,9608009c -3481c40,31080040 -3481c44,11000005 -3481c4c,96080070 -3481c50,3108ff0f -3481c54,35080030 -3481c58,a6080070 -3481c5c,92280001 -3481c60,a2080069 -3481c64,96280002 -3481c68,a608006a -3481c6c,8e280004 -3481c70,ae08006c -3481c74,c100727 -3481c78,34040000 -3481c7c,c100727 -3481c80,34040001 -3481c84,c100727 -3481c88,34040002 -3481c8c,8fbf0010 -3481c90,27bd0018 -3481c94,3e00008 -3481c9c,2044021 -3481ca0,3c098040 -3481ca4,25291d44 -3481ca8,910a006c -3481cac,340100ff -3481cb0,11410005 -3481cb8,12a4821 -3481cbc,91290000 -3481cc0,1520001c -3481cc8,3c098040 -3481ccc,25291d3b -3481cd0,25290001 -3481cd4,912a0000 -3481cd8,11400013 -3481ce0,20a5821 -3481ce4,916b0074 -3481ce8,340100ff -3481cec,1161fff8 -3481cf4,920c006c -3481cf8,118afff5 -3481d00,920c006d -3481d04,118afff2 -3481d0c,920c006e -3481d10,118affef -3481d18,a10b0069 -3481d1c,a10a006c -3481d20,10000004 -3481d28,340900ff -3481d2c,a1090069 -3481d30,a109006c -3481d34,3e00008 -3481d3c,90f0203 -3481d40,10d0b00 -3481d44,10101 -3481d48,1010001 -3481d4c,1010101 -3481d50,10001 -3481d54,1010101 -3481d58,1010100 -3481d5c,330821 -3481d60,200f0047 -3481d64,15ea000e -3481d68,3c028012 -3481d6c,8c42a5d4 -3481d70,8e6f00a4 -3481d74,f7a03 -3481d78,14400005 -3481d7c,34024830 -3481d80,15e20007 -3481d88,24190003 -3481d8c,10000004 -3481d90,34026311 -3481d94,15e20002 -3481d9c,24190003 -3481da0,3e00008 -3481da8,330821 -3481dac,3c028012 -3481db0,8c42a5d4 -3481db4,8e6f00a4 -3481db8,f7a03 -3481dbc,14400005 -3481dc0,34024830 -3481dc4,15e20007 -3481dcc,24190003 -3481dd0,10000004 -3481dd4,34026311 -3481dd8,15e20002 -3481de0,24190003 -3481de4,3e00008 -3481dec,34010018 -3481df0,14810015 -3481df8,14400013 -3481e00,3c0a8012 -3481e04,254aa5d0 -3481e08,814800a6 -3481e0c,31080020 -3481e10,1100000d -3481e14,34020000 -3481e18,8148007b -3481e1c,34090007 -3481e20,11090005 -3481e24,34090008 -3481e28,11090003 -3481e30,8100792 -3481e34,34020000 -3481e38,81480ed6 -3481e3c,35080001 -3481e40,a1480ed6 -3481e44,34020001 -3481e48,3e00008 -3481e50,3c018040 -3481e54,8c210ccc -3481e58,10200006 -3481e60,94480670 -3481e64,31010800 -3481e68,34080800 -3481e6c,3e00008 -3481e74,950804c6 -3481e78,3401000b -3481e7c,3e00008 -3481e84,27bdffe8 -3481e88,afa50000 -3481e8c,afa60004 -3481e90,afa70008 -3481e94,afbf0010 -3481e98,80a80000 -3481e9c,25090001 -3481ea0,15200005 -3481ea8,52025 -3481eac,24a50008 -3481eb0,c015c0c -3481eb4,24c6fff8 -3481eb8,c10253c -3481ec0,8fbf0010 -3481ec4,8fa70008 -3481ec8,8fa60004 -3481ecc,8fa50000 -3481ed0,8015c0c -3481ed4,27bd0018 -3481ed8,ac4d066c -3481edc,a0400141 -3481ee0,a0400144 -3481ee4,340e00fe -3481ee8,3e00008 -3481eec,a04e0142 -3481ef0,a2250021 -3481ef4,3c108040 -3481ef8,26100898 -3481efc,26100004 -3481f00,8e0a0000 -3481f04,1140000b -3481f0c,a7c02 -3481f10,1f17820 -3481f14,3158ff00 -3481f18,18c202 -3481f1c,17000003 -3481f20,315900ff -3481f24,81ea0000 -3481f28,32ac825 -3481f2c,81007bf -3481f30,a1f90000 -3481f34,3e00008 -3481f3c,27bdfff0 -3481f40,afbf0008 -3481f44,c1007dd -3481f48,2264ffff -3481f4c,344a0000 -3481f50,8fbf0008 -3481f54,27bd0010 -3481f58,27bdfff0 -3481f5c,afbf0008 -3481f60,c1007dd -3481f64,36440000 -3481f68,34500000 -3481f6c,8fbf0008 -3481f70,27bd0010 -3481f74,3c088040 -3481f78,25080025 -3481f7c,91080000 -3481f80,15000007 -3481f88,3c088012 -3481f8c,2508a5d0 -3481f90,1044020 -3481f94,91020024 -3481f98,10000007 -3481fa0,840c0 -3481fa4,3c028040 -3481fa8,24420034 -3481fac,1024020 -3481fb0,1044020 -3481fb4,91020000 -3481fb8,3e00008 -3481fc0,8fb60030 -3481fc4,8fb70034 -3481fc8,8fbe0038 -3481fcc,3c088040 -3481fd0,25080025 -3481fd4,a1000000 -3481fd8,3e00008 -3481fe0,3c0a8012 -3481fe4,8d4aa5d4 -3481fe8,15400006 -3481fec,31780001 -3481ff0,17000007 -3481ff4,3c184230 -3481ff8,3c184250 -3481ffc,3e00008 -3482004,17000002 -3482008,3c184210 -348200c,3c184238 -3482010,3e00008 -3482018,906e13e2 -348201c,90620068 -3482020,34010059 -3482024,10410002 -3482028,34010fff -348202c,340100ff -3482030,3e00008 -3482038,3c048012 -348203c,2484a5d0 -3482040,908e13e2 -3482044,90820068 -3482048,34010059 -348204c,10410002 -3482050,34010fff -3482054,340100ff -3482058,3e00008 -3482060,3c08801f -3482064,25085de0 -3482068,8d01009c -348206c,14200003 -3482070,46025102 -3482074,3c083f80 -3482078,44882000 -348207c,3e00008 -3482084,ac800118 -3482088,27ff0030 -348208c,3e00008 -3482090,ac8e0180 -3482094,3c018040 -3482098,8c210cbc -348209c,10200008 -34820a4,81efa64c -34820a8,34180009 -34820ac,11f80002 -34820b0,34180001 -34820b4,34180000 -34820b8,3e00008 -34820c0,8defa670 -34820c4,31f80018 -34820c8,3e00008 -34820d0,3c018040 -34820d4,8c210cbc -34820d8,10200008 -34820e0,816ba64c -34820e4,340c0009 -34820e8,116c0002 -34820ec,340c0001 -34820f0,340c0000 -34820f4,3e00008 -34820fc,8d6ba670 -3482100,316c0018 -3482104,3e00008 -348210c,3c018040 -3482110,8c210cbc -3482114,10200008 -348211c,3c098012 -3482120,812aa64c -3482124,340b0009 -3482128,114b0009 -348212c,34020000 -3482130,3e00008 -3482134,34020002 -3482138,3c098012 -348213c,812aa673 -3482140,314a0038 -3482144,15400002 -3482148,34020000 +3481a5c,27bd0010 +3481a60,6d7024 +3481a64,15c00002 +3481a68,91ec0000 +3481a6c,27ff003c +3481a70,3e00008 +3481a84,3c088012 +3481a88,2508a5d0 +3481a8c,8509009c +3481a90,352a0002 +3481a94,3e00008 +3481a98,a50a009c +3481a9c,3c058012 +3481aa0,24a5a5d0 +3481aa4,3c088040 +3481aa8,25081a78 +3481aac,8ca90068 +3481ab0,ad090000 +3481ab4,8ca9006c +3481ab8,ad090004 +3481abc,94a90070 +3481ac0,a5090008 +3481ac4,94a9009c +3481ac8,a509000a +3481acc,340807e4 +3481ad0,1054021 +3481ad4,34090e64 +3481ad8,1254821 +3481adc,340a0008 +3481ae0,8d0b0000 +3481ae4,8d2c0000 +3481ae8,ad2b0000 +3481aec,ad0c0000 +3481af0,2508001c +3481af4,25290004 +3481af8,254affff +3481afc,1d40fff8 +3481b04,801be03 +3481b0c,27bdffe0 +3481b10,afb00010 +3481b14,afb10014 +3481b18,afbf0018 +3481b1c,3c108012 +3481b20,2610a5d0 +3481b24,3c118040 +3481b28,26311a78 +3481b2c,8e080004 +3481b30,11000005 +3481b38,c1006ed +3481b40,10000003 +3481b48,c100700 +3481b50,c1006e0 +3481b54,34040000 +3481b58,c1006e0 +3481b5c,34040001 +3481b60,c1006e0 +3481b64,34040002 +3481b68,8fb00010 +3481b6c,8fb10014 +3481b70,8fbf0018 +3481b74,27bd0020 +3481b78,3e00008 +3481b80,2044021 +3481b84,9109006c +3481b88,340100ff +3481b8c,11210007 +3481b94,2094821 +3481b98,91290074 +3481b9c,3401002c +3481ba0,11210002 +3481ba8,a1090069 +3481bac,3e00008 +3481bb4,27bdffe8 +3481bb8,afbf0010 +3481bbc,8e280000 +3481bc0,ae080040 +3481bc4,8e280004 +3481bc8,ae080044 +3481bcc,96280008 +3481bd0,a6080048 +3481bd4,a2000f33 +3481bd8,9208004a +3481bdc,340100ff +3481be0,15010003 +3481be8,c100713 +3481bf0,8fbf0010 +3481bf4,27bd0018 +3481bf8,3e00008 +3481c00,8e080040 +3481c04,ae080068 +3481c08,8e080044 +3481c0c,ae08006c +3481c10,96080048 +3481c14,9209009d +3481c18,31290020 +3481c1c,15200002 +3481c24,3108ffdf +3481c28,a6080070 +3481c2c,92080068 +3481c30,340100ff +3481c34,15010003 +3481c3c,34080001 +3481c40,a2080f33 +3481c44,3e00008 +3481c4c,27bdffe8 +3481c50,afbf0010 +3481c54,9608009c +3481c58,31080040 +3481c5c,11000005 +3481c64,96080070 +3481c68,3108ff0f +3481c6c,35080030 +3481c70,a6080070 +3481c74,92280001 +3481c78,a2080069 +3481c7c,96280002 +3481c80,a608006a +3481c84,8e280004 +3481c88,ae08006c +3481c8c,c10072d +3481c90,34040000 +3481c94,c10072d +3481c98,34040001 +3481c9c,c10072d +3481ca0,34040002 +3481ca4,8fbf0010 +3481ca8,27bd0018 +3481cac,3e00008 +3481cb4,2044021 +3481cb8,3c098040 +3481cbc,25291d5c +3481cc0,910a006c +3481cc4,340100ff +3481cc8,11410005 +3481cd0,12a4821 +3481cd4,91290000 +3481cd8,1520001c +3481ce0,3c098040 +3481ce4,25291d53 +3481ce8,25290001 +3481cec,912a0000 +3481cf0,11400013 +3481cf8,20a5821 +3481cfc,916b0074 +3481d00,340100ff +3481d04,1161fff8 +3481d0c,920c006c +3481d10,118afff5 +3481d18,920c006d +3481d1c,118afff2 +3481d24,920c006e +3481d28,118affef +3481d30,a10b0069 +3481d34,a10a006c +3481d38,10000004 +3481d40,340900ff +3481d44,a1090069 +3481d48,a109006c +3481d4c,3e00008 +3481d54,90f0203 +3481d58,10d0b00 +3481d5c,10101 +3481d60,1010001 +3481d64,1010101 +3481d68,10001 +3481d6c,1010101 +3481d70,1010100 +3481d74,330821 +3481d78,200f0047 +3481d7c,15ea000e +3481d80,3c028012 +3481d84,8c42a5d4 +3481d88,8e6f00a4 +3481d8c,f7a03 +3481d90,14400005 +3481d94,34024830 +3481d98,15e20007 +3481da0,24190003 +3481da4,10000004 +3481da8,34026311 +3481dac,15e20002 +3481db4,24190003 +3481db8,3e00008 +3481dc0,330821 +3481dc4,3c028012 +3481dc8,8c42a5d4 +3481dcc,8e6f00a4 +3481dd0,f7a03 +3481dd4,14400005 +3481dd8,34024830 +3481ddc,15e20007 +3481de4,24190003 +3481de8,10000004 +3481dec,34026311 +3481df0,15e20002 +3481df8,24190003 +3481dfc,3e00008 +3481e04,34010018 +3481e08,14810015 +3481e10,14400013 +3481e18,3c0a8012 +3481e1c,254aa5d0 +3481e20,814800a6 +3481e24,31080020 +3481e28,1100000d +3481e2c,34020000 +3481e30,8148007b +3481e34,34090007 +3481e38,11090005 +3481e3c,34090008 +3481e40,11090003 +3481e48,8100798 +3481e4c,34020000 +3481e50,81480ed6 +3481e54,35080001 +3481e58,a1480ed6 +3481e5c,34020001 +3481e60,3e00008 +3481e68,3c018040 +3481e6c,8c210ccc +3481e70,10200006 +3481e78,94480670 +3481e7c,31010800 +3481e80,34080800 +3481e84,3e00008 +3481e8c,950804c6 +3481e90,3401000b +3481e94,3e00008 +3481e9c,27bdffe8 +3481ea0,afa50000 +3481ea4,afa60004 +3481ea8,afa70008 +3481eac,afbf0010 +3481eb0,80a80000 +3481eb4,25090001 +3481eb8,15200005 +3481ec0,52025 +3481ec4,24a50008 +3481ec8,c015c0c +3481ecc,24c6fff8 +3481ed0,c102544 +3481ed8,8fbf0010 +3481edc,8fa70008 +3481ee0,8fa60004 +3481ee4,8fa50000 +3481ee8,8015c0c +3481eec,27bd0018 +3481ef0,ac4d066c +3481ef4,a0400141 +3481ef8,a0400144 +3481efc,340e00fe +3481f00,3e00008 +3481f04,a04e0142 +3481f08,a2250021 +3481f0c,3c108040 +3481f10,26100898 +3481f14,26100004 +3481f18,8e0a0000 +3481f1c,1140000b +3481f24,a7c02 +3481f28,1f17820 +3481f2c,3158ff00 +3481f30,18c202 +3481f34,17000003 +3481f38,315900ff +3481f3c,81ea0000 +3481f40,32ac825 +3481f44,81007c5 +3481f48,a1f90000 +3481f4c,3e00008 +3481f54,27bdfff0 +3481f58,afbf0008 +3481f5c,c1007e3 +3481f60,2264ffff +3481f64,344a0000 +3481f68,8fbf0008 +3481f6c,27bd0010 +3481f70,27bdfff0 +3481f74,afbf0008 +3481f78,c1007e3 +3481f7c,36440000 +3481f80,34500000 +3481f84,8fbf0008 +3481f88,27bd0010 +3481f8c,3c088040 +3481f90,25080025 +3481f94,91080000 +3481f98,15000007 +3481fa0,3c088012 +3481fa4,2508a5d0 +3481fa8,1044020 +3481fac,91020024 +3481fb0,10000007 +3481fb8,840c0 +3481fbc,3c028040 +3481fc0,24420034 +3481fc4,1024020 +3481fc8,1044020 +3481fcc,91020000 +3481fd0,3e00008 +3481fd8,8fb60030 +3481fdc,8fb70034 +3481fe0,8fbe0038 +3481fe4,3c088040 +3481fe8,25080025 +3481fec,a1000000 +3481ff0,3e00008 +3481ff8,3c0a8012 +3481ffc,8d4aa5d4 +3482000,15400006 +3482004,31780001 +3482008,17000007 +348200c,3c184230 +3482010,3c184250 +3482014,3e00008 +348201c,17000002 +3482020,3c184210 +3482024,3c184238 +3482028,3e00008 +3482030,906e13e2 +3482034,90620068 +3482038,34010059 +348203c,10410002 +3482040,34010fff +3482044,340100ff +3482048,3e00008 +3482050,3c048012 +3482054,2484a5d0 +3482058,908e13e2 +348205c,90820068 +3482060,34010059 +3482064,10410002 +3482068,34010fff +348206c,340100ff +3482070,3e00008 +3482078,3c08801f +348207c,25085de0 +3482080,8d01009c +3482084,14200003 +3482088,46025102 +348208c,3c083f80 +3482090,44882000 +3482094,3e00008 +348209c,ac800118 +34820a0,27ff0030 +34820a4,3e00008 +34820a8,ac8e0180 +34820ac,3c018040 +34820b0,8c210cbc +34820b4,10200008 +34820bc,81efa64c +34820c0,34180009 +34820c4,11f80002 +34820c8,34180001 +34820cc,34180000 +34820d0,3e00008 +34820d8,8defa670 +34820dc,31f80018 +34820e0,3e00008 +34820e8,3c018040 +34820ec,8c210cbc +34820f0,10200008 +34820f8,816ba64c +34820fc,340c0009 +3482100,116c0002 +3482104,340c0001 +3482108,340c0000 +348210c,3e00008 +3482114,8d6ba670 +3482118,316c0018 +348211c,3e00008 +3482124,3c018040 +3482128,8c210cbc +348212c,10200008 +3482134,3c098012 +3482138,812aa64c +348213c,340b0009 +3482140,114b0009 +3482144,34020000 +3482148,3e00008 348214c,34020002 -3482150,3e00008 -3482158,3c0a8040 -348215c,8d4a0cc0 -3482160,1140000a -3482164,34010001 -3482168,1141000b -348216c,34010002 -3482170,11410026 -3482174,34010003 -3482178,11410051 -348217c,34010004 -3482180,11410069 -3482184,34010005 -3482188,11410061 -348218c,34010000 -3482190,3e00008 -3482194,340a0000 -3482198,3401003f -348219c,415024 -34821a0,340f0000 -34821a4,31580001 -34821a8,13000002 -34821b0,25ef0001 -34821b4,31580002 -34821b8,13000002 -34821c0,25ef0001 -34821c4,31580004 -34821c8,13000002 -34821d0,25ef0001 -34821d4,31580008 -34821d8,13000002 -34821e0,25ef0001 -34821e4,31580010 -34821e8,13000002 -34821f0,25ef0001 -34821f4,31580020 -34821f8,13000002 -3482200,25ef0001 -3482204,10000043 -348220c,3c01001c -3482210,2421003f -3482214,415024 -3482218,340f0000 -348221c,31580001 -3482220,13000002 -3482228,25ef0001 -348222c,31580002 -3482230,13000002 -3482238,25ef0001 -348223c,31580004 -3482240,13000002 -3482248,25ef0001 -348224c,31580008 -3482250,13000002 -3482258,25ef0001 -348225c,31580010 -3482260,13000002 -3482268,25ef0001 -348226c,31580020 -3482270,13000002 -3482278,25ef0001 -348227c,3c180004 -3482280,158c024 -3482284,13000002 -348228c,25ef0001 -3482290,3c180008 -3482294,158c024 -3482298,13000002 -34822a0,25ef0001 -34822a4,3c180010 -34822a8,158c024 -34822ac,13000002 -34822b4,25ef0001 -34822b8,10000016 -34822c0,3c01001c -34822c4,415024 -34822c8,340f0000 -34822cc,3c180004 -34822d0,158c024 -34822d4,13000002 -34822dc,25ef0001 -34822e0,3c180008 -34822e4,158c024 -34822e8,13000002 -34822f0,25ef0001 -34822f4,3c180010 -34822f8,158c024 -34822fc,13000002 -3482304,25ef0001 -3482308,10000002 -3482310,84ef00d0 -3482314,34010000 -3482318,3c188040 -348231c,87180cd0 -3482320,3e00008 -3482324,1f8502a -3482328,34010018 -348232c,415024 -3482330,15410006 -3482338,90ef0084 -348233c,340a0012 -3482340,114f0002 -3482348,3401ffff -348234c,3e00008 -3482350,415024 -3482354,3c098040 -3482358,8d290cc4 -348235c,340a0001 -3482360,112a000e -3482364,340a0002 -3482368,112a0029 -348236c,340a0003 -3482370,112a0054 -3482374,340a0004 -3482378,112a0066 -3482380,340b0018 -3482384,4b5024 -3482388,156a0002 -348238c,34030000 -3482390,34030001 -3482394,3e00008 -348239c,3401003f -34823a0,415024 -34823a4,340c0000 -34823a8,314b0001 -34823ac,11600002 -34823b4,258c0001 -34823b8,314b0002 -34823bc,11600002 -34823c4,258c0001 -34823c8,314b0004 -34823cc,11600002 -34823d4,258c0001 -34823d8,314b0008 -34823dc,11600002 -34823e4,258c0001 -34823e8,314b0010 -34823ec,11600002 -34823f4,258c0001 -34823f8,314b0020 -34823fc,11600002 -3482404,258c0001 -3482408,10000043 -3482410,3c01001c -3482414,2421003f -3482418,415024 -348241c,340c0000 -3482420,314b0001 -3482424,11600002 -348242c,258c0001 -3482430,314b0002 -3482434,11600002 -348243c,258c0001 -3482440,314b0004 -3482444,11600002 -348244c,258c0001 -3482450,314b0008 -3482454,11600002 -348245c,258c0001 -3482460,314b0010 -3482464,11600002 -348246c,258c0001 -3482470,314b0020 -3482474,11600002 -348247c,258c0001 -3482480,3c0b0004 -3482484,14b5824 -3482488,11600002 -3482490,258c0001 -3482494,3c0b0008 -3482498,14b5824 -348249c,11600002 -34824a4,258c0001 -34824a8,3c0b0010 -34824ac,14b5824 -34824b0,11600002 -34824b8,258c0001 -34824bc,10000016 -34824c4,3c01001c -34824c8,415024 -34824cc,340c0000 -34824d0,3c0b0004 -34824d4,14b5824 -34824d8,11600002 -34824e0,258c0001 -34824e4,3c0b0008 -34824e8,14b5824 -34824ec,11600002 -34824f4,258c0001 -34824f8,3c0b0010 -34824fc,14b5824 -3482500,11600002 -3482508,258c0001 -348250c,10000002 -3482514,860c00d0 -3482518,34010000 -348251c,3c0b8040 -3482520,856b0cd2 -3482524,18b602a -3482528,15800002 -348252c,34030000 -3482530,34030001 -3482534,3e00008 -348253c,27bdffe4 -3482540,afb10014 -3482544,afbf0018 -3482548,3c038012 -348254c,2463a5d0 -3482550,860f001c -3482554,31f800ff -3482558,340100ff -348255c,17010004 -3482560,27110400 -3482564,90781397 -3482568,3318001f -348256c,27110430 -3482570,31e18000 -3482574,14200015 -348257c,3c088040 -3482580,8d080cc8 -3482584,1100000b -3482588,34010001 -348258c,11010003 -3482594,1000000d -348259c,806100a5 -34825a0,30210020 -34825a4,10200008 -34825ac,10000007 -34825b4,c01e6d1 -34825bc,34010008 -34825c0,10410002 -34825c8,34112053 -34825cc,a611010e -34825d0,8fbf0018 -34825d4,8fb10014 -34825d8,3e00008 -34825dc,27bd001c -34825e0,9059008a -34825e4,340900ff -34825e8,11390007 -34825f0,2b290031 -34825f4,15200005 -34825f8,34190000 -34825fc,34190001 -3482600,10000002 -3482608,34190000 -348260c,3e00008 -3482614,27bdfff0 -3482618,afa80000 -348261c,e7a20004 -3482620,e7a40008 -3482624,3c088040 -3482628,25080cd4 -348262c,91080000 -3482630,1100000f -3482634,340d0200 -3482638,3c08801e -348263c,2508aa30 -3482640,c5020028 -3482644,3c08c496 -3482648,44882000 -3482650,4604103c -3482658,45010004 -3482660,340d0200 -3482664,10000002 -348266c,340d00c0 -3482670,c7a40008 -3482674,c7a20004 -3482678,8fa80000 -348267c,3e00008 -3482680,27bd0010 -3482684,8e2a1d44 -3482688,314a0100 -348268c,1540000a -3482694,8e2a1d48 -3482698,314a0100 -348269c,15400007 -34826a4,8e211d48 -34826a8,342a0100 -34826ac,ae2a1d48 -34826b0,10000003 -34826b4,5024 -34826b8,240c0000 -34826bc,340a0001 -34826c0,3e00008 -34826c8,27bdfff0 -34826cc,afbf0000 -34826d0,c10103f -34826d8,8ece1c44 -34826dc,3c18db06 -34826e0,8fbf0000 -34826e4,3e00008 -34826e8,27bd0010 -34826f0,a21901e9 -34826f4,27bdffe0 -34826f8,afbf0004 -34826fc,afa40008 -3482700,afa5000c -3482704,afa80010 -3482708,e7aa0014 -348270c,e7b00018 -3482710,c100f58 -3482714,2002021 -3482718,8fbf0004 -348271c,8fa40008 -3482720,8fa5000c -3482724,8fa80010 -3482728,c7aa0014 -348272c,c7b00018 -3482730,3e00008 -3482734,27bd0020 -3482738,3f800000 -348273c,34080004 -3482740,3c09801d -3482744,252984a0 -3482748,8d291c44 -348274c,11200016 -3482754,3c018040 -3482758,c4362738 -3482760,46166302 -3482764,9127014f -3482768,1507000f -348276c,448f2000 -3482770,3c07803a -3482774,24e78bc0 -3482778,8d280664 -348277c,1507000a -3482784,3c088040 -3482788,25080cdf -348278c,91080000 -3482790,11000005 -3482798,3c083fc0 -348279c,4488b000 -34827a4,46166302 -34827ac,44056000 -34827b0,3e00008 -34827b8,3c188040 -34827bc,97180848 -34827c0,a5d80794 -34827c4,3c188040 -34827c8,9718084a -34827cc,a5d80796 +3482150,3c098012 +3482154,812aa673 +3482158,314a0038 +348215c,15400002 +3482160,34020000 +3482164,34020002 +3482168,3e00008 +3482170,3c0a8040 +3482174,8d4a0cc0 +3482178,1140000a +348217c,34010001 +3482180,1141000b +3482184,34010002 +3482188,11410026 +348218c,34010003 +3482190,11410051 +3482194,34010004 +3482198,11410069 +348219c,34010005 +34821a0,11410061 +34821a4,34010000 +34821a8,3e00008 +34821ac,340a0000 +34821b0,3401003f +34821b4,415024 +34821b8,340f0000 +34821bc,31580001 +34821c0,13000002 +34821c8,25ef0001 +34821cc,31580002 +34821d0,13000002 +34821d8,25ef0001 +34821dc,31580004 +34821e0,13000002 +34821e8,25ef0001 +34821ec,31580008 +34821f0,13000002 +34821f8,25ef0001 +34821fc,31580010 +3482200,13000002 +3482208,25ef0001 +348220c,31580020 +3482210,13000002 +3482218,25ef0001 +348221c,10000043 +3482224,3c01001c +3482228,2421003f +348222c,415024 +3482230,340f0000 +3482234,31580001 +3482238,13000002 +3482240,25ef0001 +3482244,31580002 +3482248,13000002 +3482250,25ef0001 +3482254,31580004 +3482258,13000002 +3482260,25ef0001 +3482264,31580008 +3482268,13000002 +3482270,25ef0001 +3482274,31580010 +3482278,13000002 +3482280,25ef0001 +3482284,31580020 +3482288,13000002 +3482290,25ef0001 +3482294,3c180004 +3482298,158c024 +348229c,13000002 +34822a4,25ef0001 +34822a8,3c180008 +34822ac,158c024 +34822b0,13000002 +34822b8,25ef0001 +34822bc,3c180010 +34822c0,158c024 +34822c4,13000002 +34822cc,25ef0001 +34822d0,10000016 +34822d8,3c01001c +34822dc,415024 +34822e0,340f0000 +34822e4,3c180004 +34822e8,158c024 +34822ec,13000002 +34822f4,25ef0001 +34822f8,3c180008 +34822fc,158c024 +3482300,13000002 +3482308,25ef0001 +348230c,3c180010 +3482310,158c024 +3482314,13000002 +348231c,25ef0001 +3482320,10000002 +3482328,84ef00d0 +348232c,34010000 +3482330,3c188040 +3482334,87180cd0 +3482338,3e00008 +348233c,1f8502a +3482340,34010018 +3482344,415024 +3482348,15410006 +3482350,90ef0084 +3482354,340a0012 +3482358,114f0002 +3482360,3401ffff +3482364,3e00008 +3482368,415024 +348236c,3c098040 +3482370,8d290cc4 +3482374,340a0001 +3482378,112a000e +348237c,340a0002 +3482380,112a0029 +3482384,340a0003 +3482388,112a0054 +348238c,340a0004 +3482390,112a0066 +3482398,340b0018 +348239c,4b5024 +34823a0,156a0002 +34823a4,34030000 +34823a8,34030001 +34823ac,3e00008 +34823b4,3401003f +34823b8,415024 +34823bc,340c0000 +34823c0,314b0001 +34823c4,11600002 +34823cc,258c0001 +34823d0,314b0002 +34823d4,11600002 +34823dc,258c0001 +34823e0,314b0004 +34823e4,11600002 +34823ec,258c0001 +34823f0,314b0008 +34823f4,11600002 +34823fc,258c0001 +3482400,314b0010 +3482404,11600002 +348240c,258c0001 +3482410,314b0020 +3482414,11600002 +348241c,258c0001 +3482420,10000043 +3482428,3c01001c +348242c,2421003f +3482430,415024 +3482434,340c0000 +3482438,314b0001 +348243c,11600002 +3482444,258c0001 +3482448,314b0002 +348244c,11600002 +3482454,258c0001 +3482458,314b0004 +348245c,11600002 +3482464,258c0001 +3482468,314b0008 +348246c,11600002 +3482474,258c0001 +3482478,314b0010 +348247c,11600002 +3482484,258c0001 +3482488,314b0020 +348248c,11600002 +3482494,258c0001 +3482498,3c0b0004 +348249c,14b5824 +34824a0,11600002 +34824a8,258c0001 +34824ac,3c0b0008 +34824b0,14b5824 +34824b4,11600002 +34824bc,258c0001 +34824c0,3c0b0010 +34824c4,14b5824 +34824c8,11600002 +34824d0,258c0001 +34824d4,10000016 +34824dc,3c01001c +34824e0,415024 +34824e4,340c0000 +34824e8,3c0b0004 +34824ec,14b5824 +34824f0,11600002 +34824f8,258c0001 +34824fc,3c0b0008 +3482500,14b5824 +3482504,11600002 +348250c,258c0001 +3482510,3c0b0010 +3482514,14b5824 +3482518,11600002 +3482520,258c0001 +3482524,10000002 +348252c,860c00d0 +3482530,34010000 +3482534,3c0b8040 +3482538,856b0cd2 +348253c,18b602a +3482540,15800002 +3482544,34030000 +3482548,34030001 +348254c,3e00008 +3482554,27bdffe4 +3482558,afb10014 +348255c,afbf0018 +3482560,3c038012 +3482564,2463a5d0 +3482568,860f001c +348256c,31f800ff +3482570,340100ff +3482574,17010004 +3482578,27110400 +348257c,90781397 +3482580,3318001f +3482584,27110430 +3482588,31e18000 +348258c,14200015 +3482594,3c088040 +3482598,8d080cc8 +348259c,1100000b +34825a0,34010001 +34825a4,11010003 +34825ac,1000000d +34825b4,806100a5 +34825b8,30210020 +34825bc,10200008 +34825c4,10000007 +34825cc,c01e6d1 +34825d4,34010008 +34825d8,10410002 +34825e0,34112053 +34825e4,a611010e +34825e8,8fbf0018 +34825ec,8fb10014 +34825f0,3e00008 +34825f4,27bd001c +34825f8,9059008a +34825fc,340900ff +3482600,11390007 +3482608,2b290031 +348260c,15200005 +3482610,34190000 +3482614,34190001 +3482618,10000002 +3482620,34190000 +3482624,3e00008 +348262c,27bdfff0 +3482630,afa80000 +3482634,e7a20004 +3482638,e7a40008 +348263c,3c088040 +3482640,25080cd4 +3482644,91080000 +3482648,1100000f +348264c,340d0200 +3482650,3c08801e +3482654,2508aa30 +3482658,c5020028 +348265c,3c08c496 +3482660,44882000 +3482668,4604103c +3482670,45010004 +3482678,340d0200 +348267c,10000002 +3482684,340d00c0 +3482688,c7a40008 +348268c,c7a20004 +3482690,8fa80000 +3482694,3e00008 +3482698,27bd0010 +348269c,8e2a1d44 +34826a0,314a0100 +34826a4,1540000a +34826ac,8e2a1d48 +34826b0,314a0100 +34826b4,15400007 +34826bc,8e211d48 +34826c0,342a0100 +34826c4,ae2a1d48 +34826c8,10000003 +34826cc,5024 +34826d0,240c0000 +34826d4,340a0001 +34826d8,3e00008 +34826e0,27bdfff0 +34826e4,afbf0000 +34826e8,c101047 +34826f0,8ece1c44 +34826f4,3c18db06 +34826f8,8fbf0000 +34826fc,3e00008 +3482700,27bd0010 +3482708,a21901e9 +348270c,27bdffe0 +3482710,afbf0004 +3482714,afa40008 +3482718,afa5000c +348271c,afa80010 +3482720,e7aa0014 +3482724,e7b00018 +3482728,c100f60 +348272c,2002021 +3482730,8fbf0004 +3482734,8fa40008 +3482738,8fa5000c +348273c,8fa80010 +3482740,c7aa0014 +3482744,c7b00018 +3482748,3e00008 +348274c,27bd0020 +3482750,3f800000 +3482754,34080004 +3482758,3c09801d +348275c,252984a0 +3482760,8d291c44 +3482764,11200016 +348276c,3c018040 +3482770,c4362750 +3482778,46166302 +348277c,9127014f +3482780,1507000f +3482784,448f2000 +3482788,3c07803a +348278c,24e78bc0 +3482790,8d280664 +3482794,1507000a +348279c,3c088040 +34827a0,25080cdf +34827a4,91080000 +34827a8,11000005 +34827b0,3c083fc0 +34827b4,4488b000 +34827bc,46166302 +34827c4,44056000 +34827c8,3e00008 34827d0,3c188040 -34827d4,9718084c -34827d8,a5d80798 -34827dc,ec021 -34827e0,3e00008 -34827e8,27bdffe8 -34827ec,afbf0004 -34827f0,afb00008 -34827f4,808021 -34827f8,3c048040 -34827fc,9484086c -3482800,c100a14 -3482808,ae02022c -348280c,3c048040 -3482810,9484086e -3482814,c100a14 -348281c,ae020230 -3482820,3c048040 -3482824,94840870 -3482828,c100a14 -3482830,ae020234 -3482834,c100a14 -3482838,340400ff -348283c,ae020238 -3482840,8fbf0004 -3482844,8fb00008 -3482848,3e00008 -348284c,27bd0018 -3482850,28810020 -3482854,14200005 -3482858,288100e0 -348285c,10200003 -3482864,10000002 -3482868,861023 -348286c,851023 -3482870,3e00008 -3482874,304200ff -348287c,2b010192 -3482880,10200004 -3482888,3c088010 -348288c,3e00008 -3482890,25088ff8 -3482894,3c088040 -3482898,25080c9c -348289c,3e00008 -34828a0,2718fe6d -34828a4,8e1821 -34828a8,28c10192 -34828ac,10200004 -34828b4,3c198010 -34828b8,3e00008 -34828bc,27398ff8 -34828c0,3c198040 -34828c4,27390c9c -34828c8,3e00008 -34828cc,24c6fe6d -34828d0,86190000 -34828d4,8e050004 -34828d8,26040008 -34828dc,194023 -34828e0,29010192 -34828e4,10200004 -34828ec,3c138010 -34828f0,3e00008 -34828f4,26738ff8 -34828f8,3c138040 -34828fc,26730c9c -3482900,3e00008 -3482904,2508fe6d -3482908,8e040010 -348290c,28610192 -3482910,10200004 -3482918,3c138010 -348291c,8100a4c -3482920,26738ff8 -3482924,3c138040 -3482928,26730c9c -348292c,2463fe6d -3482930,378c0 -3482934,26f1021 -3482938,3e00008 -348293c,8c450000 -3482940,8fa40020 -3482944,3c088040 -3482948,81080cd7 -348294c,24060050 -3482950,1100000b -3482958,84860014 -348295c,50c00008 -3482960,24060050 -3482964,80a81d44 -3482968,c85824 -348296c,55600004 -3482970,24060050 -3482974,1064025 -3482978,a0a81d44 -348297c,24c60014 -3482980,3e00008 -3482988,27bdfff0 -348298c,afbf0004 -3482990,afa80008 -3482994,afa9000c -3482998,3c088040 -348299c,81080cd7 -34829a0,11000009 -34829a8,86080014 -34829ac,11000006 -34829b4,82291d44 -34829b8,1094024 -34829bc,24020001 -34829c0,11000003 -34829c8,c01c6a5 -34829d0,8fbf0004 -34829d4,8fa80008 -34829d8,8fa9000c -34829dc,27bd0010 -34829e0,3e00008 -34829e8,8fb00034 -34829ec,848800b4 -34829f0,11000002 -34829f8,a48000b0 -34829fc,3e00008 -3482a04,1b9fcd5 -3482a08,fb251ad2 -3482a0c,f2dc -3482a10,8022 -3482a14,23bdffec -3482a18,afbf0010 -3482a1c,9608001c -3482a20,31088000 -3482a24,1100000f -3482a2c,3c038012 -3482a30,2463a5d0 -3482a34,946d0edc -3482a38,31ad0400 -3482a3c,11a0000b -3482a44,8c6e0004 -3482a48,15c00008 -3482a50,948d1d2a -3482a54,35ae0001 -3482a58,a48e1d2a -3482a5c,10000003 -3482a64,c037385 -3482a6c,8fbf0010 -3482a70,23bd0014 -3482a74,3e00008 -3482a7c,8c6e0004 -3482a80,3e00008 -3482a88,8488001c -3482a8c,34010002 -3482a90,15010015 -3482a98,3c028012 -3482a9c,2442a5d0 -3482aa0,8c4b0004 -3482aa4,15600012 -3482aac,3c098040 -3482ab0,25292af8 -3482ab4,ac890154 -3482ab8,27bdffe0 -3482abc,afbf0010 -3482ac0,afa50014 -3482ac4,8fa60014 -3482ac8,3c058040 -3482acc,24a52a04 -3482ad0,c009571 -3482ad4,24c41c24 -3482ad8,8fbf0010 -3482adc,27bd0020 -3482ae0,10000003 -3482ae8,afa40000 -3482aec,afa50004 -3482af0,3e00008 -3482af8,27bdffd8 -3482afc,afb00020 -3482b00,afbf0024 -3482b04,afa5002c -3482b08,808025 -3482b0c,c600015c -3482b10,3c01c4a4 -3482b14,24212000 -3482b18,44811000 -3482b1c,3c028012 -3482b20,2442a5d0 -3482b24,944b0edc -3482b28,316c0400 -3482b2c,944b0ee0 -3482b30,11800031 -3482b38,94ad1d2a -3482b3c,31ae0001 -3482b40,11c00006 -3482b48,31adfffe -3482b4c,a4ad1d2a -3482b50,34010200 -3482b54,1615826 -3482b58,a44b0ee0 -3482b5c,316c0200 -3482b60,1180000b -3482b68,34010000 -3482b6c,44812000 -3482b70,3c064080 -3482b74,44863000 -3482b7c,46060200 -3482b80,4604403c -3482b88,10000009 -3482b90,3c01c42a -3482b94,44812000 -3482b98,3c06c080 -3482b9c,44863000 -3482ba4,46060200 -3482ba8,4608203c -3482bb0,45000005 -3482bb8,46004106 -3482bbc,c008c42 -3482bc0,3405205e -3482bc4,2002025 -3482bc8,e604015c -3482bcc,46022100 -3482bd0,e6040028 -3482bd4,4600240d -3482bd8,44098000 -3482bdc,8fa2002c -3482be0,8c5807c0 -3482be4,8f190028 -3482be8,240ffb57 -3482bec,a72f0012 -3482bf0,a7290022 -3482bf4,a7290032 -3482bf8,8fbf0024 -3482bfc,8fb00020 -3482c00,27bd0028 -3482c04,3e00008 -3482c0c,ac20753c -3482c10,3c018040 -3482c14,90210cdc -3482c18,10200008 -3482c1c,3c01801d -3482c20,242184a0 -3482c24,94211d2c -3482c28,302100c0 -3482c2c,14200003 -3482c34,801ce4c -3482c3c,801ce45 -3482c44,3c088012 -3482c48,2508a5d0 -3482c4c,8d0a0004 -3482c50,11400006 -3482c54,8d090000 -3482c58,3401003b -3482c5c,15210008 -3482c64,3c0bc47a -3482c68,ac8b0028 -3482c6c,3401016d -3482c70,15210003 -3482c78,3c0bc47a -3482c7c,ac8b0028 -3482c80,3e00008 -3482c84,340e0001 -3482c8c,3c0f8040 -3482c90,25ef2c88 -3482c94,81ef0000 -3482c98,3c188040 -3482c9c,27182c89 -3482ca0,83180000 -3482ca4,1f87820 -3482ca8,5e00007 -3482cac,34010003 -3482cb0,1e1082a -3482cb4,14200002 -3482cbc,340f0008 -3482cc0,10000003 -3482cc4,1f08004 -3482cc8,f7822 -3482ccc,1f08007 -3482cd0,90af003d -3482cd4,11e00004 -3482cdc,108043 -3482ce0,108400 -3482ce4,108403 -3482ce8,3e00008 -3482cf4,4f1021 -3482cf8,3c098040 -3482cfc,81292cf0 -3482d00,11200008 -3482d04,8042a65c -3482d08,3c0a801d -3482d0c,254a84a0 -3482d10,8d491d44 -3482d14,31210002 -3482d18,14200002 -3482d1c,3402000a -3482d20,34020000 -3482d24,3e00008 -3482d2c,594021 -3482d30,3c0a8040 -3482d34,814a2cf0 -3482d38,11400002 -3482d3c,8109008c -3482d40,34090000 -3482d44,3e00008 -3482d4c,1ee7821 -3482d50,3c0a8040 -3482d54,814a2cf0 -3482d58,11400002 -3482d5c,81efa65c -3482d60,340f0000 -3482d64,3e00008 -3482d6c,3c098040 -3482d70,81292cf0 -3482d74,11200005 -3482d78,3c0a801d -3482d7c,254a84a0 -3482d80,8d491d44 -3482d84,35290002 -3482d88,ad491d44 -3482d8c,3e00008 -3482d90,afa50024 -3482e58,ff00 -3482e5c,3c0a8040 -3482e60,254a2e5a -3482e64,914b0000 -3482e68,340c00ff -3482e6c,a14c0000 -3482e70,34087fff -3482e74,15c80006 -3482e78,3c098040 -3482e7c,25292e18 -3482e80,116c000c -3482e84,b5840 -3482e88,12b4821 -3482e8c,952e0000 -3482e90,27bdfff0 -3482e94,afbf0004 -3482e98,afa40008 -3482e9c,c100bc1 -3482ea0,1c02021 -3482ea4,407021 -3482ea8,8fbf0004 -3482eac,8fa40008 -3482eb0,27bd0010 -3482eb4,3e00008 -3482eb8,a42e1e1a -3482ebc,9608001c -3482ec0,84303 -3482ec4,3108000f -3482ec8,29090002 -3482ecc,1520000b -3482ed4,960d0018 -3482ed8,27bdfff0 -3482edc,afbf0004 -3482ee0,afa40008 -3482ee4,c100bc1 -3482ee8,1a02021 -3482eec,406821 -3482ef0,8fbf0004 -3482ef4,8fa40008 -3482ef8,27bd0010 -3482efc,3e00008 -3482f00,270821 -3482f04,34087ff9 -3482f08,884022 -3482f0c,501000f -3482f10,34081000 -3482f14,884022 -3482f18,500000c -3482f1c,3c098012 -3482f20,2529a5d0 -3482f24,3c0a8040 -3482f28,254a2d94 -3482f2c,3c0b8040 -3482f30,256b2e5a -3482f34,a1680000 -3482f38,84080 -3482f3c,1485021 -3482f40,95440000 -3482f44,91480002 -3482f48,a1281397 -3482f4c,3e00008 -3482f50,801021 -3482f54,8c6d0004 -3482f58,3c0e8040 -3482f5c,81ce0cdd -3482f60,1ae7825 -3482f64,11e0000a -3482f6c,11c00006 -3482f74,946e0ed4 -3482f78,31ce0010 -3482f7c,1cd7025 -3482f80,11c00003 -3482f88,3e00008 -3482f8c,340f0001 -3482f90,3e00008 -3482f94,340f0000 -3482f98,1000 -3482f9c,4800 -3482fa4,7000 -3482fa8,4800 -3482fb0,8040f310 -3482fb4,42890 -3482fb8,34191000 -3482fbc,340a4800 -3482fc0,340d0000 -3482fc4,340c7000 -3482fc8,340e4800 -3482fcc,3e00008 -3482fd0,34180000 -3482fd8,3c088012 -3482fdc,2508a5d0 -3482fe0,95090eda -3482fe4,31290008 -3482fe8,15200008 -3482fec,8d090004 -3482ff0,15200004 -3482ff4,3c098040 -3482ff8,81292fd4 -3482ffc,15200003 -3483004,3e00008 -3483008,34090000 -348300c,3e00008 -3483010,34090001 -3483014,3c08801d -3483018,25082578 -348301c,3409006c -3483020,8d0a6300 -3483024,112a0009 -3483028,340a0001 -348302c,340b0036 -3483030,ad0a6300 -3483034,a10b6304 -3483038,240cffff -348303c,810e63e7 -3483040,15cc0002 -3483044,340d0002 -3483048,a10d63e7 -348304c,3e00008 -3483050,24060022 -348305c,afb0003c -3483060,27bdffe0 -3483064,afbf0014 -3483068,3c098040 -348306c,25293054 -3483070,812a0000 -3483074,1540000a -348307c,8e4b0028 -3483080,3c0c4370 -3483084,16c082a -3483088,14200005 -348308c,340d0001 -3483090,a12d0000 -3483094,3404001b -3483098,c032a9c -34830a0,8fbf0014 -34830a4,3e00008 -34830a8,27bd0020 -34830ac,8e721c44 -34830b0,240e0003 -34830b4,a22e05b0 -34830b8,926f07af -34830bc,4406b000 -34830c0,4407a000 -34830c4,3e00008 -34830cc,90580000 -34830d0,27bdffd0 -34830d4,afbf0014 -34830d8,afa40018 -34830dc,afa5001c -34830e0,afa60020 -34830e4,afa70024 -34830e8,3c048040 -34830ec,80843054 -34830f0,1080001b -34830f8,3c048040 -34830fc,8c843058 -3483100,2885001e -3483104,14a00016 -348310c,28850050 -3483110,10a0000c -3483118,3c043d4d -348311c,2484cccd -3483120,ae4404d0 -3483124,2402025 -3483128,248404c8 -348312c,3c05437f -3483130,3c063f80 -3483134,3c074120 -3483138,c0190a0 -3483140,10000007 -3483144,2402025 -3483148,248404c8 -348314c,34050000 -3483150,3c063f80 -3483154,3c074120 -3483158,c0190a0 -3483160,8fbf0014 -3483164,8fa40018 -3483168,8fa5001c -348316c,8fa60020 -3483170,8fa70024 -3483174,3e00008 -3483178,27bd0030 -348317c,860800b6 -3483180,25084000 -3483184,a60800b6 -3483188,34080001 -348318c,a20805e8 -3483190,a2000554 -3483194,8e090004 -3483198,240afffe -348319c,1495824 -34831a0,ae0b0004 -34831a4,3c088040 -34831a8,250831ec -34831ac,3e00008 -34831b0,ae08013c -34831b4,860800b6 -34831b8,2508c000 -34831bc,a60800b6 -34831c0,34080001 -34831c4,a20805e8 -34831c8,a2000554 -34831cc,8e090004 -34831d0,240afffe -34831d4,1495824 -34831d8,ae0b0004 -34831dc,3c088040 -34831e0,250831ec -34831e4,3e00008 -34831e8,ae08013c -34831ec,27bdffd0 -34831f0,afbf0014 -34831f4,afa40018 -34831f8,afa5001c -34831fc,34080001 -3483200,a0880554 -3483204,8488001c -3483208,11000006 -3483210,3c048040 -3483214,8c843058 -3483218,24850001 -348321c,3c018040 -3483220,ac253058 -3483224,3c048040 -3483228,8c843058 -348322c,34050003 -3483230,14850009 -3483238,8fa40018 -348323c,8488001c -3483240,34090001 -3483244,11090002 -3483248,240539b0 -348324c,240539b1 -3483250,c008bf4 -3483258,28850028 -348325c,14a0001a -3483264,8fa40018 -3483268,24840028 -348326c,3c0543c8 -3483270,3c063f80 -3483274,3c0740c0 -3483278,c0190a0 -3483280,8fa40018 -3483284,24840558 -3483288,c023270 -3483290,8fa40018 -3483294,c008bf4 -3483298,2405311f -348329c,3c048040 -34832a0,8c843058 -34832a4,34080061 -34832a8,14880007 -34832b0,8fa40018 -34832b4,8fa5001c -34832b8,8c8b0138 -34832bc,8d6b0010 -34832c0,256913ec -34832c4,ac89013c -34832c8,8fbf0014 -34832cc,3e00008 -34832d0,27bd0030 -34832d4,3c01c416 -34832d8,44816000 -34832dc,3e00008 -34832e0,3025 -34832e4,3c014416 -34832e8,44816000 -34832ec,3e00008 -34832f0,3025 -34832f4,afa40018 -34832f8,3c08801e -34832fc,2508aa30 -3483300,3e00008 -3483304,ad000678 -3483308,27bdffe8 -348330c,afaa0004 -3483310,846f4a2a -3483314,340a0002 -3483318,15ea0002 -348331c,340a0001 -3483320,a46a4a2a -3483324,846f4a2a -3483328,8faa0004 -348332c,3e00008 -3483330,27bd0018 -3483334,27bdffe8 -3483338,afaa0004 -348333c,846e4a2a -3483340,340a0002 -3483344,15ca0002 -3483348,340a0003 -348334c,a46a4a2a -3483350,846e4a2a -3483354,8faa0004 -3483358,3e00008 -348335c,27bd0018 -3483360,27bdffe8 -3483364,afaa0004 -3483368,85034a2a -348336c,340a0002 -3483370,146a0002 -3483374,340a0001 -3483378,a50a4a2a -348337c,85034a2a -3483380,8faa0004 -3483384,3e00008 -3483388,27bd0018 -348338c,27bdffe8 -3483390,afaa0004 +34827d4,97180848 +34827d8,a5d80794 +34827dc,3c188040 +34827e0,9718084a +34827e4,a5d80796 +34827e8,3c188040 +34827ec,9718084c +34827f0,a5d80798 +34827f4,ec021 +34827f8,3e00008 +3482800,27bdffe8 +3482804,afbf0004 +3482808,afb00008 +348280c,808021 +3482810,3c048040 +3482814,9484086c +3482818,c100a1a +3482820,ae02022c +3482824,3c048040 +3482828,9484086e +348282c,c100a1a +3482834,ae020230 +3482838,3c048040 +348283c,94840870 +3482840,c100a1a +3482848,ae020234 +348284c,c100a1a +3482850,340400ff +3482854,ae020238 +3482858,8fbf0004 +348285c,8fb00008 +3482860,3e00008 +3482864,27bd0018 +3482868,28810020 +348286c,14200005 +3482870,288100e0 +3482874,10200003 +348287c,10000002 +3482880,861023 +3482884,851023 +3482888,3e00008 +348288c,304200ff +3482894,2b010192 +3482898,10200004 +34828a0,3c088010 +34828a4,3e00008 +34828a8,25088ff8 +34828ac,3c088040 +34828b0,25080c9c +34828b4,3e00008 +34828b8,2718fe6d +34828bc,8e1821 +34828c0,28c10192 +34828c4,10200004 +34828cc,3c198010 +34828d0,3e00008 +34828d4,27398ff8 +34828d8,3c198040 +34828dc,27390c9c +34828e0,3e00008 +34828e4,24c6fe6d +34828e8,86190000 +34828ec,8e050004 +34828f0,26040008 +34828f4,194023 +34828f8,29010192 +34828fc,10200004 +3482904,3c138010 +3482908,3e00008 +348290c,26738ff8 +3482910,3c138040 +3482914,26730c9c +3482918,3e00008 +348291c,2508fe6d +3482920,8e040010 +3482924,28610192 +3482928,10200004 +3482930,3c138010 +3482934,8100a52 +3482938,26738ff8 +348293c,3c138040 +3482940,26730c9c +3482944,2463fe6d +3482948,378c0 +348294c,26f1021 +3482950,3e00008 +3482954,8c450000 +3482958,8fa40020 +348295c,3c088040 +3482960,81080cd7 +3482964,24060050 +3482968,1100000b +3482970,84860014 +3482974,50c00008 +3482978,24060050 +348297c,80a81d44 +3482980,c85824 +3482984,55600004 +3482988,24060050 +348298c,1064025 +3482990,a0a81d44 +3482994,24c60014 +3482998,3e00008 +34829a0,27bdfff0 +34829a4,afbf0004 +34829a8,afa80008 +34829ac,afa9000c +34829b0,3c088040 +34829b4,81080cd7 +34829b8,11000009 +34829c0,86080014 +34829c4,11000006 +34829cc,82291d44 +34829d0,1094024 +34829d4,24020001 +34829d8,11000003 +34829e0,c01c6a5 +34829e8,8fbf0004 +34829ec,8fa80008 +34829f0,8fa9000c +34829f4,27bd0010 +34829f8,3e00008 +3482a00,8fb00034 +3482a04,848800b4 +3482a08,11000002 +3482a10,a48000b0 +3482a14,3e00008 +3482a1c,1b9fcd5 +3482a20,fb251ad2 +3482a24,f2dc +3482a28,8022 +3482a2c,23bdffec +3482a30,afbf0010 +3482a34,9608001c +3482a38,31088000 +3482a3c,1100000f +3482a44,3c038012 +3482a48,2463a5d0 +3482a4c,946d0edc +3482a50,31ad0400 +3482a54,11a0000b +3482a5c,8c6e0004 +3482a60,15c00008 +3482a68,948d1d2a +3482a6c,35ae0001 +3482a70,a48e1d2a +3482a74,10000003 +3482a7c,c037385 +3482a84,8fbf0010 +3482a88,23bd0014 +3482a8c,3e00008 +3482a94,8c6e0004 +3482a98,3e00008 +3482aa0,8488001c +3482aa4,34010002 +3482aa8,15010015 +3482ab0,3c028012 +3482ab4,2442a5d0 +3482ab8,8c4b0004 +3482abc,15600012 +3482ac4,3c098040 +3482ac8,25292b10 +3482acc,ac890154 +3482ad0,27bdffe0 +3482ad4,afbf0010 +3482ad8,afa50014 +3482adc,8fa60014 +3482ae0,3c058040 +3482ae4,24a52a1c +3482ae8,c009571 +3482aec,24c41c24 +3482af0,8fbf0010 +3482af4,27bd0020 +3482af8,10000003 +3482b00,afa40000 +3482b04,afa50004 +3482b08,3e00008 +3482b10,27bdffd8 +3482b14,afb00020 +3482b18,afbf0024 +3482b1c,afa5002c +3482b20,808025 +3482b24,c600015c +3482b28,3c01c4a4 +3482b2c,24212000 +3482b30,44811000 +3482b34,3c028012 +3482b38,2442a5d0 +3482b3c,944b0edc +3482b40,316c0400 +3482b44,944b0ee0 +3482b48,11800031 +3482b50,94ad1d2a +3482b54,31ae0001 +3482b58,11c00006 +3482b60,31adfffe +3482b64,a4ad1d2a +3482b68,34010200 +3482b6c,1615826 +3482b70,a44b0ee0 +3482b74,316c0200 +3482b78,1180000b +3482b80,34010000 +3482b84,44812000 +3482b88,3c064080 +3482b8c,44863000 +3482b94,46060200 +3482b98,4604403c +3482ba0,10000009 +3482ba8,3c01c42a +3482bac,44812000 +3482bb0,3c06c080 +3482bb4,44863000 +3482bbc,46060200 +3482bc0,4608203c +3482bc8,45000005 +3482bd0,46004106 +3482bd4,c008c42 +3482bd8,3405205e +3482bdc,2002025 +3482be0,e604015c +3482be4,46022100 +3482be8,e6040028 +3482bec,4600240d +3482bf0,44098000 +3482bf4,8fa2002c +3482bf8,8c5807c0 +3482bfc,8f190028 +3482c00,240ffb57 +3482c04,a72f0012 +3482c08,a7290022 +3482c0c,a7290032 +3482c10,8fbf0024 +3482c14,8fb00020 +3482c18,27bd0028 +3482c1c,3e00008 +3482c24,ac20753c +3482c28,3c018040 +3482c2c,90210cdc +3482c30,10200008 +3482c34,3c01801d +3482c38,242184a0 +3482c3c,94211d2c +3482c40,302100c0 +3482c44,14200003 +3482c4c,801ce4c +3482c54,801ce45 +3482c5c,3c088012 +3482c60,2508a5d0 +3482c64,8d0a0004 +3482c68,11400006 +3482c6c,8d090000 +3482c70,3401003b +3482c74,15210008 +3482c7c,3c0bc47a +3482c80,ac8b0028 +3482c84,3401016d +3482c88,15210003 +3482c90,3c0bc47a +3482c94,ac8b0028 +3482c98,3e00008 +3482c9c,340e0001 +3482ca4,3c0f8040 +3482ca8,25ef2ca0 +3482cac,81ef0000 +3482cb0,3c188040 +3482cb4,27182ca1 +3482cb8,83180000 +3482cbc,1f87820 +3482cc0,5e00007 +3482cc4,34010003 +3482cc8,1e1082a +3482ccc,14200002 +3482cd4,340f0008 +3482cd8,10000003 +3482cdc,1f08004 +3482ce0,f7822 +3482ce4,1f08007 +3482ce8,90af003d +3482cec,11e00004 +3482cf4,108043 +3482cf8,108400 +3482cfc,108403 +3482d00,3e00008 +3482d0c,4f1021 +3482d10,3c098040 +3482d14,81292d08 +3482d18,11200008 +3482d1c,8042a65c +3482d20,3c0a801d +3482d24,254a84a0 +3482d28,8d491d44 +3482d2c,31210002 +3482d30,14200002 +3482d34,3402000a +3482d38,34020000 +3482d3c,3e00008 +3482d44,594021 +3482d48,3c0a8040 +3482d4c,814a2d08 +3482d50,11400002 +3482d54,8109008c +3482d58,34090000 +3482d5c,3e00008 +3482d64,1ee7821 +3482d68,3c0a8040 +3482d6c,814a2d08 +3482d70,11400002 +3482d74,81efa65c +3482d78,340f0000 +3482d7c,3e00008 +3482d84,3c098040 +3482d88,81292d08 +3482d8c,11200005 +3482d90,3c0a801d +3482d94,254a84a0 +3482d98,8d491d44 +3482d9c,35290002 +3482da0,ad491d44 +3482da4,3e00008 +3482da8,afa50024 +3482e70,ff00 +3482e74,3c0a8040 +3482e78,254a2e72 +3482e7c,914b0000 +3482e80,340c00ff +3482e84,a14c0000 +3482e88,34087fff +3482e8c,15c80006 +3482e90,3c098040 +3482e94,25292e30 +3482e98,116c000c +3482e9c,b5840 +3482ea0,12b4821 +3482ea4,952e0000 +3482ea8,27bdfff0 +3482eac,afbf0004 +3482eb0,afa40008 +3482eb4,c100bc7 +3482eb8,1c02021 +3482ebc,407021 +3482ec0,8fbf0004 +3482ec4,8fa40008 +3482ec8,27bd0010 +3482ecc,3e00008 +3482ed0,a42e1e1a +3482ed4,9608001c +3482ed8,84303 +3482edc,3108000f +3482ee0,29090002 +3482ee4,1520000b +3482eec,960d0018 +3482ef0,27bdfff0 +3482ef4,afbf0004 +3482ef8,afa40008 +3482efc,c100bc7 +3482f00,1a02021 +3482f04,406821 +3482f08,8fbf0004 +3482f0c,8fa40008 +3482f10,27bd0010 +3482f14,3e00008 +3482f18,270821 +3482f1c,34087ff9 +3482f20,884022 +3482f24,501000f +3482f28,34081000 +3482f2c,884022 +3482f30,500000c +3482f34,3c098012 +3482f38,2529a5d0 +3482f3c,3c0a8040 +3482f40,254a2dac +3482f44,3c0b8040 +3482f48,256b2e72 +3482f4c,a1680000 +3482f50,84080 +3482f54,1485021 +3482f58,95440000 +3482f5c,91480002 +3482f60,a1281397 +3482f64,3e00008 +3482f68,801021 +3482f6c,8c6d0004 +3482f70,3c0e8040 +3482f74,81ce0cdd +3482f78,1ae7825 +3482f7c,11e0000a +3482f84,11c00006 +3482f8c,946e0ed4 +3482f90,31ce0010 +3482f94,1cd7025 +3482f98,11c00003 +3482fa0,3e00008 +3482fa4,340f0001 +3482fa8,3e00008 +3482fac,340f0000 +3482fb0,1000 +3482fb4,4800 +3482fbc,7000 +3482fc0,4800 +3482fc8,8040f330 +3482fcc,42890 +3482fd0,34191000 +3482fd4,340a4800 +3482fd8,340d0000 +3482fdc,340c7000 +3482fe0,340e4800 +3482fe4,3e00008 +3482fe8,34180000 +3482ff0,3c088012 +3482ff4,2508a5d0 +3482ff8,95090eda +3482ffc,31290008 +3483000,15200008 +3483004,8d090004 +3483008,15200004 +348300c,3c098040 +3483010,81292fec +3483014,15200003 +348301c,3e00008 +3483020,34090000 +3483024,3e00008 +3483028,34090001 +348302c,3c08801d +3483030,25082578 +3483034,3409006c +3483038,8d0a6300 +348303c,112a0009 +3483040,340a0001 +3483044,340b0036 +3483048,ad0a6300 +348304c,a10b6304 +3483050,240cffff +3483054,810e63e7 +3483058,15cc0002 +348305c,340d0002 +3483060,a10d63e7 +3483064,3e00008 +3483068,24060022 +3483074,afb0003c +3483078,27bdffe0 +348307c,afbf0014 +3483080,3c098040 +3483084,2529306c +3483088,812a0000 +348308c,1540000a +3483094,8e4b0028 +3483098,3c0c4370 +348309c,16c082a +34830a0,14200005 +34830a4,340d0001 +34830a8,a12d0000 +34830ac,3404001b +34830b0,c032a9c +34830b8,8fbf0014 +34830bc,3e00008 +34830c0,27bd0020 +34830c4,8e721c44 +34830c8,240e0003 +34830cc,a22e05b0 +34830d0,926f07af +34830d4,4406b000 +34830d8,4407a000 +34830dc,3e00008 +34830e4,90580000 +34830e8,27bdffd0 +34830ec,afbf0014 +34830f0,afa40018 +34830f4,afa5001c +34830f8,afa60020 +34830fc,afa70024 +3483100,3c048040 +3483104,8084306c +3483108,1080001b +3483110,3c048040 +3483114,8c843070 +3483118,2885001e +348311c,14a00016 +3483124,28850050 +3483128,10a0000c +3483130,3c043d4d +3483134,2484cccd +3483138,ae4404d0 +348313c,2402025 +3483140,248404c8 +3483144,3c05437f +3483148,3c063f80 +348314c,3c074120 +3483150,c0190a0 +3483158,10000007 +348315c,2402025 +3483160,248404c8 +3483164,34050000 +3483168,3c063f80 +348316c,3c074120 +3483170,c0190a0 +3483178,8fbf0014 +348317c,8fa40018 +3483180,8fa5001c +3483184,8fa60020 +3483188,8fa70024 +348318c,3e00008 +3483190,27bd0030 +3483194,860800b6 +3483198,25084000 +348319c,a60800b6 +34831a0,34080001 +34831a4,a20805e8 +34831a8,a2000554 +34831ac,8e090004 +34831b0,240afffe +34831b4,1495824 +34831b8,ae0b0004 +34831bc,3c088040 +34831c0,25083204 +34831c4,3e00008 +34831c8,ae08013c +34831cc,860800b6 +34831d0,2508c000 +34831d4,a60800b6 +34831d8,34080001 +34831dc,a20805e8 +34831e0,a2000554 +34831e4,8e090004 +34831e8,240afffe +34831ec,1495824 +34831f0,ae0b0004 +34831f4,3c088040 +34831f8,25083204 +34831fc,3e00008 +3483200,ae08013c +3483204,27bdffd0 +3483208,afbf0014 +348320c,afa40018 +3483210,afa5001c +3483214,34080001 +3483218,a0880554 +348321c,8488001c +3483220,11000006 +3483228,3c048040 +348322c,8c843070 +3483230,24850001 +3483234,3c018040 +3483238,ac253070 +348323c,3c048040 +3483240,8c843070 +3483244,34050003 +3483248,14850009 +3483250,8fa40018 +3483254,8488001c +3483258,34090001 +348325c,11090002 +3483260,240539b0 +3483264,240539b1 +3483268,c008bf4 +3483270,28850028 +3483274,14a0001a +348327c,8fa40018 +3483280,24840028 +3483284,3c0543c8 +3483288,3c063f80 +348328c,3c0740c0 +3483290,c0190a0 +3483298,8fa40018 +348329c,24840558 +34832a0,c023270 +34832a8,8fa40018 +34832ac,c008bf4 +34832b0,2405311f +34832b4,3c048040 +34832b8,8c843070 +34832bc,34080061 +34832c0,14880007 +34832c8,8fa40018 +34832cc,8fa5001c +34832d0,8c8b0138 +34832d4,8d6b0010 +34832d8,256913ec +34832dc,ac89013c +34832e0,8fbf0014 +34832e4,3e00008 +34832e8,27bd0030 +34832ec,3c01c416 +34832f0,44816000 +34832f4,3e00008 +34832f8,3025 +34832fc,3c014416 +3483300,44816000 +3483304,3e00008 +3483308,3025 +348330c,afa40018 +3483310,3c08801e +3483314,2508aa30 +3483318,3e00008 +348331c,ad000678 +3483320,27bdffe8 +3483324,afaa0004 +3483328,846f4a2a +348332c,340a0002 +3483330,15ea0002 +3483334,340a0001 +3483338,a46a4a2a +348333c,846f4a2a +3483340,8faa0004 +3483344,3e00008 +3483348,27bd0018 +348334c,27bdffe8 +3483350,afaa0004 +3483354,846e4a2a +3483358,340a0002 +348335c,15ca0002 +3483360,340a0003 +3483364,a46a4a2a +3483368,846e4a2a +348336c,8faa0004 +3483370,3e00008 +3483374,27bd0018 +3483378,27bdffe8 +348337c,afaa0004 +3483380,85034a2a +3483384,340a0002 +3483388,146a0002 +348338c,340a0001 +3483390,a50a4a2a 3483394,85034a2a -3483398,340a0002 -348339c,146a0002 -34833a0,340a0003 -34833a4,a50a4a2a -34833a8,85034a2a -34833ac,8faa0004 -34833b0,3e00008 -34833b4,27bd0018 -34833b8,27bdffe8 -34833bc,afaa0004 +3483398,8faa0004 +348339c,3e00008 +34833a0,27bd0018 +34833a4,27bdffe8 +34833a8,afaa0004 +34833ac,85034a2a +34833b0,340a0002 +34833b4,146a0002 +34833b8,340a0003 +34833bc,a50a4a2a 34833c0,85034a2a -34833c4,340a0002 -34833c8,146a0002 -34833cc,340a0001 -34833d0,a50a4a2a -34833d4,85034a2a -34833d8,8faa0004 -34833dc,3e00008 -34833e0,27bd0018 -34833e4,27bdffe8 -34833e8,afaa0004 +34833c4,8faa0004 +34833c8,3e00008 +34833cc,27bd0018 +34833d0,27bdffe8 +34833d4,afaa0004 +34833d8,85034a2a +34833dc,340a0002 +34833e0,146a0002 +34833e4,340a0001 +34833e8,a50a4a2a 34833ec,85034a2a -34833f0,340a0002 -34833f4,146a0002 -34833f8,340a0003 -34833fc,a50a4a2a -3483400,85034a2a -3483404,8faa0004 -3483408,3e00008 -348340c,27bd0018 -3483410,27bdffe8 -3483414,afaa0004 -3483418,a42bca2a -348341c,340a0002 -3483420,156a0002 -3483424,340a0003 -3483428,a50a4a2a -348342c,85034a2a -3483430,8faa0004 -3483434,3e00008 -3483438,27bd0018 -348343c,27bdffe8 -3483440,afaa0004 +34833f0,8faa0004 +34833f4,3e00008 +34833f8,27bd0018 +34833fc,27bdffe8 +3483400,afaa0004 +3483404,85034a2a +3483408,340a0002 +348340c,146a0002 +3483410,340a0003 +3483414,a50a4a2a +3483418,85034a2a +348341c,8faa0004 +3483420,3e00008 +3483424,27bd0018 +3483428,27bdffe8 +348342c,afaa0004 +3483430,a42bca2a +3483434,340a0002 +3483438,156a0002 +348343c,340a0003 +3483440,a50a4a2a 3483444,85034a2a -3483448,340a0002 -348344c,146a0002 -3483450,340a0001 -3483454,a50a4a2a -3483458,85034a2a -348345c,8faa0004 -3483460,3e00008 -3483464,27bd0018 -3483468,27bdffe8 -348346c,afaa0004 +3483448,8faa0004 +348344c,3e00008 +3483450,27bd0018 +3483454,27bdffe8 +3483458,afaa0004 +348345c,85034a2a +3483460,340a0002 +3483464,146a0002 +3483468,340a0001 +348346c,a50a4a2a 3483470,85034a2a -3483474,340a0002 -3483478,146a0002 -348347c,340a0003 -3483480,a50a4a2a -3483484,85034a2a -3483488,8faa0004 -348348c,3e00008 -3483490,27bd0018 -3483494,3c08801e -3483498,25084ee8 -348349c,3409f000 -34834a0,a5090000 +3483474,8faa0004 +3483478,3e00008 +348347c,27bd0018 +3483480,27bdffe8 +3483484,afaa0004 +3483488,85034a2a +348348c,340a0002 +3483490,146a0002 +3483494,340a0003 +3483498,a50a4a2a +348349c,85034a2a +34834a0,8faa0004 34834a4,3e00008 -34834a8,84cb4a2e -34834ac,24a56f04 -34834b0,8c880144 -34834b4,11050007 -34834b8,3c09801e -34834bc,2529aa30 -34834c0,3c0a446a -34834c4,254ac000 -34834c8,3c0bc324 -34834cc,ad2a0024 -34834d0,ad2b002c -34834d4,3e00008 -34834dc,27bdffd8 -34834e0,afbf0024 -34834e4,afa40028 -34834e8,afa5002c -34834ec,afa60030 -34834f0,c022865 -34834f4,8fa40030 -34834f8,44822000 -34834fc,44800000 -3483500,240e0002 -3483504,468021a0 -3483508,afae0018 -348350c,8fa40028 -3483510,8fa5002c -3483514,8fa60030 -3483518,3c073f80 -348351c,3c080400 -3483520,250832b0 -3483524,14c80002 -348352c,3c074040 -3483530,e7a60014 -3483534,e7a00010 -3483538,c023000 -348353c,e7a0001c -3483540,8fbf0024 -3483544,8fbf0024 -3483548,3e00008 -348354c,27bd0028 -3483550,3c0a8040 -3483554,814a0cd8 -3483558,11400003 -348355c,8ccb0138 -3483560,8d6b0010 -3483564,25690adc -3483568,3e00008 -348356c,acc90180 -3483570,27bdffe8 -3483574,afbf0014 -3483578,3c0a8040 -348357c,814a0cd8 -3483580,15400003 -3483588,c037500 -3483590,8fbf0014 -3483594,3e00008 -3483598,27bd0018 -348359c,3c010080 -34835a0,3c180001 -34835a4,3e00008 -34835a8,8c4e0670 -34835ac,3c0a8040 -34835b0,814a0cd8 -34835b4,11400002 -34835bc,34180003 -34835c0,3c078012 -34835c4,24e7a5d0 -34835c8,3e00008 -34835cc,24010003 -34835d0,3c0a8040 -34835d4,814a0cd8 -34835d8,11400008 -34835e0,c100411 -34835e8,3c08801e -34835ec,25088966 -34835f0,34090004 -34835f4,a5090000 -34835fc,8fbf0014 -3483600,3e00008 -3483604,27bd0018 -3483608,27bdffe0 -348360c,afbf0014 -3483610,afa10018 -3483614,afa4001c -3483618,3c0a8040 -348361c,814a0cd8 -3483620,1540000b -3483628,3c04801d -348362c,248484a0 -3483630,3c058040 -3483634,90a50cdb -3483638,34060000 -348363c,c037385 -3483644,34044802 -3483648,c0191bc -3483650,8fa4001c -3483654,8fa10018 -3483658,8fbf0014 -348365c,3e00008 -3483660,27bd0020 -3483668,27bdffe0 -348366c,afbf0014 -3483670,afa40018 -3483674,3c0d8040 -3483678,81ad3664 -348367c,15a0000c -3483684,3c08801e -3483688,2508aa30 -348368c,8d090670 -3483690,340a4000 -3483694,12a5824 -3483698,1160000d -34836a0,34080001 -34836a4,3c018040 -34836a8,a0283664 -34836ac,10000023 -34836b0,3c08801e -34836b4,2508aa30 -34836b8,8d090670 -34836bc,340a4000 -34836c0,12a5824 -34836c4,1160000c -34836cc,1000001b -34836d0,24a420d8 -34836d4,c037519 -34836dc,24010002 -34836e0,14410016 -34836e8,3c08801e -34836ec,25088966 -34836f0,34090004 -34836f4,a5090000 -34836f8,3c0b8012 -34836fc,256ba5d0 -3483700,816c0ede -3483704,358c0001 -3483708,a16c0ede -348370c,3c09801e -3483710,2529a2ba -3483714,340802ae -3483718,a5280000 -348371c,3408002a -3483720,3c09801e -3483724,2529a2fe -3483728,a1280000 -348372c,34080014 -3483730,3c09801e -3483734,2529a2b5 -3483738,a1280000 -348373c,8fbf0014 -3483740,3e00008 -3483744,27bd0020 -3483748,27bdffd0 -348374c,afbf0014 -3483750,afa80018 -3483754,afa9001c -3483758,afaa0020 -348375c,afab0024 -3483760,afac0028 -3483764,afad002c -3483768,3c088012 -348376c,2508a5d0 -3483770,85090f20 -3483774,31290040 -3483778,1120000e -348377c,3c08801e -3483780,2508aa30 -3483784,8d09039c -3483788,1120000a -348378c,340a00a1 -3483790,852b0000 -3483794,154b0007 -3483798,240cf7ff -348379c,8d0d066c -34837a0,18d6824 -34837a4,ad0d066c -34837a8,ad00039c -34837ac,ad00011c -34837b0,ad200118 -34837b4,afad002c -34837b8,afac0028 -34837bc,afab0024 -34837c0,afaa0020 -34837c4,afa9001c -34837c8,afa80018 -34837cc,afbf0014 -34837d0,860e001c -34837d4,3e00008 -34837d8,27bd0030 -34837dc,27bdffd0 -34837e0,afbf0014 -34837e4,afa80018 -34837e8,afa9001c -34837ec,afaa0020 -34837f0,84a800a4 -34837f4,34090002 -34837f8,1509000c -34837fc,340a0006 -3483800,80880003 -3483804,150a0009 -348380c,3c088012 -3483810,2508a5d0 -3483814,85090f20 -3483818,31290040 -348381c,11200003 -3483824,c0083ad -348382c,8faa0020 -3483830,8fa9001c -3483834,8fa80018 -3483838,8fbf0014 -348383c,8602001c -3483840,3e00008 -3483844,27bd0030 -3483848,27bdffd0 -348384c,afbf001c -3483850,afa40020 -3483854,afa50024 -3483858,e7a00028 -348385c,4602003c -3483864,45010005 -348386c,c100ec0 -3483874,10000003 -348387c,c100ec2 -3483884,34060014 -3483888,3407000a -348388c,44801000 -3483890,c7a00028 -3483894,8fa50024 -3483898,8fa40020 -348389c,8fbf001c -34838a0,4602003c -34838a4,27bd0030 -34838a8,3e00008 -34838b0,27bdffd0 -34838b4,afbf001c -34838b8,afa40020 -34838bc,afa50024 -34838c0,e7a40028 -34838c4,e7a6002c -34838c8,4606203c -34838d0,45000003 -34838d8,c100ecd -34838e0,34060014 -34838e4,3407000a -34838e8,44801000 -34838ec,c7a6002c -34838f0,c7a40028 -34838f4,8fa50024 -34838f8,8fa40020 -34838fc,8fbf001c -3483900,4606203c -3483904,27bd0030 -3483908,3e00008 -3483910,c100f30 -3483918,8fbf001c -348391c,27bd0020 +34834a8,27bd0018 +34834ac,3c08801e +34834b0,25084ee8 +34834b4,3409f000 +34834b8,a5090000 +34834bc,3e00008 +34834c0,84cb4a2e +34834c4,24a56f04 +34834c8,8c880144 +34834cc,11050007 +34834d0,3c09801e +34834d4,2529aa30 +34834d8,3c0a446a +34834dc,254ac000 +34834e0,3c0bc324 +34834e4,ad2a0024 +34834e8,ad2b002c +34834ec,3e00008 +34834f4,27bdffd8 +34834f8,afbf0024 +34834fc,afa40028 +3483500,afa5002c +3483504,afa60030 +3483508,c022865 +348350c,8fa40030 +3483510,44822000 +3483514,44800000 +3483518,240e0002 +348351c,468021a0 +3483520,afae0018 +3483524,8fa40028 +3483528,8fa5002c +348352c,8fa60030 +3483530,3c073f80 +3483534,3c080400 +3483538,250832b0 +348353c,14c80002 +3483544,3c074040 +3483548,e7a60014 +348354c,e7a00010 +3483550,c023000 +3483554,e7a0001c +3483558,8fbf0024 +348355c,8fbf0024 +3483560,3e00008 +3483564,27bd0028 +3483568,3c0a8040 +348356c,814a0cd8 +3483570,11400003 +3483574,8ccb0138 +3483578,8d6b0010 +348357c,25690adc +3483580,3e00008 +3483584,acc90180 +3483588,27bdffe8 +348358c,afbf0014 +3483590,3c0a8040 +3483594,814a0cd8 +3483598,15400003 +34835a0,c037500 +34835a8,8fbf0014 +34835ac,3e00008 +34835b0,27bd0018 +34835b4,3c010080 +34835b8,3c180001 +34835bc,3e00008 +34835c0,8c4e0670 +34835c4,3c0a8040 +34835c8,814a0cd8 +34835cc,11400002 +34835d4,34180003 +34835d8,3c078012 +34835dc,24e7a5d0 +34835e0,3e00008 +34835e4,24010003 +34835e8,3c0a8040 +34835ec,814a0cd8 +34835f0,11400008 +34835f8,c100417 +3483600,3c08801e +3483604,25088966 +3483608,34090004 +348360c,a5090000 +3483614,8fbf0014 +3483618,3e00008 +348361c,27bd0018 +3483620,27bdffe0 +3483624,afbf0014 +3483628,afa10018 +348362c,afa4001c +3483630,3c0a8040 +3483634,814a0cd8 +3483638,1540000b +3483640,3c04801d +3483644,248484a0 +3483648,3c058040 +348364c,90a50cdb +3483650,34060000 +3483654,c037385 +348365c,34044802 +3483660,c0191bc +3483668,8fa4001c +348366c,8fa10018 +3483670,8fbf0014 +3483674,3e00008 +3483678,27bd0020 +3483680,27bdffe0 +3483684,afbf0014 +3483688,afa40018 +348368c,3c0d8040 +3483690,81ad367c +3483694,15a0000c +348369c,3c08801e +34836a0,2508aa30 +34836a4,8d090670 +34836a8,340a4000 +34836ac,12a5824 +34836b0,1160000d +34836b8,34080001 +34836bc,3c018040 +34836c0,a028367c +34836c4,10000023 +34836c8,3c08801e +34836cc,2508aa30 +34836d0,8d090670 +34836d4,340a4000 +34836d8,12a5824 +34836dc,1160000c +34836e4,1000001b +34836e8,24a420d8 +34836ec,c037519 +34836f4,24010002 +34836f8,14410016 +3483700,3c08801e +3483704,25088966 +3483708,34090004 +348370c,a5090000 +3483710,3c0b8012 +3483714,256ba5d0 +3483718,816c0ede +348371c,358c0001 +3483720,a16c0ede +3483724,3c09801e +3483728,2529a2ba +348372c,340802ae +3483730,a5280000 +3483734,3408002a +3483738,3c09801e +348373c,2529a2fe +3483740,a1280000 +3483744,34080014 +3483748,3c09801e +348374c,2529a2b5 +3483750,a1280000 +3483754,8fbf0014 +3483758,3e00008 +348375c,27bd0020 +3483760,27bdffd0 +3483764,afbf0014 +3483768,afa80018 +348376c,afa9001c +3483770,afaa0020 +3483774,afab0024 +3483778,afac0028 +348377c,afad002c +3483780,3c088012 +3483784,2508a5d0 +3483788,85090f20 +348378c,31290040 +3483790,1120000e +3483794,3c08801e +3483798,2508aa30 +348379c,8d09039c +34837a0,1120000a +34837a4,340a00a1 +34837a8,852b0000 +34837ac,154b0007 +34837b0,240cf7ff +34837b4,8d0d066c +34837b8,18d6824 +34837bc,ad0d066c +34837c0,ad00039c +34837c4,ad00011c +34837c8,ad200118 +34837cc,afad002c +34837d0,afac0028 +34837d4,afab0024 +34837d8,afaa0020 +34837dc,afa9001c +34837e0,afa80018 +34837e4,afbf0014 +34837e8,860e001c +34837ec,3e00008 +34837f0,27bd0030 +34837f4,27bdffd0 +34837f8,afbf0014 +34837fc,afa80018 +3483800,afa9001c +3483804,afaa0020 +3483808,84a800a4 +348380c,34090002 +3483810,1509000c +3483814,340a0006 +3483818,80880003 +348381c,150a0009 +3483824,3c088012 +3483828,2508a5d0 +348382c,85090f20 +3483830,31290040 +3483834,11200003 +348383c,c0083ad +3483844,8faa0020 +3483848,8fa9001c +348384c,8fa80018 +3483850,8fbf0014 +3483854,8602001c +3483858,3e00008 +348385c,27bd0030 +3483860,27bdffd0 +3483864,afbf001c +3483868,afa40020 +348386c,afa50024 +3483870,e7a00028 +3483874,4602003c +348387c,45010005 +3483884,c100ec8 +348388c,10000003 +3483894,c100eca +348389c,34060014 +34838a0,3407000a +34838a4,44801000 +34838a8,c7a00028 +34838ac,8fa50024 +34838b0,8fa40020 +34838b4,8fbf001c +34838b8,4602003c +34838bc,27bd0030 +34838c0,3e00008 +34838c8,27bdffd0 +34838cc,afbf001c +34838d0,afa40020 +34838d4,afa50024 +34838d8,e7a40028 +34838dc,e7a6002c +34838e0,4606203c +34838e8,45000003 +34838f0,c100ed5 +34838f8,34060014 +34838fc,3407000a +3483900,44801000 +3483904,c7a6002c +3483908,c7a40028 +348390c,8fa50024 +3483910,8fa40020 +3483914,8fbf001c +3483918,4606203c +348391c,27bd0030 3483920,3e00008 -348392c,27bdffe8 -3483930,afbf0014 -3483934,c008ab4 -348393c,8fbf0014 -3483940,27bd0018 -3483944,8fa40018 -3483948,8c8a0138 -348394c,8d4a0010 -3483950,25431618 -3483954,3c088040 -3483958,81083928 -348395c,1100000a -3483960,3c098012 -3483964,2529a5d0 -3483968,95281406 -348396c,290105dc -3483970,14200005 -3483974,9488029c -3483978,31080002 -348397c,15000002 -3483984,254314d0 -3483988,3e00008 -3483990,3c188012 -3483994,2718a5d0 -3483998,8f180004 -348399c,17000003 -34839a4,3c0a8041 -34839a8,254ab4b8 -34839ac,24780008 -34839b0,3e00008 -34839b4,adf802c0 -34839b8,3c0f8012 -34839bc,25efa5d0 -34839c0,8def0004 -34839c4,15e00003 -34839cc,3c0e8041 -34839d0,25ceb4b8 -34839d4,ac4e0004 -34839d8,3e00008 -34839dc,820f013f -34839e4,3c088040 -34839e8,810839e0 -34839ec,11000007 -34839f0,3c09801d -34839f4,252984a0 -34839f8,8d281d44 -34839fc,31080002 -3483a00,11000002 -3483a08,34069100 -3483a0c,3e00008 -3483a10,afa60020 -3483a14,3c088040 -3483a18,810839e0 -3483a1c,11000005 -3483a20,3c09801d -3483a24,252984a0 -3483a28,8d281d44 -3483a2c,35080002 -3483a30,ad281d44 -3483a34,3e00008 -3483a38,34e74000 -3483a40,3c038012 -3483a44,2463a5d0 -3483a48,8c6e0004 -3483a4c,15c0000c -3483a50,24020005 -3483a54,24020011 -3483a58,3c088040 -3483a5c,81083a3c -3483a60,11000007 -3483a64,3c09801d -3483a68,252984a0 -3483a6c,8d281d44 -3483a70,31080002 -3483a74,11000002 -3483a78,34020001 -3483a7c,34020003 -3483a80,3e00008 -3483a84,3c048010 -3483a88,3c088040 -3483a8c,81083a3c -3483a90,11000005 -3483a94,3c09801d -3483a98,252984a0 -3483a9c,8d281d44 -3483aa0,35080002 -3483aa4,ad281d44 -3483aa8,3e00008 -3483aac,34e78000 -3483ab0,27bdffe8 -3483ab4,afa20010 -3483ab8,afbf0014 -3483abc,c10215e -3483ac0,46000306 -3483ac4,406821 -3483ac8,8fa20010 -3483acc,8fbf0014 -3483ad0,3e00008 -3483ad4,27bd0018 -3483ad8,ac800130 -3483adc,ac800134 -3483ae0,3c018012 -3483ae4,2421a5d0 -3483ae8,80280edc -3483aec,35080008 -3483af0,a0280edc -3483af4,3c013f80 -3483af8,3e00008 -3483afc,44813000 -3483b00,3e00008 -3483b08,3c028041 -3483b0c,8c43a250 -3483b10,3c028041 -3483b14,24429fc2 -3483b18,14620004 -3483b1c,3c038041 -3483b20,3c028041 -3483b24,24429fc4 -3483b28,ac62a250 -3483b2c,3e00008 -3483b34,3c028041 -3483b38,8c43a250 -3483b3c,3c028041 -3483b40,24429fa8 -3483b44,10620003 -3483b48,3c028041 -3483b4c,10000003 -3483b50,24429fc8 +3483928,c100f38 +3483930,8fbf001c +3483934,27bd0020 +3483938,3e00008 +3483944,27bdffe8 +3483948,afbf0014 +348394c,c008ab4 +3483954,8fbf0014 +3483958,27bd0018 +348395c,8fa40018 +3483960,8c8a0138 +3483964,8d4a0010 +3483968,25431618 +348396c,3c088040 +3483970,81083940 +3483974,1100000a +3483978,3c098012 +348397c,2529a5d0 +3483980,95281406 +3483984,290105dc +3483988,14200005 +348398c,9488029c +3483990,31080002 +3483994,15000002 +348399c,254314d0 +34839a0,3e00008 +34839a8,3c188012 +34839ac,2718a5d0 +34839b0,8f180004 +34839b4,17000003 +34839bc,3c0a8041 +34839c0,254ab4d8 +34839c4,24780008 +34839c8,3e00008 +34839cc,adf802c0 +34839d0,3c0f8012 +34839d4,25efa5d0 +34839d8,8def0004 +34839dc,15e00003 +34839e4,3c0e8041 +34839e8,25ceb4d8 +34839ec,ac4e0004 +34839f0,3e00008 +34839f4,820f013f +34839fc,3c088040 +3483a00,810839f8 +3483a04,11000007 +3483a08,3c09801d +3483a0c,252984a0 +3483a10,8d281d44 +3483a14,31080002 +3483a18,11000002 +3483a20,34069100 +3483a24,3e00008 +3483a28,afa60020 +3483a2c,3c088040 +3483a30,810839f8 +3483a34,11000005 +3483a38,3c09801d +3483a3c,252984a0 +3483a40,8d281d44 +3483a44,35080002 +3483a48,ad281d44 +3483a4c,3e00008 +3483a50,34e74000 +3483a58,3c038012 +3483a5c,2463a5d0 +3483a60,8c6e0004 +3483a64,15c0000c +3483a68,24020005 +3483a6c,24020011 +3483a70,3c088040 +3483a74,81083a54 +3483a78,11000007 +3483a7c,3c09801d +3483a80,252984a0 +3483a84,8d281d44 +3483a88,31080002 +3483a8c,11000002 +3483a90,34020001 +3483a94,34020003 +3483a98,3e00008 +3483a9c,3c048010 +3483aa0,3c088040 +3483aa4,81083a54 +3483aa8,11000005 +3483aac,3c09801d +3483ab0,252984a0 +3483ab4,8d281d44 +3483ab8,35080002 +3483abc,ad281d44 +3483ac0,3e00008 +3483ac4,34e78000 +3483ac8,27bdffe8 +3483acc,afa20010 +3483ad0,afbf0014 +3483ad4,c102166 +3483ad8,46000306 +3483adc,406821 +3483ae0,8fa20010 +3483ae4,8fbf0014 +3483ae8,3e00008 +3483aec,27bd0018 +3483af0,ac800130 +3483af4,ac800134 +3483af8,3c018012 +3483afc,2421a5d0 +3483b00,80280edc +3483b04,35080008 +3483b08,a0280edc +3483b0c,3c013f80 +3483b10,3e00008 +3483b14,44813000 +3483b20,3e00008 +3483b28,3c028041 +3483b2c,8c43a270 +3483b30,3c028041 +3483b34,24429fe2 +3483b38,14620004 +3483b3c,3c038041 +3483b40,3c028041 +3483b44,24429fe4 +3483b48,ac62a270 +3483b4c,3e00008 3483b54,3c028041 -3483b58,24429faa -3483b5c,3c038041 -3483b60,3e00008 -3483b64,ac62a250 -3483b68,27bdffc8 -3483b6c,afbf0034 -3483b70,afb40030 -3483b74,afb3002c -3483b78,afb20028 -3483b7c,afb10024 -3483b80,afb00020 -3483b84,809025 -3483b88,3c02801c -3483b8c,344284a0 -3483b90,3c030001 -3483b94,431021 -3483b98,90420745 -3483b9c,240300aa -3483ba0,14430002 -3483ba4,a08825 -3483ba8,240200ff -3483bac,3c03801c -3483bb0,346384a0 -3483bb4,8c700000 -3483bb8,8e0302b0 -3483bbc,24640008 -3483bc0,ae0402b0 -3483bc4,3c04de00 -3483bc8,ac640000 -3483bcc,3c048041 -3483bd0,2484a468 -3483bd4,ac640004 +3483b58,8c43a270 +3483b5c,3c028041 +3483b60,24429fc8 +3483b64,10620003 +3483b68,3c028041 +3483b6c,10000003 +3483b70,24429fe8 +3483b74,3c028041 +3483b78,24429fca +3483b7c,3c038041 +3483b80,3e00008 +3483b84,ac62a270 +3483b88,27bdffc8 +3483b8c,afbf0034 +3483b90,afb40030 +3483b94,afb3002c +3483b98,afb20028 +3483b9c,afb10024 +3483ba0,afb00020 +3483ba4,809025 +3483ba8,3c02801c +3483bac,344284a0 +3483bb0,3c030001 +3483bb4,431021 +3483bb8,90420745 +3483bbc,240300aa +3483bc0,14430002 +3483bc4,a08825 +3483bc8,240200ff +3483bcc,3c03801c +3483bd0,346384a0 +3483bd4,8c700000 3483bd8,8e0302b0 3483bdc,24640008 3483be0,ae0402b0 -3483be4,3c04e700 +3483be4,3c04de00 3483be8,ac640000 -3483bec,ac600004 -3483bf0,8e0302b0 -3483bf4,24640008 -3483bf8,ae0402b0 -3483bfc,3c04fc11 -3483c00,34849623 -3483c04,ac640000 -3483c08,3c04ff2f -3483c0c,3484ffff -3483c10,ac640004 -3483c14,8e0402b0 -3483c18,24830008 -3483c1c,ae0302b0 -3483c20,3c03fa00 -3483c24,ac830000 -3483c28,401825 -3483c2c,c2102b -3483c30,10400002 -3483c34,261302a8 -3483c38,c01825 -3483c3c,2402ff00 -3483c40,621825 -3483c44,ac830004 -3483c48,24070001 -3483c4c,24060009 -3483c50,3c148041 -3483c54,2685a428 -3483c58,c101bd7 -3483c5c,2602025 -3483c60,24020010 -3483c64,afa20018 -3483c68,afa20014 -3483c6c,263100bd -3483c70,afb10010 -3483c74,2647001b -3483c78,3025 -3483c7c,2685a428 -3483c80,c101c3f -3483c84,2602025 -3483c88,8e0202b0 -3483c8c,24430008 -3483c90,ae0302b0 -3483c94,3c03e700 -3483c98,ac430000 -3483c9c,ac400004 -3483ca0,8fbf0034 -3483ca4,8fb40030 -3483ca8,8fb3002c -3483cac,8fb20028 -3483cb0,8fb10024 -3483cb4,8fb00020 -3483cb8,3e00008 -3483cbc,27bd0038 -3483cc0,3c028041 -3483cc4,8c43a250 -3483cc8,3c028041 -3483ccc,24429fa8 -3483cd0,10620021 -3483cd8,27bdffe8 -3483cdc,afbf0014 -3483ce0,90660000 -3483ce4,90620001 -3483ce8,22600 -3483cec,42603 -3483cf0,42183 -3483cf4,3042003f -3483cf8,21040 -3483cfc,3c038041 -3483d00,24639fa8 -3483d04,621021 -3483d08,3c038041 -3483d0c,ac62a250 -3483d10,3c02801c -3483d14,344284a0 -3483d18,944300a4 -3483d1c,28620011 -3483d20,10400008 -3483d24,2825 -3483d28,3c028011 -3483d2c,3442a5d0 -3483d30,431021 -3483d34,804500bc -3483d38,52fc3 -3483d3c,30a50011 -3483d40,24a5ffef -3483d44,c100eda -3483d4c,8fbf0014 -3483d50,3e00008 -3483d54,27bd0018 -3483d58,3e00008 -3483d60,27bdffd8 -3483d64,afbf0024 -3483d68,afb20020 -3483d6c,afb1001c -3483d70,afb00018 -3483d74,808025 -3483d78,909101e9 -3483d7c,3c028040 -3483d80,8c4326ec -3483d84,10600018 -3483d88,2201025 -3483d8c,9487001c -3483d90,73943 -3483d94,30e7007f -3483d98,3c02801c -3483d9c,344284a0 -3483da0,904600a5 -3483da4,802825 -3483da8,c1019d9 -3483dac,27a40010 -3483db0,97b20014 -3483db4,1240000c -3483db8,2201025 -3483dbc,c101ed4 -3483dc0,93a40017 -3483dc4,54400004 -3483dc8,90420007 -3483dcc,c101ed4 -3483dd0,2402025 -3483dd4,90420007 -3483dd8,30510001 -3483ddc,56200001 -3483de0,24110005 -3483de4,30420002 -3483de8,a21101ec -3483dec,a20201ed -3483df0,8fbf0024 -3483df4,8fb20020 -3483df8,8fb1001c -3483dfc,8fb00018 -3483e00,3e00008 -3483e04,27bd0028 -3483e08,27bdffd8 -3483e0c,afbf0024 -3483e10,afb10020 -3483e14,afb0001c -3483e18,3c02801c -3483e1c,344284a0 -3483e20,94500020 -3483e24,3c02801d -3483e28,3442aa30 -3483e2c,8c42066c -3483e30,3c033000 -3483e34,24630483 -3483e38,431024 -3483e3c,544000ab -3483e40,8fbf0024 -3483e44,3c02801c -3483e48,344284a0 -3483e4c,8c430008 -3483e50,3c02800f -3483e54,8c4213ec -3483e58,546200a4 -3483e5c,8fbf0024 -3483e60,3c028011 -3483e64,3442a5d0 -3483e68,8c42135c -3483e6c,5440009f -3483e70,8fbf0024 -3483e74,3c02800e -3483e78,3442f1b0 -3483e7c,8c420000 -3483e80,30420020 -3483e84,54400099 -3483e88,8fbf0024 -3483e8c,3c028011 -3483e90,3442a5d0 -3483e94,8c42009c -3483e98,3c036000 -3483e9c,431024 -3483ea0,10400007 -3483ea4,3c028011 -3483ea8,3442a5d0 -3483eac,8c420004 -3483eb0,50400010 -3483eb4,32020200 -3483eb8,10000085 -3483ebc,3c028011 -3483ec0,3442a5d0 -3483ec4,8042007b -3483ec8,24030007 -3483ecc,10430003 -3483ed0,24030008 -3483ed4,14430085 -3483ed8,8fbf0024 +3483bec,3c048041 +3483bf0,2484a488 +3483bf4,ac640004 +3483bf8,8e0302b0 +3483bfc,24640008 +3483c00,ae0402b0 +3483c04,3c04e700 +3483c08,ac640000 +3483c0c,ac600004 +3483c10,8e0302b0 +3483c14,24640008 +3483c18,ae0402b0 +3483c1c,3c04fc11 +3483c20,34849623 +3483c24,ac640000 +3483c28,3c04ff2f +3483c2c,3484ffff +3483c30,ac640004 +3483c34,8e0402b0 +3483c38,24830008 +3483c3c,ae0302b0 +3483c40,3c03fa00 +3483c44,ac830000 +3483c48,401825 +3483c4c,c2102b +3483c50,10400002 +3483c54,261302a8 +3483c58,c01825 +3483c5c,2402ff00 +3483c60,621825 +3483c64,ac830004 +3483c68,24070001 +3483c6c,24060009 +3483c70,3c148041 +3483c74,2685a448 +3483c78,c101bdf +3483c7c,2602025 +3483c80,24020010 +3483c84,afa20018 +3483c88,afa20014 +3483c8c,263100bd +3483c90,afb10010 +3483c94,2647001b +3483c98,3025 +3483c9c,2685a448 +3483ca0,c101c47 +3483ca4,2602025 +3483ca8,8e0202b0 +3483cac,24430008 +3483cb0,ae0302b0 +3483cb4,3c03e700 +3483cb8,ac430000 +3483cbc,ac400004 +3483cc0,8fbf0034 +3483cc4,8fb40030 +3483cc8,8fb3002c +3483ccc,8fb20028 +3483cd0,8fb10024 +3483cd4,8fb00020 +3483cd8,3e00008 +3483cdc,27bd0038 +3483ce0,3c028041 +3483ce4,8c43a270 +3483ce8,3c028041 +3483cec,24429fc8 +3483cf0,10620021 +3483cf8,27bdffe8 +3483cfc,afbf0014 +3483d00,90660000 +3483d04,90620001 +3483d08,22600 +3483d0c,42603 +3483d10,42183 +3483d14,3042003f +3483d18,21040 +3483d1c,3c038041 +3483d20,24639fc8 +3483d24,621021 +3483d28,3c038041 +3483d2c,ac62a270 +3483d30,3c02801c +3483d34,344284a0 +3483d38,944300a4 +3483d3c,28620011 +3483d40,10400008 +3483d44,2825 +3483d48,3c028011 +3483d4c,3442a5d0 +3483d50,431021 +3483d54,804500bc +3483d58,52fc3 +3483d5c,30a50011 +3483d60,24a5ffef +3483d64,c100ee2 +3483d6c,8fbf0014 +3483d70,3e00008 +3483d74,27bd0018 +3483d78,3e00008 +3483d80,27bdffd8 +3483d84,afbf0024 +3483d88,afb20020 +3483d8c,afb1001c +3483d90,afb00018 +3483d94,808025 +3483d98,909101e9 +3483d9c,3c028040 +3483da0,8c432704 +3483da4,10600018 +3483da8,2201025 +3483dac,9487001c +3483db0,73943 +3483db4,30e7007f +3483db8,3c02801c +3483dbc,344284a0 +3483dc0,904600a5 +3483dc4,802825 +3483dc8,c1019e1 +3483dcc,27a40010 +3483dd0,97b20014 +3483dd4,1240000c +3483dd8,2201025 +3483ddc,c101edc +3483de0,93a40017 +3483de4,54400004 +3483de8,90420007 +3483dec,c101edc +3483df0,2402025 +3483df4,90420007 +3483df8,30510001 +3483dfc,56200001 +3483e00,24110005 +3483e04,30420002 +3483e08,a21101ec +3483e0c,a20201ed +3483e10,8fbf0024 +3483e14,8fb20020 +3483e18,8fb1001c +3483e1c,8fb00018 +3483e20,3e00008 +3483e24,27bd0028 +3483e28,27bdffd8 +3483e2c,afbf0024 +3483e30,afb10020 +3483e34,afb0001c +3483e38,3c02801c +3483e3c,344284a0 +3483e40,94500020 +3483e44,3c02801d +3483e48,3442aa30 +3483e4c,8c42066c +3483e50,3c033000 +3483e54,24630483 +3483e58,431024 +3483e5c,544000ab +3483e60,8fbf0024 +3483e64,3c02801c +3483e68,344284a0 +3483e6c,8c430008 +3483e70,3c02800f +3483e74,8c4213ec +3483e78,546200a4 +3483e7c,8fbf0024 +3483e80,3c028011 +3483e84,3442a5d0 +3483e88,8c42135c +3483e8c,5440009f +3483e90,8fbf0024 +3483e94,3c02800e +3483e98,3442f1b0 +3483e9c,8c420000 +3483ea0,30420020 +3483ea4,54400099 +3483ea8,8fbf0024 +3483eac,3c028011 +3483eb0,3442a5d0 +3483eb4,8c42009c +3483eb8,3c036000 +3483ebc,431024 +3483ec0,10400007 +3483ec4,3c028011 +3483ec8,3442a5d0 +3483ecc,8c420004 +3483ed0,50400010 +3483ed4,32020200 +3483ed8,10000085 3483edc,3c028011 3483ee0,3442a5d0 -3483ee4,8c420004 -3483ee8,54400053 -3483eec,32100400 -3483ef0,32020200 -3483ef4,10400026 -3483ef8,3211ffff +3483ee4,8042007b +3483ee8,24030007 +3483eec,10430003 +3483ef0,24030008 +3483ef4,14430085 +3483ef8,8fbf0024 3483efc,3c028011 3483f00,3442a5d0 -3483f04,9442009c -3483f08,30422000 -3483f0c,50400021 -3483f10,32310100 -3483f14,3c028011 -3483f18,3442a5d0 -3483f1c,94420070 -3483f20,3042f000 -3483f24,38422000 -3483f28,2102b -3483f2c,24420001 -3483f30,3c048011 -3483f34,3484a5d0 -3483f38,21300 -3483f3c,94830070 -3483f40,30630fff -3483f44,621025 -3483f48,a4820070 -3483f4c,3c04801d -3483f50,3485aa30 -3483f54,3c028007 -3483f58,34429764 -3483f5c,40f809 -3483f60,248484a0 -3483f64,3c058010 -3483f68,24a243a8 -3483f6c,afa20014 -3483f70,24a743a0 -3483f74,afa70010 -3483f78,24060004 -3483f7c,24a54394 -3483f80,3c02800c -3483f84,3442806c -3483f88,40f809 -3483f8c,24040835 -3483f90,32310100 -3483f94,52200028 -3483f98,32100400 -3483f9c,3c028011 -3483fa0,3442a5d0 -3483fa4,9442009c -3483fa8,30424000 -3483fac,50400022 -3483fb0,32100400 -3483fb4,3c028011 -3483fb8,3442a5d0 -3483fbc,94420070 -3483fc0,3042f000 -3483fc4,24033000 -3483fc8,50430002 -3483fcc,24040001 -3483fd0,24040003 -3483fd4,3c038011 -3483fd8,3463a5d0 -3483fdc,42300 -3483fe0,94620070 -3483fe4,30420fff -3483fe8,441025 -3483fec,a4620070 -3483ff0,3c04801d -3483ff4,3485aa30 -3483ff8,3c028007 -3483ffc,34429764 -3484000,40f809 -3484004,248484a0 -3484008,3c058010 -348400c,24a243a8 -3484010,afa20014 -3484014,24a743a0 -3484018,afa70010 -348401c,24060004 -3484020,24a54394 -3484024,3c02800c -3484028,3442806c -348402c,40f809 -3484030,24040835 -3484034,32100400 -3484038,1200002c -348403c,8fbf0024 -3484040,3c02801c -3484044,344284a0 -3484048,3c030001 -348404c,431021 -3484050,94420934 -3484054,14400026 -3484058,8fb10020 -348405c,3c028011 -3484060,3442a5d0 -3484064,9046007b -3484068,24c2fff9 -348406c,304200ff -3484070,2c420002 -3484074,1040001f -3484078,8fb0001c -348407c,3c02801c -3484080,344284a0 -3484084,431021 -3484088,90420758 -348408c,14400019 -3484090,3c02801d -3484094,3442aa30 -3484098,8c42066c -348409c,3c0308a0 -34840a0,24630800 -34840a4,431024 -34840a8,14400012 -34840ac,24070002 -34840b0,3c04801d -34840b4,3485aa30 -34840b8,3c028038 -34840bc,3442c9a0 -34840c0,40f809 -34840c4,248484a0 -34840c8,10000008 -34840cc,8fbf0024 -34840d0,3442a5d0 -34840d4,8042007b -34840d8,24030007 -34840dc,1043ffd5 -34840e0,24030008 -34840e4,1043ffd3 -34840e8,8fbf0024 -34840ec,8fb10020 -34840f0,8fb0001c -34840f4,3e00008 -34840f8,27bd0028 -34840fc,3c028011 -3484100,3442a5d0 -3484104,8c42009c -3484108,3c036000 -348410c,431024 -3484110,10400006 -3484114,3c028011 -3484118,3442a5d0 -348411c,8c420004 -3484120,1040000a -3484124,3c028040 -3484128,3c028011 -348412c,3442a5d0 -3484130,9042007b -3484134,2442fff9 -3484138,304200ff -348413c,2c420002 -3484140,10400123 -3484148,3c028040 -348414c,9042088a -3484150,1040011f -3484158,27bdffc8 -348415c,afbf0034 -3484160,afb30030 -3484164,afb2002c -3484168,afb10028 -348416c,afb00024 -3484170,3c02801c -3484174,344284a0 -3484178,8c500000 -348417c,8e0302b0 -3484180,24640008 -3484184,ae0402b0 -3484188,3c04de00 -348418c,ac640000 -3484190,3c048041 -3484194,2484a468 -3484198,ac640004 +3483f04,8c420004 +3483f08,54400053 +3483f0c,32100400 +3483f10,32020200 +3483f14,10400026 +3483f18,3211ffff +3483f1c,3c028011 +3483f20,3442a5d0 +3483f24,9442009c +3483f28,30422000 +3483f2c,50400021 +3483f30,32310100 +3483f34,3c028011 +3483f38,3442a5d0 +3483f3c,94420070 +3483f40,3042f000 +3483f44,38422000 +3483f48,2102b +3483f4c,24420001 +3483f50,3c048011 +3483f54,3484a5d0 +3483f58,21300 +3483f5c,94830070 +3483f60,30630fff +3483f64,621025 +3483f68,a4820070 +3483f6c,3c04801d +3483f70,3485aa30 +3483f74,3c028007 +3483f78,34429764 +3483f7c,40f809 +3483f80,248484a0 +3483f84,3c058010 +3483f88,24a243a8 +3483f8c,afa20014 +3483f90,24a743a0 +3483f94,afa70010 +3483f98,24060004 +3483f9c,24a54394 +3483fa0,3c02800c +3483fa4,3442806c +3483fa8,40f809 +3483fac,24040835 +3483fb0,32310100 +3483fb4,52200028 +3483fb8,32100400 +3483fbc,3c028011 +3483fc0,3442a5d0 +3483fc4,9442009c +3483fc8,30424000 +3483fcc,50400022 +3483fd0,32100400 +3483fd4,3c028011 +3483fd8,3442a5d0 +3483fdc,94420070 +3483fe0,3042f000 +3483fe4,24033000 +3483fe8,50430002 +3483fec,24040001 +3483ff0,24040003 +3483ff4,3c038011 +3483ff8,3463a5d0 +3483ffc,42300 +3484000,94620070 +3484004,30420fff +3484008,441025 +348400c,a4620070 +3484010,3c04801d +3484014,3485aa30 +3484018,3c028007 +348401c,34429764 +3484020,40f809 +3484024,248484a0 +3484028,3c058010 +348402c,24a243a8 +3484030,afa20014 +3484034,24a743a0 +3484038,afa70010 +348403c,24060004 +3484040,24a54394 +3484044,3c02800c +3484048,3442806c +348404c,40f809 +3484050,24040835 +3484054,32100400 +3484058,1200002c +348405c,8fbf0024 +3484060,3c02801c +3484064,344284a0 +3484068,3c030001 +348406c,431021 +3484070,94420934 +3484074,14400026 +3484078,8fb10020 +348407c,3c028011 +3484080,3442a5d0 +3484084,9046007b +3484088,24c2fff9 +348408c,304200ff +3484090,2c420002 +3484094,1040001f +3484098,8fb0001c +348409c,3c02801c +34840a0,344284a0 +34840a4,431021 +34840a8,90420758 +34840ac,14400019 +34840b0,3c02801d +34840b4,3442aa30 +34840b8,8c42066c +34840bc,3c0308a0 +34840c0,24630800 +34840c4,431024 +34840c8,14400012 +34840cc,24070002 +34840d0,3c04801d +34840d4,3485aa30 +34840d8,3c028038 +34840dc,3442c9a0 +34840e0,40f809 +34840e4,248484a0 +34840e8,10000008 +34840ec,8fbf0024 +34840f0,3442a5d0 +34840f4,8042007b +34840f8,24030007 +34840fc,1043ffd5 +3484100,24030008 +3484104,1043ffd3 +3484108,8fbf0024 +348410c,8fb10020 +3484110,8fb0001c +3484114,3e00008 +3484118,27bd0028 +348411c,3c028011 +3484120,3442a5d0 +3484124,8c42009c +3484128,3c036000 +348412c,431024 +3484130,10400006 +3484134,3c028011 +3484138,3442a5d0 +348413c,8c420004 +3484140,1040000a +3484144,3c028040 +3484148,3c028011 +348414c,3442a5d0 +3484150,9042007b +3484154,2442fff9 +3484158,304200ff +348415c,2c420002 +3484160,10400123 +3484168,3c028040 +348416c,9042088a +3484170,1040011f +3484178,27bdffc8 +348417c,afbf0034 +3484180,afb30030 +3484184,afb2002c +3484188,afb10028 +348418c,afb00024 +3484190,3c02801c +3484194,344284a0 +3484198,8c500000 348419c,8e0302b0 34841a0,24640008 34841a4,ae0402b0 -34841a8,3c04e700 +34841a8,3c04de00 34841ac,ac640000 -34841b0,ac600004 -34841b4,8e0302b0 -34841b8,24640008 -34841bc,ae0402b0 -34841c0,3c04fc11 -34841c4,34849623 -34841c8,ac640000 -34841cc,3c04ff2f -34841d0,3484ffff -34841d4,ac640004 -34841d8,3c030001 -34841dc,431021 -34841e0,94520744 -34841e4,240200aa -34841e8,124200e0 -34841ec,24070001 -34841f0,261102a8 -34841f4,8e0202b0 -34841f8,24430008 -34841fc,ae0302b0 -3484200,3c03fa00 -3484204,ac430000 -3484208,2403ff00 -348420c,2431825 -3484210,ac430004 -3484214,3025 -3484218,3c138041 -348421c,2665a408 -3484220,c101bd7 -3484224,2202025 -3484228,24020010 -348422c,afa20018 -3484230,afa20014 -3484234,24020040 -3484238,afa20010 -348423c,2407010f -3484240,3025 -3484244,2665a408 -3484248,c101c3f -348424c,2202025 -3484250,240200ff -3484254,16420023 -3484258,3c028011 -348425c,3c02801d -3484260,3442aa30 -3484264,8c42066c -3484268,3c033000 -348426c,24630483 -3484270,431024 -3484274,10400009 -3484278,3c02801c -348427c,8e0202b0 -3484280,24430008 -3484284,ae0302b0 -3484288,3c03fa00 -348428c,ac430000 -3484290,2403ff46 -3484294,10000012 -3484298,ac430004 -348429c,344284a0 -34842a0,8c430008 -34842a4,3c02800f -34842a8,8c4213ec -34842ac,5462fff4 -34842b0,8e0202b0 -34842b4,3c028011 -34842b8,3442a5d0 -34842bc,8c42135c -34842c0,5440ffef -34842c4,8e0202b0 -34842c8,3c02800e -34842cc,3442f1b0 -34842d0,8c420000 -34842d4,30420020 -34842d8,5440ffe9 -34842dc,8e0202b0 -34842e0,3c028011 -34842e4,3442a5d0 -34842e8,9442009c -34842ec,30422000 -34842f0,1040002a -34842f4,3c028011 -34842f8,3442a5d0 -34842fc,8c420004 -3484300,14400054 -3484304,3c028011 -3484308,24070001 -348430c,24060045 -3484310,3c058041 -3484314,24a5a438 -3484318,c101bd7 -348431c,2202025 -3484320,3c028011 -3484324,3442a5d0 -3484328,94420070 -348432c,3042f000 -3484330,24032000 -3484334,5443000e -3484338,2402000c -348433c,24020010 -3484340,afa20018 -3484344,afa20014 -3484348,24020040 -348434c,afa20010 -3484350,24070102 -3484354,3025 -3484358,3c058041 -348435c,24a5a438 -3484360,c101c3f -3484364,2202025 -3484368,1000000c -348436c,3c028011 -3484370,afa20018 -3484374,afa20014 -3484378,24020042 -348437c,afa20010 -3484380,24070104 -3484384,3025 -3484388,3c058041 -348438c,24a5a438 -3484390,c101c3f -3484394,2202025 -3484398,3c028011 -348439c,3442a5d0 -34843a0,9442009c -34843a4,30424000 -34843a8,1040002a -34843ac,3c028011 -34843b0,3442a5d0 -34843b4,8c420004 -34843b8,14400026 -34843bc,3c028011 -34843c0,24070001 -34843c4,24060046 -34843c8,3c058041 -34843cc,24a5a438 -34843d0,c101bd7 -34843d4,2202025 -34843d8,3c028011 -34843dc,3442a5d0 -34843e0,94420070 -34843e4,3042f000 -34843e8,24033000 -34843ec,5443000e -34843f0,2402000c -34843f4,24020010 -34843f8,afa20018 -34843fc,afa20014 -3484400,24020040 -3484404,afa20010 -3484408,2407011b -348440c,3025 -3484410,3c058041 -3484414,24a5a438 -3484418,c101c3f -348441c,2202025 -3484420,1000000c -3484424,3c028011 -3484428,afa20018 -348442c,afa20014 -3484430,24020042 -3484434,afa20010 -3484438,2407011d -348443c,3025 -3484440,3c058041 -3484444,24a5a438 -3484448,c101c3f -348444c,2202025 -3484450,3c028011 -3484454,3442a5d0 -3484458,9042007b -348445c,2442fff9 -3484460,304200ff -3484464,2c420002 -3484468,50400034 -348446c,8e0202b0 -3484470,240200ff -3484474,1642001f -3484478,24070001 -348447c,3c02801c -3484480,344284a0 -3484484,3c030001 -3484488,431021 -348448c,94420934 -3484490,10400009 -3484494,3c02801c -3484498,8e0202b0 -348449c,24430008 -34844a0,ae0302b0 -34844a4,3c03fa00 -34844a8,ac430000 -34844ac,2403ff46 -34844b0,1000000f -34844b4,ac430004 -34844b8,344284a0 -34844bc,3c030001 -34844c0,431021 -34844c4,90420758 -34844c8,5440fff4 -34844cc,8e0202b0 -34844d0,3c02801d -34844d4,3442aa30 -34844d8,8c42066c -34844dc,3c0308a0 -34844e0,24630800 -34844e4,431024 -34844e8,5440ffec +34841b0,3c048041 +34841b4,2484a488 +34841b8,ac640004 +34841bc,8e0302b0 +34841c0,24640008 +34841c4,ae0402b0 +34841c8,3c04e700 +34841cc,ac640000 +34841d0,ac600004 +34841d4,8e0302b0 +34841d8,24640008 +34841dc,ae0402b0 +34841e0,3c04fc11 +34841e4,34849623 +34841e8,ac640000 +34841ec,3c04ff2f +34841f0,3484ffff +34841f4,ac640004 +34841f8,3c030001 +34841fc,431021 +3484200,94520744 +3484204,240200aa +3484208,124200e0 +348420c,24070001 +3484210,261102a8 +3484214,8e0202b0 +3484218,24430008 +348421c,ae0302b0 +3484220,3c03fa00 +3484224,ac430000 +3484228,2403ff00 +348422c,2431825 +3484230,ac430004 +3484234,3025 +3484238,3c138041 +348423c,2665a428 +3484240,c101bdf +3484244,2202025 +3484248,24020010 +348424c,afa20018 +3484250,afa20014 +3484254,24020040 +3484258,afa20010 +348425c,2407010f +3484260,3025 +3484264,2665a428 +3484268,c101c47 +348426c,2202025 +3484270,240200ff +3484274,16420023 +3484278,3c028011 +348427c,3c02801d +3484280,3442aa30 +3484284,8c42066c +3484288,3c033000 +348428c,24630483 +3484290,431024 +3484294,10400009 +3484298,3c02801c +348429c,8e0202b0 +34842a0,24430008 +34842a4,ae0302b0 +34842a8,3c03fa00 +34842ac,ac430000 +34842b0,2403ff46 +34842b4,10000012 +34842b8,ac430004 +34842bc,344284a0 +34842c0,8c430008 +34842c4,3c02800f +34842c8,8c4213ec +34842cc,5462fff4 +34842d0,8e0202b0 +34842d4,3c028011 +34842d8,3442a5d0 +34842dc,8c42135c +34842e0,5440ffef +34842e4,8e0202b0 +34842e8,3c02800e +34842ec,3442f1b0 +34842f0,8c420000 +34842f4,30420020 +34842f8,5440ffe9 +34842fc,8e0202b0 +3484300,3c028011 +3484304,3442a5d0 +3484308,9442009c +348430c,30422000 +3484310,1040002a +3484314,3c028011 +3484318,3442a5d0 +348431c,8c420004 +3484320,14400054 +3484324,3c028011 +3484328,24070001 +348432c,24060045 +3484330,3c058041 +3484334,24a5a458 +3484338,c101bdf +348433c,2202025 +3484340,3c028011 +3484344,3442a5d0 +3484348,94420070 +348434c,3042f000 +3484350,24032000 +3484354,5443000e +3484358,2402000c +348435c,24020010 +3484360,afa20018 +3484364,afa20014 +3484368,24020040 +348436c,afa20010 +3484370,24070102 +3484374,3025 +3484378,3c058041 +348437c,24a5a458 +3484380,c101c47 +3484384,2202025 +3484388,1000000c +348438c,3c028011 +3484390,afa20018 +3484394,afa20014 +3484398,24020042 +348439c,afa20010 +34843a0,24070104 +34843a4,3025 +34843a8,3c058041 +34843ac,24a5a458 +34843b0,c101c47 +34843b4,2202025 +34843b8,3c028011 +34843bc,3442a5d0 +34843c0,9442009c +34843c4,30424000 +34843c8,1040002a +34843cc,3c028011 +34843d0,3442a5d0 +34843d4,8c420004 +34843d8,14400026 +34843dc,3c028011 +34843e0,24070001 +34843e4,24060046 +34843e8,3c058041 +34843ec,24a5a458 +34843f0,c101bdf +34843f4,2202025 +34843f8,3c028011 +34843fc,3442a5d0 +3484400,94420070 +3484404,3042f000 +3484408,24033000 +348440c,5443000e +3484410,2402000c +3484414,24020010 +3484418,afa20018 +348441c,afa20014 +3484420,24020040 +3484424,afa20010 +3484428,2407011b +348442c,3025 +3484430,3c058041 +3484434,24a5a458 +3484438,c101c47 +348443c,2202025 +3484440,1000000c +3484444,3c028011 +3484448,afa20018 +348444c,afa20014 +3484450,24020042 +3484454,afa20010 +3484458,2407011d +348445c,3025 +3484460,3c058041 +3484464,24a5a458 +3484468,c101c47 +348446c,2202025 +3484470,3c028011 +3484474,3442a5d0 +3484478,9042007b +348447c,2442fff9 +3484480,304200ff +3484484,2c420002 +3484488,50400034 +348448c,8e0202b0 +3484490,240200ff +3484494,1642001f +3484498,24070001 +348449c,3c02801c +34844a0,344284a0 +34844a4,3c030001 +34844a8,431021 +34844ac,94420934 +34844b0,10400009 +34844b4,3c02801c +34844b8,8e0202b0 +34844bc,24430008 +34844c0,ae0302b0 +34844c4,3c03fa00 +34844c8,ac430000 +34844cc,2403ff46 +34844d0,1000000f +34844d4,ac430004 +34844d8,344284a0 +34844dc,3c030001 +34844e0,431021 +34844e4,90420758 +34844e8,5440fff4 34844ec,8e0202b0 -34844f0,24070001 -34844f4,3c028011 -34844f8,3442a5d0 -34844fc,8046007b -3484500,3c128041 -3484504,2645a438 -3484508,c101bd7 -348450c,2202025 -3484510,2402000c -3484514,afa20018 -3484518,afa20014 -348451c,2402004d -3484520,afa20010 -3484524,24070111 -3484528,3025 -348452c,2645a438 -3484530,c101c3f -3484534,2202025 -3484538,8e0202b0 -348453c,24430008 -3484540,ae0302b0 -3484544,3c03e700 -3484548,ac430000 -348454c,ac400004 -3484550,8fbf0034 -3484554,8fb30030 -3484558,8fb2002c -348455c,8fb10028 -3484560,8fb00024 -3484564,3e00008 -3484568,27bd0038 -348456c,261102a8 -3484570,8e0202b0 -3484574,24430008 -3484578,ae0302b0 -348457c,3c03fa00 -3484580,ac430000 -3484584,2403ffff -3484588,ac430004 -348458c,3025 -3484590,3c128041 -3484594,2645a408 -3484598,c101bd7 -348459c,2202025 -34845a0,24020010 -34845a4,afa20018 -34845a8,afa20014 -34845ac,24020040 -34845b0,afa20010 -34845b4,2407010f -34845b8,3025 -34845bc,2645a408 -34845c0,c101c3f -34845c4,2202025 -34845c8,1000ff24 -34845cc,241200ff -34845d0,3e00008 -34845d8,3c028041 -34845dc,8c42b49c -34845e0,10400274 -34845e4,3c02801c -34845e8,27bdff90 -34845ec,afbf006c -34845f0,afbe0068 -34845f4,afb70064 -34845f8,afb60060 -34845fc,afb5005c -3484600,afb40058 -3484604,afb30054 -3484608,afb20050 -348460c,afb1004c -3484610,afb00048 -3484614,344284a0 -3484618,3c030001 -348461c,431021 -3484620,94430934 -3484624,24020006 -3484628,14620256 -348462c,808025 -3484630,3c02801c +34844f0,3c02801d +34844f4,3442aa30 +34844f8,8c42066c +34844fc,3c0308a0 +3484500,24630800 +3484504,431024 +3484508,5440ffec +348450c,8e0202b0 +3484510,24070001 +3484514,3c028011 +3484518,3442a5d0 +348451c,8046007b +3484520,3c128041 +3484524,2645a458 +3484528,c101bdf +348452c,2202025 +3484530,2402000c +3484534,afa20018 +3484538,afa20014 +348453c,2402004d +3484540,afa20010 +3484544,24070111 +3484548,3025 +348454c,2645a458 +3484550,c101c47 +3484554,2202025 +3484558,8e0202b0 +348455c,24430008 +3484560,ae0302b0 +3484564,3c03e700 +3484568,ac430000 +348456c,ac400004 +3484570,8fbf0034 +3484574,8fb30030 +3484578,8fb2002c +348457c,8fb10028 +3484580,8fb00024 +3484584,3e00008 +3484588,27bd0038 +348458c,261102a8 +3484590,8e0202b0 +3484594,24430008 +3484598,ae0302b0 +348459c,3c03fa00 +34845a0,ac430000 +34845a4,2403ffff +34845a8,ac430004 +34845ac,3025 +34845b0,3c128041 +34845b4,2645a428 +34845b8,c101bdf +34845bc,2202025 +34845c0,24020010 +34845c4,afa20018 +34845c8,afa20014 +34845cc,24020040 +34845d0,afa20010 +34845d4,2407010f +34845d8,3025 +34845dc,2645a428 +34845e0,c101c47 +34845e4,2202025 +34845e8,1000ff24 +34845ec,241200ff +34845f0,3e00008 +34845f8,3c028041 +34845fc,8c42b4bc +3484600,10400274 +3484604,3c02801c +3484608,27bdff90 +348460c,afbf006c +3484610,afbe0068 +3484614,afb70064 +3484618,afb60060 +348461c,afb5005c +3484620,afb40058 +3484624,afb30054 +3484628,afb20050 +348462c,afb1004c +3484630,afb00048 3484634,344284a0 3484638,3c030001 348463c,431021 -3484640,94420948 -3484644,1440024f -3484648,3c02801c -348464c,344284a0 -3484650,431021 -3484654,94420944 -3484658,1440024a -348465c,3c02801c -3484660,344284a0 -3484664,84420014 -3484668,4430247 -348466c,8fbf006c -3484670,8c820004 -3484674,24430008 -3484678,ac830008 -348467c,3c03de00 -3484680,ac430000 -3484684,3c038041 -3484688,2463a468 -348468c,ac430004 -3484690,3c028011 -3484694,3442a5d0 -3484698,94430f2e -348469c,3c028041 -34846a0,8c42b498 -34846a4,10400012 -34846a8,3025 -34846ac,3c028041 -34846b0,8c42b534 -34846b4,10400010 -34846b8,24060001 -34846bc,30620001 -34846c0,54400006 -34846c4,30630002 -34846c8,3c028041 -34846cc,8c42b534 -34846d0,1040000c -34846d4,3025 -34846d8,30630002 -34846dc,24020001 -34846e0,1460000a -34846e4,afa2003c -34846e8,10000008 -34846ec,afa0003c -34846f0,10000006 -34846f4,afa0003c -34846f8,24020001 -34846fc,10000003 -3484700,afa2003c -3484704,24020001 -3484708,afa2003c -348470c,3c028041 -3484710,8c55b540 -3484714,12a00007 -3484718,2a01825 -348471c,3c028041 -3484720,9442a41c -3484724,21840 -3484728,621821 -348472c,31840 -3484730,24630001 -3484734,3c028041 -3484738,9442a41c -348473c,210c0 -3484740,24420057 -3484744,431021 -3484748,24030140 -348474c,621823 -3484750,38fc2 -3484754,2238821 -3484758,118843 -348475c,26230001 -3484760,afa30038 -3484764,8e030008 -3484768,24640008 -348476c,ae040008 -3484770,3c04fcff -3484774,3484ffff -3484778,ac640000 -348477c,3c04fffd -3484780,3484f6fb -3484784,ac640004 -3484788,8e030008 -348478c,24640008 -3484790,ae040008 -3484794,3c04fa00 +3484640,94430934 +3484644,24020006 +3484648,14620256 +348464c,808025 +3484650,3c02801c +3484654,344284a0 +3484658,3c030001 +348465c,431021 +3484660,94420948 +3484664,1440024f +3484668,3c02801c +348466c,344284a0 +3484670,431021 +3484674,94420944 +3484678,1440024a +348467c,3c02801c +3484680,344284a0 +3484684,84420014 +3484688,4430247 +348468c,8fbf006c +3484690,8c820004 +3484694,24430008 +3484698,ac830008 +348469c,3c03de00 +34846a0,ac430000 +34846a4,3c038041 +34846a8,2463a488 +34846ac,ac430004 +34846b0,3c028011 +34846b4,3442a5d0 +34846b8,94430f2e +34846bc,3c028041 +34846c0,8c42b4b8 +34846c4,10400012 +34846c8,3025 +34846cc,3c028041 +34846d0,8c42b554 +34846d4,10400010 +34846d8,24060001 +34846dc,30620001 +34846e0,54400006 +34846e4,30630002 +34846e8,3c028041 +34846ec,8c42b554 +34846f0,1040000c +34846f4,3025 +34846f8,30630002 +34846fc,24020001 +3484700,1460000a +3484704,afa2003c +3484708,10000008 +348470c,afa0003c +3484710,10000006 +3484714,afa0003c +3484718,24020001 +348471c,10000003 +3484720,afa2003c +3484724,24020001 +3484728,afa2003c +348472c,3c028041 +3484730,8c55b560 +3484734,12a00007 +3484738,2a01825 +348473c,3c028041 +3484740,9442a43c +3484744,21840 +3484748,621821 +348474c,31840 +3484750,24630001 +3484754,3c028041 +3484758,9442a43c +348475c,210c0 +3484760,24420057 +3484764,431021 +3484768,24030140 +348476c,621823 +3484770,38fc2 +3484774,2238821 +3484778,118843 +348477c,26230001 +3484780,afa30038 +3484784,8e030008 +3484788,24640008 +348478c,ae040008 +3484790,3c04fcff +3484794,3484ffff 3484798,ac640000 -348479c,240400d0 -34847a0,ac640004 -34847a4,511021 -34847a8,21380 -34847ac,3c0300ff -34847b0,3463f000 -34847b4,431024 -34847b8,3c04e400 -34847bc,2484039c -34847c0,441025 -34847c4,afa20020 -34847c8,111380 -34847cc,431024 -34847d0,34420024 -34847d4,afa20024 -34847d8,3c02e100 -34847dc,afa20028 -34847e0,afa0002c -34847e4,3c02f100 -34847e8,afa20030 -34847ec,3c020400 -34847f0,24420400 -34847f4,afa20034 -34847f8,27a20020 -34847fc,27a70038 -3484800,8e030008 -3484804,24640008 -3484808,ae040008 -348480c,8c450004 -3484810,8c440000 -3484814,ac650004 -3484818,24420008 -348481c,14e2fff8 -3484820,ac640000 -3484824,8e020008 -3484828,24430008 -348482c,ae030008 -3484830,3c03e700 -3484834,ac430000 -3484838,ac400004 -348483c,8e020008 -3484840,24430008 -3484844,ae030008 -3484848,3c03fc11 -348484c,34639623 -3484850,ac430000 -3484854,3c03ff2f -3484858,3463ffff -348485c,10c0004c -3484860,ac430004 -3484864,3c058041 -3484868,24a5a448 -348486c,94a70008 -3484870,3025 -3484874,c101bd7 -3484878,2002025 -348487c,3c028041 -3484880,8c42b4a0 -3484884,18400042 -3484888,3c028041 -348488c,3c128041 -3484890,2652a278 -3484894,2414000a -3484898,9825 -348489c,3c1e8041 -34848a0,3c168041 -34848a4,26d6a254 -34848a8,2442a264 -34848ac,afa20040 -34848b0,3c028041 -34848b4,2442a448 -34848b8,afa20044 -34848bc,3c178041 -34848c0,8fc2b538 -34848c4,5040000b -34848c8,92420000 -34848cc,92430000 -34848d0,3c028011 -34848d4,3442a5d0 -34848d8,431021 -34848dc,904200a8 -34848e0,21042 -34848e4,30420001 -34848e8,50400024 -34848ec,26730001 -34848f0,92420000 -34848f4,561021 -34848f8,80460000 -34848fc,28c20003 -3484900,5440001e -3484904,26730001 -3484908,24c6fffd -348490c,61840 -3484910,661821 -3484914,8fa20040 -3484918,621821 -348491c,90620000 -3484920,21600 -3484924,90640002 -3484928,42200 -348492c,441025 -3484930,90630001 -3484934,31c00 -3484938,431025 -348493c,344200ff -3484940,8e030008 -3484944,24640008 -3484948,ae040008 -348494c,3c04fa00 -3484950,ac640000 -3484954,ac620004 -3484958,24020010 -348495c,afa20018 -3484960,afa20014 -3484964,afb40010 -3484968,8fa70038 -348496c,8fa50044 -3484970,c101c3f -3484974,2002025 -3484978,26730001 -348497c,2652000c -3484980,8ee2b4a0 -3484984,262102a -3484988,1440ffcd -348498c,26940011 -3484990,8e020008 -3484994,24430008 -3484998,ae030008 -348499c,3c03fa00 -34849a0,ac430000 -34849a4,2403ffff -34849a8,ac430004 -34849ac,8fa2003c -34849b0,10400037 -34849b4,3c028041 -34849b8,3c058041 -34849bc,24a5a458 -34849c0,94a70008 -34849c4,3025 -34849c8,c101bd7 -34849cc,2002025 -34849d0,3c028041 -34849d4,8c42b4a0 -34849d8,18400168 -34849dc,3c1e8041 -34849e0,3c128041 -34849e4,2652a278 -34849e8,2414000a -34849ec,9825 -34849f0,3c168041 -34849f4,26d6a254 -34849f8,3c028041 -34849fc,2442a458 -3484a00,afa20040 -3484a04,3c028011 -3484a08,3442a5d0 -3484a0c,afa2003c -3484a10,3c178041 -3484a14,8fc2b538 -3484a18,10400009 -3484a1c,92420000 -3484a20,8fa3003c -3484a24,621021 -3484a28,904200a8 -3484a2c,21042 -3484a30,30420001 -3484a34,50400010 -3484a38,26730001 +348479c,3c04fffd +34847a0,3484f6fb +34847a4,ac640004 +34847a8,8e030008 +34847ac,24640008 +34847b0,ae040008 +34847b4,3c04fa00 +34847b8,ac640000 +34847bc,240400d0 +34847c0,ac640004 +34847c4,511021 +34847c8,21380 +34847cc,3c0300ff +34847d0,3463f000 +34847d4,431024 +34847d8,3c04e400 +34847dc,2484039c +34847e0,441025 +34847e4,afa20020 +34847e8,111380 +34847ec,431024 +34847f0,34420024 +34847f4,afa20024 +34847f8,3c02e100 +34847fc,afa20028 +3484800,afa0002c +3484804,3c02f100 +3484808,afa20030 +348480c,3c020400 +3484810,24420400 +3484814,afa20034 +3484818,27a20020 +348481c,27a70038 +3484820,8e030008 +3484824,24640008 +3484828,ae040008 +348482c,8c450004 +3484830,8c440000 +3484834,ac650004 +3484838,24420008 +348483c,14e2fff8 +3484840,ac640000 +3484844,8e020008 +3484848,24430008 +348484c,ae030008 +3484850,3c03e700 +3484854,ac430000 +3484858,ac400004 +348485c,8e020008 +3484860,24430008 +3484864,ae030008 +3484868,3c03fc11 +348486c,34639623 +3484870,ac430000 +3484874,3c03ff2f +3484878,3463ffff +348487c,10c0004c +3484880,ac430004 +3484884,3c058041 +3484888,24a5a468 +348488c,94a70008 +3484890,3025 +3484894,c101bdf +3484898,2002025 +348489c,3c028041 +34848a0,8c42b4c0 +34848a4,18400042 +34848a8,3c028041 +34848ac,3c128041 +34848b0,2652a298 +34848b4,2414000a +34848b8,9825 +34848bc,3c1e8041 +34848c0,3c168041 +34848c4,26d6a274 +34848c8,2442a284 +34848cc,afa20040 +34848d0,3c028041 +34848d4,2442a468 +34848d8,afa20044 +34848dc,3c178041 +34848e0,8fc2b558 +34848e4,5040000b +34848e8,92420000 +34848ec,92430000 +34848f0,3c028011 +34848f4,3442a5d0 +34848f8,431021 +34848fc,904200a8 +3484900,21042 +3484904,30420001 +3484908,50400024 +348490c,26730001 +3484910,92420000 +3484914,561021 +3484918,80460000 +348491c,28c20003 +3484920,5440001e +3484924,26730001 +3484928,24c6fffd +348492c,61840 +3484930,661821 +3484934,8fa20040 +3484938,621821 +348493c,90620000 +3484940,21600 +3484944,90640002 +3484948,42200 +348494c,441025 +3484950,90630001 +3484954,31c00 +3484958,431025 +348495c,344200ff +3484960,8e030008 +3484964,24640008 +3484968,ae040008 +348496c,3c04fa00 +3484970,ac640000 +3484974,ac620004 +3484978,24020010 +348497c,afa20018 +3484980,afa20014 +3484984,afb40010 +3484988,8fa70038 +348498c,8fa50044 +3484990,c101c47 +3484994,2002025 +3484998,26730001 +348499c,2652000c +34849a0,8ee2b4c0 +34849a4,262102a +34849a8,1440ffcd +34849ac,26940011 +34849b0,8e020008 +34849b4,24430008 +34849b8,ae030008 +34849bc,3c03fa00 +34849c0,ac430000 +34849c4,2403ffff +34849c8,ac430004 +34849cc,8fa2003c +34849d0,10400037 +34849d4,3c028041 +34849d8,3c058041 +34849dc,24a5a478 +34849e0,94a70008 +34849e4,3025 +34849e8,c101bdf +34849ec,2002025 +34849f0,3c028041 +34849f4,8c42b4c0 +34849f8,18400168 +34849fc,3c1e8041 +3484a00,3c128041 +3484a04,2652a298 +3484a08,2414000a +3484a0c,9825 +3484a10,3c168041 +3484a14,26d6a274 +3484a18,3c028041 +3484a1c,2442a478 +3484a20,afa20040 +3484a24,3c028011 +3484a28,3442a5d0 +3484a2c,afa2003c +3484a30,3c178041 +3484a34,8fc2b558 +3484a38,10400009 3484a3c,92420000 -3484a40,561021 -3484a44,80460000 -3484a48,2cc20003 -3484a4c,5040000a -3484a50,26730001 -3484a54,24020010 -3484a58,afa20018 -3484a5c,afa20014 -3484a60,afb40010 -3484a64,8fa70038 -3484a68,8fa50040 -3484a6c,c101c3f -3484a70,2002025 -3484a74,26730001 -3484a78,2652000c -3484a7c,8ee2b4a0 -3484a80,262102a -3484a84,1440ffe3 -3484a88,26940011 -3484a8c,3c028041 -3484a90,8c42b4a0 -3484a94,18400010 -3484a98,26310012 -3484a9c,3c128041 -3484aa0,2652a27a -3484aa4,2414000b -3484aa8,9825 -3484aac,3c168041 -3484ab0,2803025 -3484ab4,2202825 -3484ab8,c102559 -3484abc,2402025 -3484ac0,26730001 -3484ac4,2652000c -3484ac8,8ec2b4a0 -3484acc,262102a -3484ad0,1440fff7 -3484ad4,26940011 -3484ad8,3c028041 -3484adc,9456a41c -3484ae0,16b0c0 -3484ae4,26d60001 -3484ae8,2d1b021 -3484aec,24070001 -3484af0,24060011 -3484af4,3c058041 -3484af8,24a5a428 -3484afc,c101bd7 -3484b00,2002025 -3484b04,3c028041 -3484b08,8c42b4a0 -3484b0c,18400024 -3484b10,241e3000 -3484b14,3c118041 -3484b18,2631a278 -3484b1c,2413000b -3484b20,9025 -3484b24,3c178011 -3484b28,36f7a5d0 -3484b2c,3c148041 -3484b30,82220001 -3484b34,4430015 -3484b38,26520001 -3484b3c,92220000 -3484b40,2e21021 -3484b44,904200bc -3484b48,21e00 -3484b4c,31e03 -3484b50,2863000a -3484b54,50600001 -3484b58,24020009 -3484b5c,21e00 -3484b60,31e03 -3484b64,4620001 -3484b68,1025 -3484b6c,a7be0020 -3484b70,24420030 -3484b74,a3a20020 -3484b78,2603025 -3484b7c,2c02825 -3484b80,c102559 -3484b84,27a40020 -3484b88,26520001 -3484b8c,2631000c -3484b90,8e82b4a0 -3484b94,242102a -3484b98,1440ffe5 -3484b9c,26730011 -3484ba0,26de0011 -3484ba4,24070001 -3484ba8,2406000e -3484bac,3c058041 -3484bb0,24a5a428 -3484bb4,c101bd7 -3484bb8,2002025 -3484bbc,3c028041 -3484bc0,8c42b4a0 -3484bc4,18400027 -3484bc8,3c028041 -3484bcc,3c118041 -3484bd0,2631a278 -3484bd4,2413000a -3484bd8,9025 -3484bdc,3c178011 -3484be0,36f7a5d0 -3484be4,2442a428 -3484be8,afa20038 -3484bec,3c148041 -3484bf0,92230000 -3484bf4,2404000d -3484bf8,14640002 -3484bfc,2201025 -3484c00,2403000a -3484c04,90420001 -3484c08,30420040 -3484c0c,50400010 -3484c10,26520001 -3484c14,2e31821 -3484c18,906200a8 -3484c1c,30420001 -3484c20,5040000b -3484c24,26520001 -3484c28,24020010 -3484c2c,afa20018 -3484c30,afa20014 -3484c34,afb30010 -3484c38,3c03825 -3484c3c,3025 -3484c40,8fa50038 -3484c44,c101c3f -3484c48,2002025 -3484c4c,26520001 -3484c50,2631000c -3484c54,8e82b4a0 -3484c58,242102a -3484c5c,1440ffe4 -3484c60,26730011 -3484c64,24070001 -3484c68,2406000a -3484c6c,3c058041 -3484c70,24a5a428 -3484c74,c101bd7 -3484c78,2002025 -3484c7c,3c028041 -3484c80,8c42b4a0 -3484c84,18400022 -3484c88,3c028041 -3484c8c,3c118041 -3484c90,2631a279 -3484c94,2413000a -3484c98,9025 -3484c9c,3c178011 -3484ca0,36f7a5d0 -3484ca4,2442a428 -3484ca8,afa20038 -3484cac,3c148041 -3484cb0,92220000 -3484cb4,30420020 -3484cb8,50400010 -3484cbc,26520001 -3484cc0,8ee200a4 -3484cc4,3c030040 -3484cc8,431024 -3484ccc,5040000b -3484cd0,26520001 -3484cd4,24020010 -3484cd8,afa20018 -3484cdc,afa20014 -3484ce0,afb30010 -3484ce4,3c03825 -3484ce8,3025 -3484cec,8fa50038 -3484cf0,c101c3f -3484cf4,2002025 -3484cf8,26520001 -3484cfc,2631000c -3484d00,8e82b4a0 -3484d04,242102a -3484d08,1440ffe9 -3484d0c,26730011 -3484d10,26de0022 -3484d14,24070001 -3484d18,24060010 -3484d1c,3c058041 -3484d20,24a5a428 -3484d24,c101bd7 -3484d28,2002025 -3484d2c,3c028041 -3484d30,8c42b4a0 -3484d34,18400024 -3484d38,3c118041 -3484d3c,2631a278 -3484d40,2413000a -3484d44,9025 -3484d48,3c178011 -3484d4c,36f7a5d0 -3484d50,3c028041 -3484d54,2442a428 -3484d58,afa20038 -3484d5c,3c148041 -3484d60,92220001 -3484d64,30420010 -3484d68,50400012 -3484d6c,26520001 -3484d70,92220000 -3484d74,2e21021 -3484d78,904200a8 -3484d7c,21082 -3484d80,30420001 -3484d84,5040000b -3484d88,26520001 -3484d8c,24020010 -3484d90,afa20018 -3484d94,afa20014 -3484d98,afb30010 -3484d9c,3c03825 -3484da0,3025 -3484da4,8fa50038 -3484da8,c101c3f -3484dac,2002025 -3484db0,26520001 -3484db4,2631000c -3484db8,8e82b4a0 -3484dbc,242102a -3484dc0,1440ffe7 -3484dc4,26730011 -3484dc8,26c20033 -3484dcc,afa20038 -3484dd0,24070001 -3484dd4,2406000f -3484dd8,3c058041 -3484ddc,24a5a428 -3484de0,c101bd7 -3484de4,2002025 -3484de8,3c028041 -3484dec,8c42b4a0 -3484df0,18400053 -3484df4,3c148041 -3484df8,2694a278 -3484dfc,2808825 -3484e00,2413000a -3484e04,9025 -3484e08,3c1e8011 -3484e0c,37dea5d0 -3484e10,3c028041 -3484e14,2442a428 -3484e18,afa2003c -3484e1c,3c178041 -3484e20,92220001 -3484e24,30420010 -3484e28,50400012 -3484e2c,26520001 -3484e30,92220000 -3484e34,3c21021 -3484e38,904200a8 -3484e3c,21042 -3484e40,30420001 -3484e44,5040000b -3484e48,26520001 -3484e4c,24020010 -3484e50,afa20018 -3484e54,afa20014 -3484e58,afb30010 -3484e5c,8fa70038 -3484e60,3025 -3484e64,8fa5003c -3484e68,c101c3f -3484e6c,2002025 -3484e70,26520001 -3484e74,8ee2b4a0 -3484e78,2631000c -3484e7c,242182a -3484e80,1460ffe7 -3484e84,26730011 -3484e88,12a0002d -3484e90,1840002b -3484e94,26d60044 -3484e98,2412000b -3484e9c,8825 -3484ea0,3c1e8041 -3484ea4,3c158041 -3484ea8,26b5b5a8 -3484eac,3c138041 -3484eb0,2673a1d8 -3484eb4,3c028041 -3484eb8,2442a1dc -3484ebc,afa20038 -3484ec0,3c178041 -3484ec4,8fc2b53c -3484ec8,5040000f -3484ecc,92820000 -3484ed0,92820001 -3484ed4,30420010 -3484ed8,5040000b -3484edc,92820000 -3484ee0,92830000 -3484ee4,3c028011 -3484ee8,3442a5d0 -3484eec,431021 -3484ef0,904200a8 -3484ef4,21082 -3484ef8,30420001 -3484efc,5040000b -3484f00,26310001 -3484f04,92820000 -3484f08,551021 -3484f0c,90420000 -3484f10,14400002 -3484f14,2602025 -3484f18,8fa40038 -3484f1c,2403025 -3484f20,c102559 -3484f24,2c02825 -3484f28,26310001 -3484f2c,2694000c -3484f30,8ee2b4a0 -3484f34,222102a -3484f38,1440ffe2 -3484f3c,26520011 -3484f40,c102583 -3484f44,2002025 -3484f48,8e020008 -3484f4c,24430008 -3484f50,ae030008 -3484f54,3c03e900 -3484f58,ac430000 -3484f5c,ac400004 -3484f60,8e020008 -3484f64,24430008 -3484f68,ae030008 -3484f6c,3c03df00 -3484f70,ac430000 -3484f74,10000003 -3484f78,ac400004 -3484f7c,1000fed6 -3484f80,26310012 -3484f84,8fbf006c -3484f88,8fbe0068 -3484f8c,8fb70064 -3484f90,8fb60060 -3484f94,8fb5005c -3484f98,8fb40058 -3484f9c,8fb30054 -3484fa0,8fb20050 -3484fa4,8fb1004c -3484fa8,8fb00048 -3484fac,3e00008 -3484fb0,27bd0070 -3484fb4,3e00008 -3484fbc,44860000 -3484fc0,44801000 -3484fc8,46020032 -3484fd0,45030011 -3484fd4,46007006 -3484fd8,460e603c -3484fe0,45000007 -3484fe4,460c0000 -3484fe8,4600703c -3484ff0,45000009 -3484ff8,3e00008 -3484ffc,46007006 -3485000,460e003c -3485008,45000003 -3485010,3e00008 -3485014,46007006 +3484a40,8fa3003c +3484a44,621021 +3484a48,904200a8 +3484a4c,21042 +3484a50,30420001 +3484a54,50400010 +3484a58,26730001 +3484a5c,92420000 +3484a60,561021 +3484a64,80460000 +3484a68,2cc20003 +3484a6c,5040000a +3484a70,26730001 +3484a74,24020010 +3484a78,afa20018 +3484a7c,afa20014 +3484a80,afb40010 +3484a84,8fa70038 +3484a88,8fa50040 +3484a8c,c101c47 +3484a90,2002025 +3484a94,26730001 +3484a98,2652000c +3484a9c,8ee2b4c0 +3484aa0,262102a +3484aa4,1440ffe3 +3484aa8,26940011 +3484aac,3c028041 +3484ab0,8c42b4c0 +3484ab4,18400010 +3484ab8,26310012 +3484abc,3c128041 +3484ac0,2652a29a +3484ac4,2414000b +3484ac8,9825 +3484acc,3c168041 +3484ad0,2803025 +3484ad4,2202825 +3484ad8,c102561 +3484adc,2402025 +3484ae0,26730001 +3484ae4,2652000c +3484ae8,8ec2b4c0 +3484aec,262102a +3484af0,1440fff7 +3484af4,26940011 +3484af8,3c028041 +3484afc,9456a43c +3484b00,16b0c0 +3484b04,26d60001 +3484b08,2d1b021 +3484b0c,24070001 +3484b10,24060011 +3484b14,3c058041 +3484b18,24a5a448 +3484b1c,c101bdf +3484b20,2002025 +3484b24,3c028041 +3484b28,8c42b4c0 +3484b2c,18400024 +3484b30,241e3000 +3484b34,3c118041 +3484b38,2631a298 +3484b3c,2413000b +3484b40,9025 +3484b44,3c178011 +3484b48,36f7a5d0 +3484b4c,3c148041 +3484b50,82220001 +3484b54,4430015 +3484b58,26520001 +3484b5c,92220000 +3484b60,2e21021 +3484b64,904200bc +3484b68,21e00 +3484b6c,31e03 +3484b70,2863000a +3484b74,50600001 +3484b78,24020009 +3484b7c,21e00 +3484b80,31e03 +3484b84,4620001 +3484b88,1025 +3484b8c,a7be0020 +3484b90,24420030 +3484b94,a3a20020 +3484b98,2603025 +3484b9c,2c02825 +3484ba0,c102561 +3484ba4,27a40020 +3484ba8,26520001 +3484bac,2631000c +3484bb0,8e82b4c0 +3484bb4,242102a +3484bb8,1440ffe5 +3484bbc,26730011 +3484bc0,26de0011 +3484bc4,24070001 +3484bc8,2406000e +3484bcc,3c058041 +3484bd0,24a5a448 +3484bd4,c101bdf +3484bd8,2002025 +3484bdc,3c028041 +3484be0,8c42b4c0 +3484be4,18400027 +3484be8,3c028041 +3484bec,3c118041 +3484bf0,2631a298 +3484bf4,2413000a +3484bf8,9025 +3484bfc,3c178011 +3484c00,36f7a5d0 +3484c04,2442a448 +3484c08,afa20038 +3484c0c,3c148041 +3484c10,92230000 +3484c14,2404000d +3484c18,14640002 +3484c1c,2201025 +3484c20,2403000a +3484c24,90420001 +3484c28,30420040 +3484c2c,50400010 +3484c30,26520001 +3484c34,2e31821 +3484c38,906200a8 +3484c3c,30420001 +3484c40,5040000b +3484c44,26520001 +3484c48,24020010 +3484c4c,afa20018 +3484c50,afa20014 +3484c54,afb30010 +3484c58,3c03825 +3484c5c,3025 +3484c60,8fa50038 +3484c64,c101c47 +3484c68,2002025 +3484c6c,26520001 +3484c70,2631000c +3484c74,8e82b4c0 +3484c78,242102a +3484c7c,1440ffe4 +3484c80,26730011 +3484c84,24070001 +3484c88,2406000a +3484c8c,3c058041 +3484c90,24a5a448 +3484c94,c101bdf +3484c98,2002025 +3484c9c,3c028041 +3484ca0,8c42b4c0 +3484ca4,18400022 +3484ca8,3c028041 +3484cac,3c118041 +3484cb0,2631a299 +3484cb4,2413000a +3484cb8,9025 +3484cbc,3c178011 +3484cc0,36f7a5d0 +3484cc4,2442a448 +3484cc8,afa20038 +3484ccc,3c148041 +3484cd0,92220000 +3484cd4,30420020 +3484cd8,50400010 +3484cdc,26520001 +3484ce0,8ee200a4 +3484ce4,3c030040 +3484ce8,431024 +3484cec,5040000b +3484cf0,26520001 +3484cf4,24020010 +3484cf8,afa20018 +3484cfc,afa20014 +3484d00,afb30010 +3484d04,3c03825 +3484d08,3025 +3484d0c,8fa50038 +3484d10,c101c47 +3484d14,2002025 +3484d18,26520001 +3484d1c,2631000c +3484d20,8e82b4c0 +3484d24,242102a +3484d28,1440ffe9 +3484d2c,26730011 +3484d30,26de0022 +3484d34,24070001 +3484d38,24060010 +3484d3c,3c058041 +3484d40,24a5a448 +3484d44,c101bdf +3484d48,2002025 +3484d4c,3c028041 +3484d50,8c42b4c0 +3484d54,18400024 +3484d58,3c118041 +3484d5c,2631a298 +3484d60,2413000a +3484d64,9025 +3484d68,3c178011 +3484d6c,36f7a5d0 +3484d70,3c028041 +3484d74,2442a448 +3484d78,afa20038 +3484d7c,3c148041 +3484d80,92220001 +3484d84,30420010 +3484d88,50400012 +3484d8c,26520001 +3484d90,92220000 +3484d94,2e21021 +3484d98,904200a8 +3484d9c,21082 +3484da0,30420001 +3484da4,5040000b +3484da8,26520001 +3484dac,24020010 +3484db0,afa20018 +3484db4,afa20014 +3484db8,afb30010 +3484dbc,3c03825 +3484dc0,3025 +3484dc4,8fa50038 +3484dc8,c101c47 +3484dcc,2002025 +3484dd0,26520001 +3484dd4,2631000c +3484dd8,8e82b4c0 +3484ddc,242102a +3484de0,1440ffe7 +3484de4,26730011 +3484de8,26c20033 +3484dec,afa20038 +3484df0,24070001 +3484df4,2406000f +3484df8,3c058041 +3484dfc,24a5a448 +3484e00,c101bdf +3484e04,2002025 +3484e08,3c028041 +3484e0c,8c42b4c0 +3484e10,18400053 +3484e14,3c148041 +3484e18,2694a298 +3484e1c,2808825 +3484e20,2413000a +3484e24,9025 +3484e28,3c1e8011 +3484e2c,37dea5d0 +3484e30,3c028041 +3484e34,2442a448 +3484e38,afa2003c +3484e3c,3c178041 +3484e40,92220001 +3484e44,30420010 +3484e48,50400012 +3484e4c,26520001 +3484e50,92220000 +3484e54,3c21021 +3484e58,904200a8 +3484e5c,21042 +3484e60,30420001 +3484e64,5040000b +3484e68,26520001 +3484e6c,24020010 +3484e70,afa20018 +3484e74,afa20014 +3484e78,afb30010 +3484e7c,8fa70038 +3484e80,3025 +3484e84,8fa5003c +3484e88,c101c47 +3484e8c,2002025 +3484e90,26520001 +3484e94,8ee2b4c0 +3484e98,2631000c +3484e9c,242182a +3484ea0,1460ffe7 +3484ea4,26730011 +3484ea8,12a0002d +3484eb0,1840002b +3484eb4,26d60044 +3484eb8,2412000b +3484ebc,8825 +3484ec0,3c1e8041 +3484ec4,3c158041 +3484ec8,26b5b5c8 +3484ecc,3c138041 +3484ed0,2673a1f8 +3484ed4,3c028041 +3484ed8,2442a1fc +3484edc,afa20038 +3484ee0,3c178041 +3484ee4,8fc2b55c +3484ee8,5040000f +3484eec,92820000 +3484ef0,92820001 +3484ef4,30420010 +3484ef8,5040000b +3484efc,92820000 +3484f00,92830000 +3484f04,3c028011 +3484f08,3442a5d0 +3484f0c,431021 +3484f10,904200a8 +3484f14,21082 +3484f18,30420001 +3484f1c,5040000b +3484f20,26310001 +3484f24,92820000 +3484f28,551021 +3484f2c,90420000 +3484f30,14400002 +3484f34,2602025 +3484f38,8fa40038 +3484f3c,2403025 +3484f40,c102561 +3484f44,2c02825 +3484f48,26310001 +3484f4c,2694000c +3484f50,8ee2b4c0 +3484f54,222102a +3484f58,1440ffe2 +3484f5c,26520011 +3484f60,c10258b +3484f64,2002025 +3484f68,8e020008 +3484f6c,24430008 +3484f70,ae030008 +3484f74,3c03e900 +3484f78,ac430000 +3484f7c,ac400004 +3484f80,8e020008 +3484f84,24430008 +3484f88,ae030008 +3484f8c,3c03df00 +3484f90,ac430000 +3484f94,10000003 +3484f98,ac400004 +3484f9c,1000fed6 +3484fa0,26310012 +3484fa4,8fbf006c +3484fa8,8fbe0068 +3484fac,8fb70064 +3484fb0,8fb60060 +3484fb4,8fb5005c +3484fb8,8fb40058 +3484fbc,8fb30054 +3484fc0,8fb20050 +3484fc4,8fb1004c +3484fc8,8fb00048 +3484fcc,3e00008 +3484fd0,27bd0070 +3484fd4,3e00008 +3484fdc,44860000 +3484fe0,44801000 +3484fe8,46020032 +3484ff0,45030011 +3484ff4,46007006 +3484ff8,460e603c +3485000,45000007 +3485004,460c0000 +3485008,4600703c +3485010,45000009 3485018,3e00008 -3485020,3c02801c -3485024,344284a0 -3485028,c44000d4 -348502c,3c028041 +348501c,46007006 +3485020,460e003c +3485028,45000003 3485030,3e00008 -3485034,e440b4a8 -3485038,27bdffe8 -348503c,afbf0014 -3485040,3c028041 -3485044,9042a320 -3485048,5040001b +3485034,46007006 +3485038,3e00008 +3485040,3c02801c +3485044,344284a0 +3485048,c44000d4 348504c,3c028041 -3485050,3c038011 -3485054,3463a5d0 -3485058,8c630070 -348505c,31f02 -3485060,1062000d -3485064,21300 -3485068,3c048011 -348506c,3484a5d0 -3485070,94830070 -3485074,30630fff -3485078,621025 -348507c,a4820070 -3485080,3c04801d -3485084,3485aa30 -3485088,3c028007 -348508c,34429764 -3485090,40f809 -3485094,248484a0 -3485098,3c028041 -348509c,9043a320 -34850a0,24020001 -34850a4,14620004 -34850a8,3c028041 -34850ac,3c028041 -34850b0,a040a320 -34850b4,3c028041 -34850b8,c44ea318 -34850bc,44800000 -34850c4,46007032 -34850cc,45010010 -34850d0,3c02801c -34850d4,344284a0 -34850d8,c44000d4 -34850dc,46007032 -34850e4,45010019 -34850e8,3c02801c -34850ec,3c028041 -34850f0,8c46a1e4 -34850f4,3c028041 -34850f8,c1013ef -34850fc,c44cb4a4 -3485100,3c02801c -3485104,344284a0 -3485108,1000000f -348510c,e44000d4 -3485110,344284a0 -3485114,c44c00d4 -3485118,3c028041 -348511c,c44eb4a8 -3485120,460e6032 -3485128,45010008 -348512c,3c02801c -3485130,3c028041 -3485134,c1013ef -3485138,8c46a1e8 -348513c,3c02801c -3485140,344284a0 -3485144,e44000d4 -3485148,3c02801c -348514c,344284a0 -3485150,c44000d4 -3485154,3c028041 -3485158,e440b4a4 -348515c,3c028041 -3485160,9042a321 -3485164,24030001 -3485168,1443000f -348516c,24030002 -3485170,3c02801c -3485174,344284a0 -3485178,94420322 -348517c,3c038041 -3485180,24639fd0 -3485184,431021 -3485188,90420000 -348518c,10400018 -3485190,3c028041 -3485194,3c02801c -3485198,344284a0 -348519c,24030035 -34851a0,10000012 -34851a4,a4430322 -34851a8,14430011 -34851ac,3c028041 -34851b0,3c02801c -34851b4,344284a0 -34851b8,94420322 -34851bc,3c038041 -34851c0,24639fd0 -34851c4,431021 -34851c8,90420000 -34851cc,10400006 -34851d0,3c028041 -34851d4,3c02801c -34851d8,344284a0 -34851dc,2403001f -34851e0,a4430322 -34851e4,3c028041 -34851e8,a040a321 -34851ec,3c028041 -34851f0,2442a314 -34851f4,c4400008 -34851f8,3c038040 -34851fc,e4602738 -3485200,9044000e -3485204,3c038040 -3485208,a0642c89 -348520c,9042000f -3485210,50400006 -3485214,3c028041 -3485218,2442ffff -348521c,3c038041 -3485220,c101df7 -3485224,a062a323 -3485228,3c028041 -348522c,9042a324 -3485230,1040000b +3485050,3e00008 +3485054,e440b4c8 +3485058,27bdffe8 +348505c,afbf0014 +3485060,3c028041 +3485064,9042a340 +3485068,5040001b +348506c,3c028041 +3485070,3c038011 +3485074,3463a5d0 +3485078,8c630070 +348507c,31f02 +3485080,1062000d +3485084,21300 +3485088,3c048011 +348508c,3484a5d0 +3485090,94830070 +3485094,30630fff +3485098,621025 +348509c,a4820070 +34850a0,3c04801d +34850a4,3485aa30 +34850a8,3c028007 +34850ac,34429764 +34850b0,40f809 +34850b4,248484a0 +34850b8,3c028041 +34850bc,9043a340 +34850c0,24020001 +34850c4,14620004 +34850c8,3c028041 +34850cc,3c028041 +34850d0,a040a340 +34850d4,3c028041 +34850d8,c44ea338 +34850dc,44800000 +34850e4,46007032 +34850ec,45010010 +34850f0,3c02801c +34850f4,344284a0 +34850f8,c44000d4 +34850fc,46007032 +3485104,45010019 +3485108,3c02801c +348510c,3c028041 +3485110,8c46a204 +3485114,3c028041 +3485118,c1013f7 +348511c,c44cb4c4 +3485120,3c02801c +3485124,344284a0 +3485128,1000000f +348512c,e44000d4 +3485130,344284a0 +3485134,c44c00d4 +3485138,3c028041 +348513c,c44eb4c8 +3485140,460e6032 +3485148,45010008 +348514c,3c02801c +3485150,3c028041 +3485154,c1013f7 +3485158,8c46a208 +348515c,3c02801c +3485160,344284a0 +3485164,e44000d4 +3485168,3c02801c +348516c,344284a0 +3485170,c44000d4 +3485174,3c028041 +3485178,e440b4c4 +348517c,3c028041 +3485180,9042a341 +3485184,24030001 +3485188,1443000f +348518c,24030002 +3485190,3c02801c +3485194,344284a0 +3485198,94420322 +348519c,3c038041 +34851a0,24639ff0 +34851a4,431021 +34851a8,90420000 +34851ac,10400018 +34851b0,3c028041 +34851b4,3c02801c +34851b8,344284a0 +34851bc,24030035 +34851c0,10000012 +34851c4,a4430322 +34851c8,14430011 +34851cc,3c028041 +34851d0,3c02801c +34851d4,344284a0 +34851d8,94420322 +34851dc,3c038041 +34851e0,24639ff0 +34851e4,431021 +34851e8,90420000 +34851ec,10400006 +34851f0,3c028041 +34851f4,3c02801c +34851f8,344284a0 +34851fc,2403001f +3485200,a4430322 +3485204,3c028041 +3485208,a040a341 +348520c,3c028041 +3485210,2442a334 +3485214,c4400008 +3485218,3c038040 +348521c,e4602750 +3485220,9044000e +3485224,3c038040 +3485228,a0642ca1 +348522c,9042000f +3485230,50400006 3485234,3c028041 -3485238,3c02801c -348523c,344284a0 -3485240,94430014 -3485244,2404dfff -3485248,641824 -348524c,a4430014 -3485250,94430020 -3485254,641824 -3485258,a4430020 -348525c,3c028041 -3485260,9042a325 -3485264,10400016 -3485268,8fbf0014 -348526c,3c02801c -3485270,344284a0 -3485274,90430016 -3485278,31823 -348527c,a0430016 -3485280,90430017 -3485284,31823 -3485288,a0430017 -348528c,90430022 -3485290,31823 -3485294,a0430022 -3485298,90430023 -348529c,31823 -34852a0,a0430023 -34852a4,90430028 -34852a8,31823 -34852ac,a0430028 -34852b0,90430029 -34852b4,31823 -34852b8,a0430029 -34852bc,8fbf0014 -34852c0,3e00008 -34852c4,27bd0018 -34852c8,850018 -34852cc,1812 -34852d0,24620001 -34852d4,3042ffff -34852d8,31a02 -34852dc,431021 -34852e0,21203 -34852e4,3e00008 -34852e8,304200ff -34852ec,2402ffff -34852f0,a0820002 -34852f4,a0820001 -34852f8,4a00031 -34852fc,a0820000 -3485300,a01825 -3485304,28a503e8 -3485308,50a00001 -348530c,240303e7 -3485310,31c00 -3485314,31c03 -3485318,3c026666 -348531c,24426667 -3485320,620018 -3485324,1010 -3485328,21083 -348532c,32fc3 -3485330,451023 -3485334,22880 -3485338,a22821 -348533c,52840 -3485340,651823 -3485344,21400 -3485348,21403 -348534c,1040001c -3485350,a0830002 -3485354,3c036666 -3485358,24636667 -348535c,430018 -3485360,1810 -3485364,31883 -3485368,22fc3 -348536c,651823 -3485370,32880 -3485374,a32821 -3485378,52840 -348537c,451023 -3485380,a0820001 -3485384,31400 -3485388,21403 -348538c,1040000c -3485390,3c036666 -3485394,24636667 -3485398,430018 -348539c,1810 -34853a0,31883 -34853a4,22fc3 -34853a8,651823 -34853ac,32880 -34853b0,a31821 -34853b4,31840 -34853b8,431023 -34853bc,a0820000 -34853c0,3e00008 -34853c8,27bdffd0 -34853cc,afbf002c -34853d0,afb20028 -34853d4,afb10024 -34853d8,afb00020 -34853dc,808025 -34853e0,a08825 -34853e4,afa7003c -34853e8,8fb20040 -34853ec,c101bd7 -34853f0,24070001 -34853f4,93a7003c -34853f8,afb20018 -34853fc,afb20014 -3485400,83a2003d -3485404,2442005c -3485408,afa20010 -348540c,24e70037 -3485410,3025 -3485414,2202825 -3485418,c101c3f -348541c,2002025 -3485420,8fbf002c -3485424,8fb20028 -3485428,8fb10024 -348542c,8fb00020 -3485430,3e00008 -3485434,27bd0030 -3485438,27bdffe0 -348543c,afbf001c -3485440,afb20018 -3485444,afb10014 -3485448,afb00010 -348544c,808025 -3485450,24850074 -3485454,24070001 -3485458,4825 -348545c,3c028041 -3485460,2442a094 -3485464,2408ffe0 -3485468,3c048041 -348546c,2484a0dc -3485470,90430000 -3485474,1031824 -3485478,14600005 -348547c,80a60000 -3485480,90430001 -3485484,30c600ff -3485488,50660001 -348548c,1274825 -3485490,24420004 -3485494,73840 -3485498,1444fff5 -348549c,24a50001 -34854a0,3c028041 -34854a4,ac49b5b8 -34854a8,8e1100a4 -34854ac,2442b5b8 -34854b0,3223003f -34854b4,a0430004 -34854b8,9602009c -34854bc,8203003e -34854c0,10600002 -34854c4,3042fffb -34854c8,34420004 -34854cc,3c038041 -34854d0,a462b5be -34854d4,112c02 -34854d8,30a5007c -34854dc,26030086 -34854e0,2606008a -34854e4,2407001b -34854e8,90640000 -34854ec,2482ffec -34854f0,304200ff -34854f4,2c42000d -34854f8,50400004 -34854fc,24630001 -3485500,54870001 -3485504,34a50001 -3485508,24630001 -348550c,5466fff7 -3485510,90640000 -3485514,3c028041 -3485518,a045b5bd -348551c,9203007b -3485520,2462fff9 -3485524,304200ff -3485528,2c420002 -348552c,14400003 -3485530,2025 -3485534,10000002 -3485538,24030007 -348553c,24040001 -3485540,3c028041 -3485544,2442b5b8 -3485548,a0440008 -348554c,a0430009 -3485550,9203007d -3485554,2462fff6 -3485558,304200ff -348555c,2c420002 -3485560,14400003 -3485564,2025 -3485568,10000002 -348556c,2403000a -3485570,24040001 -3485574,3c028041 -3485578,2442b5b8 -348557c,a044000a -3485580,a043000b -3485584,86020ef6 -3485588,4400016 -348558c,2403002b -3485590,96020ef4 -3485594,210c2 -3485598,3042008f -348559c,2c430010 -34855a0,10600012 -34855a4,2403002b -34855a8,50400007 -34855ac,9203008b -34855b0,3c038041 -34855b4,2463a014 -34855b8,431021 -34855bc,90430000 -34855c0,1000000d -34855c4,24040001 -34855c8,2462ffdf -34855cc,304200ff -34855d0,2c420003 -34855d4,14400008 -34855d8,24040001 -34855dc,10000005 -34855e0,2403002b -34855e4,10000004 -34855e8,24040001 -34855ec,10000002 -34855f0,24040001 -34855f4,2025 -34855f8,3c028041 -34855fc,2442b5b8 -3485600,a043000d -3485604,a044000c -3485608,9203008a -348560c,2462ffd3 -3485610,304200ff -3485614,2c42000b -3485618,14400003 -348561c,24040001 -3485620,24030037 -3485624,2025 -3485628,3c028041 -348562c,2442b5b8 -3485630,a043000f -3485634,a044000e -3485638,9202003c -348563c,10400005 -3485640,3c028041 -3485644,24030013 -3485648,a043b5c9 -348564c,10000004 -3485650,24030001 -3485654,24030012 -3485658,a043b5c9 -348565c,9203003a +3485238,2442ffff +348523c,3c038041 +3485240,c101dff +3485244,a062a343 +3485248,3c028041 +348524c,9042a344 +3485250,1040000b +3485254,3c028041 +3485258,3c02801c +348525c,344284a0 +3485260,94430014 +3485264,2404dfff +3485268,641824 +348526c,a4430014 +3485270,94430020 +3485274,641824 +3485278,a4430020 +348527c,3c028041 +3485280,9042a345 +3485284,10400016 +3485288,8fbf0014 +348528c,3c02801c +3485290,344284a0 +3485294,90430016 +3485298,31823 +348529c,a0430016 +34852a0,90430017 +34852a4,31823 +34852a8,a0430017 +34852ac,90430022 +34852b0,31823 +34852b4,a0430022 +34852b8,90430023 +34852bc,31823 +34852c0,a0430023 +34852c4,90430028 +34852c8,31823 +34852cc,a0430028 +34852d0,90430029 +34852d4,31823 +34852d8,a0430029 +34852dc,8fbf0014 +34852e0,3e00008 +34852e4,27bd0018 +34852e8,850018 +34852ec,1812 +34852f0,24620001 +34852f4,3042ffff +34852f8,31a02 +34852fc,431021 +3485300,21203 +3485304,3e00008 +3485308,304200ff +348530c,2402ffff +3485310,a0820002 +3485314,a0820001 +3485318,4a00031 +348531c,a0820000 +3485320,a01825 +3485324,28a503e8 +3485328,50a00001 +348532c,240303e7 +3485330,31c00 +3485334,31c03 +3485338,3c026666 +348533c,24426667 +3485340,620018 +3485344,1010 +3485348,21083 +348534c,32fc3 +3485350,451023 +3485354,22880 +3485358,a22821 +348535c,52840 +3485360,651823 +3485364,21400 +3485368,21403 +348536c,1040001c +3485370,a0830002 +3485374,3c036666 +3485378,24636667 +348537c,430018 +3485380,1810 +3485384,31883 +3485388,22fc3 +348538c,651823 +3485390,32880 +3485394,a32821 +3485398,52840 +348539c,451023 +34853a0,a0820001 +34853a4,31400 +34853a8,21403 +34853ac,1040000c +34853b0,3c036666 +34853b4,24636667 +34853b8,430018 +34853bc,1810 +34853c0,31883 +34853c4,22fc3 +34853c8,651823 +34853cc,32880 +34853d0,a31821 +34853d4,31840 +34853d8,431023 +34853dc,a0820000 +34853e0,3e00008 +34853e8,27bdffd0 +34853ec,afbf002c +34853f0,afb20028 +34853f4,afb10024 +34853f8,afb00020 +34853fc,808025 +3485400,a08825 +3485404,afa7003c +3485408,8fb20040 +348540c,c101bdf +3485410,24070001 +3485414,93a7003c +3485418,afb20018 +348541c,afb20014 +3485420,83a2003d +3485424,2442005c +3485428,afa20010 +348542c,24e70037 +3485430,3025 +3485434,2202825 +3485438,c101c47 +348543c,2002025 +3485440,8fbf002c +3485444,8fb20028 +3485448,8fb10024 +348544c,8fb00020 +3485450,3e00008 +3485454,27bd0030 +3485458,27bdffe0 +348545c,afbf001c +3485460,afb20018 +3485464,afb10014 +3485468,afb00010 +348546c,808025 +3485470,24850074 +3485474,24070001 +3485478,4825 +348547c,3c028041 +3485480,2442a0b4 +3485484,2408ffe0 +3485488,3c048041 +348548c,2484a0fc +3485490,90430000 +3485494,1031824 +3485498,14600005 +348549c,80a60000 +34854a0,90430001 +34854a4,30c600ff +34854a8,50660001 +34854ac,1274825 +34854b0,24420004 +34854b4,73840 +34854b8,1444fff5 +34854bc,24a50001 +34854c0,3c028041 +34854c4,ac49b5d8 +34854c8,8e1100a4 +34854cc,2442b5d8 +34854d0,3223003f +34854d4,a0430004 +34854d8,9602009c +34854dc,8203003e +34854e0,10600002 +34854e4,3042fffb +34854e8,34420004 +34854ec,3c038041 +34854f0,a462b5de +34854f4,112c02 +34854f8,30a5007c +34854fc,26030086 +3485500,2606008a +3485504,2407001b +3485508,90640000 +348550c,2482ffec +3485510,304200ff +3485514,2c42000d +3485518,50400004 +348551c,24630001 +3485520,54870001 +3485524,34a50001 +3485528,24630001 +348552c,5466fff7 +3485530,90640000 +3485534,3c028041 +3485538,a045b5dd +348553c,9203007b +3485540,2462fff9 +3485544,304200ff +3485548,2c420002 +348554c,14400003 +3485550,2025 +3485554,10000002 +3485558,24030007 +348555c,24040001 +3485560,3c028041 +3485564,2442b5d8 +3485568,a0440008 +348556c,a0430009 +3485570,9203007d +3485574,2462fff6 +3485578,304200ff +348557c,2c420002 +3485580,14400003 +3485584,2025 +3485588,10000002 +348558c,2403000a +3485590,24040001 +3485594,3c028041 +3485598,2442b5d8 +348559c,a044000a +34855a0,a043000b +34855a4,86020ef6 +34855a8,4400016 +34855ac,2403002b +34855b0,96020ef4 +34855b4,210c2 +34855b8,3042008f +34855bc,2c430010 +34855c0,10600012 +34855c4,2403002b +34855c8,50400007 +34855cc,9203008b +34855d0,3c038041 +34855d4,2463a034 +34855d8,431021 +34855dc,90430000 +34855e0,1000000d +34855e4,24040001 +34855e8,2462ffdf +34855ec,304200ff +34855f0,2c420003 +34855f4,14400008 +34855f8,24040001 +34855fc,10000005 +3485600,2403002b +3485604,10000004 +3485608,24040001 +348560c,10000002 +3485610,24040001 +3485614,2025 +3485618,3c028041 +348561c,2442b5d8 +3485620,a043000d +3485624,a044000c +3485628,9203008a +348562c,2462ffd3 +3485630,304200ff +3485634,2c42000b +3485638,14400003 +348563c,24040001 +3485640,24030037 +3485644,2025 +3485648,3c028041 +348564c,2442b5d8 +3485650,a043000f +3485654,a044000e +3485658,9202003c +348565c,10400005 3485660,3c028041 -3485664,a043b5c8 -3485668,8e0200a0 -348566c,21182 -3485670,30420007 -3485674,10400009 -3485678,2025 -348567c,401825 -3485680,2c420004 -3485684,50400001 -3485688,24030003 -348568c,2463004f -3485690,306300ff -3485694,10000002 -3485698,24040001 -348569c,24030050 -34856a0,3c028041 -34856a4,2442b5b8 -34856a8,a0440012 -34856ac,a0430013 -34856b0,8e0200a0 -34856b4,21242 -34856b8,30420007 -34856bc,50400009 -34856c0,2025 -34856c4,401825 -34856c8,2c420003 -34856cc,50400001 -34856d0,24030002 -34856d4,24630052 -34856d8,306300ff -34856dc,10000002 -34856e0,24040001 -34856e4,24030053 -34856e8,3c028041 -34856ec,2442b5b8 -34856f0,a0440014 -34856f4,a0430015 -34856f8,8e0300a0 -34856fc,31b02 -3485700,30630003 -3485704,a0430016 -3485708,86050034 -348570c,3c048041 -3485710,c1014bb -3485714,2484b5d3 -3485718,3c020080 -348571c,2221024 -3485720,10400002 -3485724,2825 -3485728,860500d0 +3485664,24030013 +3485668,a043b5e9 +348566c,10000004 +3485670,24030001 +3485674,24030012 +3485678,a043b5e9 +348567c,9203003a +3485680,3c028041 +3485684,a043b5e8 +3485688,8e0200a0 +348568c,21182 +3485690,30420007 +3485694,10400009 +3485698,2025 +348569c,401825 +34856a0,2c420004 +34856a4,50400001 +34856a8,24030003 +34856ac,2463004f +34856b0,306300ff +34856b4,10000002 +34856b8,24040001 +34856bc,24030050 +34856c0,3c028041 +34856c4,2442b5d8 +34856c8,a0440012 +34856cc,a0430013 +34856d0,8e0200a0 +34856d4,21242 +34856d8,30420007 +34856dc,50400009 +34856e0,2025 +34856e4,401825 +34856e8,2c420003 +34856ec,50400001 +34856f0,24030002 +34856f4,24630052 +34856f8,306300ff +34856fc,10000002 +3485700,24040001 +3485704,24030053 +3485708,3c028041 +348570c,2442b5d8 +3485710,a0440014 +3485714,a0430015 +3485718,8e0300a0 +348571c,31b02 +3485720,30630003 +3485724,a0430016 +3485728,86050034 348572c,3c048041 -3485730,c1014bb -3485734,2484b5d6 -3485738,860508c6 -348573c,58a00001 -3485740,2405ffff -3485744,3c048041 -3485748,c1014bb -348574c,2484b5d9 -3485750,3c128041 -3485754,2652b5b8 -3485758,9202003d -348575c,a2420017 -3485760,8602002e -3485764,22fc3 -3485768,30a5000f -348576c,a22821 -3485770,52903 -3485774,3c048041 -3485778,c1014bb -348577c,2484b5d0 -3485780,86050022 -3485784,3c048041 -3485788,c1014bb -348578c,2484b5dc -3485790,118982 -3485794,32310fff -3485798,a6510028 -348579c,8fbf001c -34857a0,8fb20018 -34857a4,8fb10014 -34857a8,8fb00010 -34857ac,3e00008 -34857b0,27bd0020 -34857b4,27bdff88 -34857b8,afbf0074 -34857bc,afbe0070 -34857c0,afb7006c -34857c4,afb60068 -34857c8,afb50064 -34857cc,afb40060 -34857d0,afb3005c -34857d4,afb20058 -34857d8,afb10054 -34857dc,afb00050 -34857e0,3c020002 -34857e4,a21021 -34857e8,9443ca42 -34857ec,24020008 -34857f0,14620021 -34857f4,808825 -34857f8,3c020002 -34857fc,a21021 -3485800,9442ca36 -3485804,14400006 -3485808,3c020002 -348580c,a21021 -3485810,9444ca2e -3485814,24020002 -3485818,10820009 -348581c,3c020002 -3485820,a21021 -3485824,9442ca30 -3485828,24040005 -348582c,50440005 -3485830,3c020002 -3485834,24040016 -3485838,14440010 +3485730,c1014c3 +3485734,2484b5f3 +3485738,3c020080 +348573c,2221024 +3485740,10400002 +3485744,2825 +3485748,860500d0 +348574c,3c048041 +3485750,c1014c3 +3485754,2484b5f6 +3485758,860508c6 +348575c,58a00001 +3485760,2405ffff +3485764,3c048041 +3485768,c1014c3 +348576c,2484b5f9 +3485770,3c128041 +3485774,2652b5d8 +3485778,9202003d +348577c,a2420017 +3485780,8602002e +3485784,22fc3 +3485788,30a5000f +348578c,a22821 +3485790,52903 +3485794,3c048041 +3485798,c1014c3 +348579c,2484b5f0 +34857a0,86050022 +34857a4,3c048041 +34857a8,c1014c3 +34857ac,2484b5fc +34857b0,118982 +34857b4,32310fff +34857b8,a6510028 +34857bc,8fbf001c +34857c0,8fb20018 +34857c4,8fb10014 +34857c8,8fb00010 +34857cc,3e00008 +34857d0,27bd0020 +34857d4,27bdff88 +34857d8,afbf0074 +34857dc,afbe0070 +34857e0,afb7006c +34857e4,afb60068 +34857e8,afb50064 +34857ec,afb40060 +34857f0,afb3005c +34857f4,afb20058 +34857f8,afb10054 +34857fc,afb00050 +3485800,3c020002 +3485804,a21021 +3485808,9443ca42 +348580c,24020008 +3485810,14620021 +3485814,808825 +3485818,3c020002 +348581c,a21021 +3485820,9442ca36 +3485824,14400006 +3485828,3c020002 +348582c,a21021 +3485830,9444ca2e +3485834,24020002 +3485838,10820009 348583c,3c020002 -3485840,3c020002 -3485844,a21021 -3485848,9443ca38 -348584c,31080 -3485850,431021 -3485854,21980 -3485858,431021 -348585c,21100 -3485860,24420020 -3485864,8ca401d8 -3485868,c10150e -348586c,822021 -3485870,10000220 -3485874,8fbf0074 -3485878,3c020002 -348587c,a21021 -3485880,9042ca37 -3485884,1440001d -3485888,2c44009a -348588c,3c020002 -3485890,a22821 -3485894,90a2ca31 -3485898,34420080 -348589c,2c44009a -34858a0,10800214 -34858a4,8fbf0074 -34858a8,2c440086 -34858ac,14800211 -34858b0,2442007a -34858b4,24040001 -34858b8,441004 -34858bc,3c040008 -34858c0,24840014 -34858c4,442024 -34858c8,1480003b -34858cc,3c040002 -34858d0,24840081 -34858d4,442024 -34858d8,54800030 -34858dc,24020008 -34858e0,3c030004 -34858e4,24630002 -34858e8,431024 -34858ec,10400202 -34858f0,8fbe0070 -34858f4,10000039 -34858f8,241600c8 -34858fc,108001fd -3485900,8fbf0074 -3485904,2c440086 -3485908,5080000e -348590c,2442007a -3485910,24040004 -3485914,10440028 -3485918,2c440005 -348591c,5080001b -3485920,24030006 -3485924,24040002 -3485928,5044001c -348592c,24020008 -3485930,24030003 -3485934,1043002d -3485938,241600c8 -348593c,100001ee -3485940,8fbe0070 -3485944,24040001 -3485948,441004 -348594c,3c040008 -3485950,24840014 -3485954,442024 -3485958,14800017 -348595c,3c040002 -3485960,24840081 -3485964,442024 -3485968,5480000c -348596c,24020008 -3485970,3c030004 -3485974,24630002 -3485978,431024 -348597c,104001dd -3485980,8fbf0074 -3485984,10000017 -3485988,241600c8 -348598c,10430017 -3485990,241600c8 -3485994,100001d7 -3485998,8fbf0074 -348599c,431023 -34859a0,21840 -34859a4,431821 -34859a8,318c0 -34859ac,431021 -34859b0,10000006 -34859b4,305600ff -34859b8,31040 -34859bc,621021 -34859c0,210c0 -34859c4,621821 -34859c8,307600ff -34859cc,12c001c9 -34859d0,8fbf0074 -34859d4,10000006 -34859d8,8e220008 -34859dc,10000004 -34859e0,8e220008 -34859e4,10000002 -34859e8,8e220008 -34859ec,8e220008 -34859f0,24430008 -34859f4,ae230008 -34859f8,3c03e700 -34859fc,ac430000 -3485a00,ac400004 -3485a04,8e220008 -3485a08,24430008 -3485a0c,ae230008 -3485a10,3c03fc11 -3485a14,34639623 -3485a18,ac430000 -3485a1c,3c03ff2f -3485a20,3463ffff -3485a24,ac430004 -3485a28,2c02825 -3485a2c,c1014b2 -3485a30,24040090 -3485a34,afa20048 -3485a38,afa20044 -3485a3c,a025 -3485a40,24030040 -3485a44,3c028041 -3485a48,afa20030 -3485a4c,3c028041 -3485a50,2442b5b8 -3485a54,afa2004c -3485a58,3c178041 -3485a5c,26f7a214 -3485a60,3c158041 -3485a64,26b5a194 -3485a68,8e240008 -3485a6c,24820008 -3485a70,ae220008 -3485a74,3c02fa00 -3485a78,ac820000 -3485a7c,31600 -3485a80,32c00 -3485a84,451025 -3485a88,8fa50044 -3485a8c,451025 -3485a90,31a00 -3485a94,431025 -3485a98,ac820004 -3485a9c,8fa20030 -3485aa0,2453a114 -3485aa4,8fbe004c -3485aa8,2670ff80 -3485aac,8fd20000 -3485ab0,92020000 -3485ab4,3042001f -3485ab8,50400012 -3485abc,26100004 -3485ac0,32420001 -3485ac4,5682000f -3485ac8,26100004 -3485acc,8e020000 -3485ad0,21f42 -3485ad4,31880 -3485ad8,751821 -3485adc,21602 -3485ae0,3042001f -3485ae4,afa20010 -3485ae8,96070002 -3485aec,73c00 -3485af0,92060001 -3485af4,8c650000 -3485af8,c1014f2 -3485afc,2202025 -3485b00,26100004 -3485b04,1613ffea -3485b08,129042 -3485b0c,26730080 -3485b10,16f3ffe5 -3485b14,27de0004 -3485b18,2c02825 -3485b1c,c1014b2 -3485b20,240400ff -3485b24,afa20044 -3485b28,26940001 -3485b2c,24020002 -3485b30,1682ffcd -3485b34,240300ff -3485b38,8fa50048 -3485b3c,9825 -3485b40,24030040 -3485b44,3c178041 -3485b48,3c1e8041 -3485b4c,3c158041 -3485b50,26b5a194 -3485b54,2416000c -3485b58,3c148041 -3485b5c,10000002 -3485b60,2694b5ce -3485b64,8fa50044 -3485b68,8e240008 -3485b6c,24820008 -3485b70,ae220008 -3485b74,3c02fa00 -3485b78,ac820000 -3485b7c,31600 -3485b80,33400 -3485b84,461025 -3485b88,451025 -3485b8c,31a00 -3485b90,431025 -3485b94,ac820004 -3485b98,26f2a07c -3485b9c,27d0b5c0 -3485ba0,92020000 -3485ba4,5453000f -3485ba8,26100002 -3485bac,92420000 -3485bb0,21080 -3485bb4,551021 -3485bb8,afb60010 -3485bbc,92430001 -3485bc0,31a00 -3485bc4,92470002 -3485bc8,e33825 -3485bcc,73c00 -3485bd0,92060001 -3485bd4,8c450000 -3485bd8,c1014f2 -3485bdc,2202025 -3485be0,26100002 -3485be4,1614ffee -3485be8,26520003 -3485bec,26730001 -3485bf0,327300ff -3485bf4,24020002 -3485bf8,1662ffda -3485bfc,240300ff -3485c00,3c028041 -3485c04,9456b5e0 -3485c08,24070001 -3485c0c,3025 -3485c10,3c058041 -3485c14,24a5a3e8 -3485c18,c101bd7 -3485c1c,2202025 -3485c20,afa00038 -3485c24,afa00034 -3485c28,afa00030 -3485c2c,b825 -3485c30,3c108041 -3485c34,2610a040 -3485c38,8fa20044 -3485c3c,afa2003c -3485c40,3c028041 -3485c44,2442a3e8 -3485c48,afa20040 -3485c4c,3c1e8041 -3485c50,10000005 -3485c54,27dea07c -3485c58,afb50038 -3485c5c,afb40034 -3485c60,afb30030 -3485c64,240b825 -3485c68,92120000 -3485c6c,92130001 -3485c70,92140002 -3485c74,32c20001 -3485c78,1440000e -3485c7c,8fb5003c -3485c80,24050040 -3485c84,c1014b2 -3485c88,2402025 -3485c8c,409025 -3485c90,24050040 -3485c94,c1014b2 -3485c98,2602025 -3485c9c,409825 +3485840,a21021 +3485844,9442ca30 +3485848,24040005 +348584c,50440005 +3485850,3c020002 +3485854,24040016 +3485858,14440010 +348585c,3c020002 +3485860,3c020002 +3485864,a21021 +3485868,9443ca38 +348586c,31080 +3485870,431021 +3485874,21980 +3485878,431021 +348587c,21100 +3485880,24420020 +3485884,8ca401d8 +3485888,c101516 +348588c,822021 +3485890,10000220 +3485894,8fbf0074 +3485898,3c020002 +348589c,a21021 +34858a0,9042ca37 +34858a4,1440001d +34858a8,2c44009a +34858ac,3c020002 +34858b0,a22821 +34858b4,90a2ca31 +34858b8,34420080 +34858bc,2c44009a +34858c0,10800214 +34858c4,8fbf0074 +34858c8,2c440086 +34858cc,14800211 +34858d0,2442007a +34858d4,24040001 +34858d8,441004 +34858dc,3c040008 +34858e0,24840014 +34858e4,442024 +34858e8,1480003b +34858ec,3c040002 +34858f0,24840081 +34858f4,442024 +34858f8,54800030 +34858fc,24020008 +3485900,3c030004 +3485904,24630002 +3485908,431024 +348590c,10400202 +3485910,8fbe0070 +3485914,10000039 +3485918,241600c8 +348591c,108001fd +3485920,8fbf0074 +3485924,2c440086 +3485928,5080000e +348592c,2442007a +3485930,24040004 +3485934,10440028 +3485938,2c440005 +348593c,5080001b +3485940,24030006 +3485944,24040002 +3485948,5044001c +348594c,24020008 +3485950,24030003 +3485954,1043002d +3485958,241600c8 +348595c,100001ee +3485960,8fbe0070 +3485964,24040001 +3485968,441004 +348596c,3c040008 +3485970,24840014 +3485974,442024 +3485978,14800017 +348597c,3c040002 +3485980,24840081 +3485984,442024 +3485988,5480000c +348598c,24020008 +3485990,3c030004 +3485994,24630002 +3485998,431024 +348599c,104001dd +34859a0,8fbf0074 +34859a4,10000017 +34859a8,241600c8 +34859ac,10430017 +34859b0,241600c8 +34859b4,100001d7 +34859b8,8fbf0074 +34859bc,431023 +34859c0,21840 +34859c4,431821 +34859c8,318c0 +34859cc,431021 +34859d0,10000006 +34859d4,305600ff +34859d8,31040 +34859dc,621021 +34859e0,210c0 +34859e4,621821 +34859e8,307600ff +34859ec,12c001c9 +34859f0,8fbf0074 +34859f4,10000006 +34859f8,8e220008 +34859fc,10000004 +3485a00,8e220008 +3485a04,10000002 +3485a08,8e220008 +3485a0c,8e220008 +3485a10,24430008 +3485a14,ae230008 +3485a18,3c03e700 +3485a1c,ac430000 +3485a20,ac400004 +3485a24,8e220008 +3485a28,24430008 +3485a2c,ae230008 +3485a30,3c03fc11 +3485a34,34639623 +3485a38,ac430000 +3485a3c,3c03ff2f +3485a40,3463ffff +3485a44,ac430004 +3485a48,2c02825 +3485a4c,c1014ba +3485a50,24040090 +3485a54,afa20048 +3485a58,afa20044 +3485a5c,a025 +3485a60,24030040 +3485a64,3c028041 +3485a68,afa20030 +3485a6c,3c028041 +3485a70,2442b5d8 +3485a74,afa2004c +3485a78,3c178041 +3485a7c,26f7a234 +3485a80,3c158041 +3485a84,26b5a1b4 +3485a88,8e240008 +3485a8c,24820008 +3485a90,ae220008 +3485a94,3c02fa00 +3485a98,ac820000 +3485a9c,31600 +3485aa0,32c00 +3485aa4,451025 +3485aa8,8fa50044 +3485aac,451025 +3485ab0,31a00 +3485ab4,431025 +3485ab8,ac820004 +3485abc,8fa20030 +3485ac0,2453a134 +3485ac4,8fbe004c +3485ac8,2670ff80 +3485acc,8fd20000 +3485ad0,92020000 +3485ad4,3042001f +3485ad8,50400012 +3485adc,26100004 +3485ae0,32420001 +3485ae4,5682000f +3485ae8,26100004 +3485aec,8e020000 +3485af0,21f42 +3485af4,31880 +3485af8,751821 +3485afc,21602 +3485b00,3042001f +3485b04,afa20010 +3485b08,96070002 +3485b0c,73c00 +3485b10,92060001 +3485b14,8c650000 +3485b18,c1014fa +3485b1c,2202025 +3485b20,26100004 +3485b24,1613ffea +3485b28,129042 +3485b2c,26730080 +3485b30,16f3ffe5 +3485b34,27de0004 +3485b38,2c02825 +3485b3c,c1014ba +3485b40,240400ff +3485b44,afa20044 +3485b48,26940001 +3485b4c,24020002 +3485b50,1682ffcd +3485b54,240300ff +3485b58,8fa50048 +3485b5c,9825 +3485b60,24030040 +3485b64,3c178041 +3485b68,3c1e8041 +3485b6c,3c158041 +3485b70,26b5a1b4 +3485b74,2416000c +3485b78,3c148041 +3485b7c,10000002 +3485b80,2694b5ee +3485b84,8fa50044 +3485b88,8e240008 +3485b8c,24820008 +3485b90,ae220008 +3485b94,3c02fa00 +3485b98,ac820000 +3485b9c,31600 +3485ba0,33400 +3485ba4,461025 +3485ba8,451025 +3485bac,31a00 +3485bb0,431025 +3485bb4,ac820004 +3485bb8,26f2a09c +3485bbc,27d0b5e0 +3485bc0,92020000 +3485bc4,5453000f +3485bc8,26100002 +3485bcc,92420000 +3485bd0,21080 +3485bd4,551021 +3485bd8,afb60010 +3485bdc,92430001 +3485be0,31a00 +3485be4,92470002 +3485be8,e33825 +3485bec,73c00 +3485bf0,92060001 +3485bf4,8c450000 +3485bf8,c1014fa +3485bfc,2202025 +3485c00,26100002 +3485c04,1614ffee +3485c08,26520003 +3485c0c,26730001 +3485c10,327300ff +3485c14,24020002 +3485c18,1662ffda +3485c1c,240300ff +3485c20,3c028041 +3485c24,9456b600 +3485c28,24070001 +3485c2c,3025 +3485c30,3c058041 +3485c34,24a5a408 +3485c38,c101bdf +3485c3c,2202025 +3485c40,afa00038 +3485c44,afa00034 +3485c48,afa00030 +3485c4c,b825 +3485c50,3c108041 +3485c54,2610a060 +3485c58,8fa20044 +3485c5c,afa2003c +3485c60,3c028041 +3485c64,2442a408 +3485c68,afa20040 +3485c6c,3c1e8041 +3485c70,10000005 +3485c74,27dea09c +3485c78,afb50038 +3485c7c,afb40034 +3485c80,afb30030 +3485c84,240b825 +3485c88,92120000 +3485c8c,92130001 +3485c90,92140002 +3485c94,32c20001 +3485c98,1440000e +3485c9c,8fb5003c 3485ca0,24050040 -3485ca4,c1014b2 -3485ca8,2802025 -3485cac,40a025 -3485cb0,8fb50048 -3485cb4,16570007 -3485cb8,8fa20030 -3485cbc,14530005 -3485cc0,8fa20034 -3485cc4,16820003 -3485cc8,8fa20038 -3485ccc,5055000e -3485cd0,92070003 -3485cd4,8e230008 -3485cd8,24620008 -3485cdc,ae220008 -3485ce0,3c02fa00 -3485ce4,ac620000 -3485ce8,121600 -3485cec,132400 -3485cf0,441025 -3485cf4,551025 -3485cf8,142200 -3485cfc,441025 -3485d00,ac620004 -3485d04,92070003 -3485d08,2402000a -3485d0c,afa20018 -3485d10,24020006 -3485d14,afa20014 -3485d18,82020004 -3485d1c,2442005c -3485d20,afa20010 -3485d24,24e70037 -3485d28,3025 -3485d2c,8fa50040 -3485d30,c101c3f -3485d34,2202025 -3485d38,26100005 -3485d3c,161effc6 -3485d40,16b042 -3485d44,3c108041 -3485d48,2610b5b8 -3485d4c,92020016 -3485d50,8fb50044 -3485d54,2a09025 -3485d58,21840 -3485d5c,621821 -3485d60,3c028041 -3485d64,2442a1a0 -3485d68,621821 -3485d6c,90620000 -3485d70,21600 -3485d74,90640001 -3485d78,42400 -3485d7c,441025 -3485d80,90630002 -3485d84,31a00 -3485d88,431025 -3485d8c,551025 -3485d90,8e230008 -3485d94,24640008 -3485d98,ae240008 -3485d9c,3c13fa00 -3485da0,ac730000 -3485da4,ac620004 -3485da8,3c028041 -3485dac,2442a024 -3485db0,24030010 -3485db4,afa30010 -3485db8,90430005 -3485dbc,31a00 -3485dc0,90470006 -3485dc4,e33825 -3485dc8,73c00 -3485dcc,24060001 -3485dd0,3c058041 -3485dd4,24a5a3d8 -3485dd8,c1014f2 -3485ddc,2202025 -3485de0,2414ff00 -3485de4,2b4a025 -3485de8,8e220008 -3485dec,24430008 -3485df0,ae230008 -3485df4,ac530000 -3485df8,ac540004 -3485dfc,24070001 -3485e00,2406000c -3485e04,3c058041 -3485e08,24a5a428 -3485e0c,c101bd7 -3485e10,2202025 -3485e14,92020017 -3485e18,1440000e -3485e1c,24100010 -3485e20,24020010 -3485e24,afa20018 -3485e28,afa20014 -3485e2c,2402005c -3485e30,afa20010 -3485e34,2407003c -3485e38,3025 -3485e3c,3c058041 -3485e40,24a5a428 -3485e44,c101c3f -3485e48,2202025 -3485e4c,10000014 -3485e50,3c028041 -3485e54,afb00018 -3485e58,afb00014 -3485e5c,2415005c -3485e60,afb50010 -3485e64,2407003a -3485e68,3025 -3485e6c,3c138041 -3485e70,2665a428 -3485e74,c101c3f -3485e78,2202025 -3485e7c,afb00018 -3485e80,afb00014 -3485e84,afb50010 -3485e88,2407003e -3485e8c,3025 -3485e90,2665a428 -3485e94,c101c3f +3485ca4,c1014ba +3485ca8,2402025 +3485cac,409025 +3485cb0,24050040 +3485cb4,c1014ba +3485cb8,2602025 +3485cbc,409825 +3485cc0,24050040 +3485cc4,c1014ba +3485cc8,2802025 +3485ccc,40a025 +3485cd0,8fb50048 +3485cd4,16570007 +3485cd8,8fa20030 +3485cdc,14530005 +3485ce0,8fa20034 +3485ce4,16820003 +3485ce8,8fa20038 +3485cec,5055000e +3485cf0,92070003 +3485cf4,8e230008 +3485cf8,24620008 +3485cfc,ae220008 +3485d00,3c02fa00 +3485d04,ac620000 +3485d08,121600 +3485d0c,132400 +3485d10,441025 +3485d14,551025 +3485d18,142200 +3485d1c,441025 +3485d20,ac620004 +3485d24,92070003 +3485d28,2402000a +3485d2c,afa20018 +3485d30,24020006 +3485d34,afa20014 +3485d38,82020004 +3485d3c,2442005c +3485d40,afa20010 +3485d44,24e70037 +3485d48,3025 +3485d4c,8fa50040 +3485d50,c101c47 +3485d54,2202025 +3485d58,26100005 +3485d5c,161effc6 +3485d60,16b042 +3485d64,3c108041 +3485d68,2610b5d8 +3485d6c,92020016 +3485d70,8fb50044 +3485d74,2a09025 +3485d78,21840 +3485d7c,621821 +3485d80,3c028041 +3485d84,2442a1c0 +3485d88,621821 +3485d8c,90620000 +3485d90,21600 +3485d94,90640001 +3485d98,42400 +3485d9c,441025 +3485da0,90630002 +3485da4,31a00 +3485da8,431025 +3485dac,551025 +3485db0,8e230008 +3485db4,24640008 +3485db8,ae240008 +3485dbc,3c13fa00 +3485dc0,ac730000 +3485dc4,ac620004 +3485dc8,3c028041 +3485dcc,2442a044 +3485dd0,24030010 +3485dd4,afa30010 +3485dd8,90430005 +3485ddc,31a00 +3485de0,90470006 +3485de4,e33825 +3485de8,73c00 +3485dec,24060001 +3485df0,3c058041 +3485df4,24a5a3f8 +3485df8,c1014fa +3485dfc,2202025 +3485e00,2414ff00 +3485e04,2b4a025 +3485e08,8e220008 +3485e0c,24430008 +3485e10,ae230008 +3485e14,ac530000 +3485e18,ac540004 +3485e1c,24070001 +3485e20,2406000c +3485e24,3c058041 +3485e28,24a5a448 +3485e2c,c101bdf +3485e30,2202025 +3485e34,92020017 +3485e38,1440000e +3485e3c,24100010 +3485e40,24020010 +3485e44,afa20018 +3485e48,afa20014 +3485e4c,2402005c +3485e50,afa20010 +3485e54,2407003c +3485e58,3025 +3485e5c,3c058041 +3485e60,24a5a448 +3485e64,c101c47 +3485e68,2202025 +3485e6c,10000014 +3485e70,3c028041 +3485e74,afb00018 +3485e78,afb00014 +3485e7c,2415005c +3485e80,afb50010 +3485e84,2407003a +3485e88,3025 +3485e8c,3c138041 +3485e90,2665a448 +3485e94,c101c47 3485e98,2202025 -3485e9c,3c028041 -3485ea0,9042b5de -3485ea4,2c42000a -3485ea8,1040000b -3485eac,24070001 -3485eb0,2402000a -3485eb4,afa20010 -3485eb8,3c028041 -3485ebc,8c47a038 -3485ec0,24060001 -3485ec4,3c058041 -3485ec8,24a5a3b8 -3485ecc,c1014f2 -3485ed0,2202025 -3485ed4,24070001 -3485ed8,2406000b -3485edc,3c108041 -3485ee0,2605a428 -3485ee4,c101bd7 -3485ee8,2202025 -3485eec,24020010 -3485ef0,afa20018 -3485ef4,afa20014 -3485ef8,24020086 -3485efc,afa20010 -3485f00,2407003c -3485f04,3025 -3485f08,2605a428 -3485f0c,c101c3f -3485f10,2202025 -3485f14,3c028041 -3485f18,9042b5db -3485f1c,2c42000a -3485f20,1040001d -3485f24,8e220008 -3485f28,24430008 -3485f2c,ae230008 -3485f30,3c03fa00 -3485f34,ac430000 -3485f38,3c03f4ec -3485f3c,24633000 -3485f40,2439025 -3485f44,ac520004 -3485f48,3c038041 -3485f4c,9062b544 -3485f50,24440001 -3485f54,a064b544 -3485f58,3c038041 -3485f5c,2463a024 -3485f60,21082 -3485f64,24040010 -3485f68,afa40010 -3485f6c,9064000f -3485f70,42200 -3485f74,90670010 -3485f78,e43825 -3485f7c,73c00 -3485f80,3046000f -3485f84,3c058041 -3485f88,24a5a3f8 -3485f8c,c1014f2 -3485f90,2202025 -3485f94,8e220008 -3485f98,24430008 -3485f9c,ae230008 -3485fa0,3c03fa00 -3485fa4,ac430000 -3485fa8,ac540004 -3485fac,2407000a -3485fb0,3025 -3485fb4,3c058041 -3485fb8,24a5a3c8 -3485fbc,c101bd7 -3485fc0,2202025 -3485fc4,8fa2004c -3485fc8,2453001b -3485fcc,3c168041 -3485fd0,26d6b5d0 -3485fd4,3c148041 -3485fd8,2694a024 -3485fdc,26820019 -3485fe0,afa20034 -3485fe4,24170001 -3485fe8,241e0008 -3485fec,3c028041 -3485ff0,2442a3c8 -3485ff4,afa20038 -3485ff8,afa00020 -3485ffc,afa00024 -3486000,afa00028 -3486004,afa0002c -3486008,27b20020 -348600c,2401825 -3486010,2c02025 -3486014,90820000 -3486018,54570006 -348601c,2c42000a -3486020,8c620000 -3486024,2442ffff -3486028,ac620000 -348602c,10000003 -3486030,24020005 -3486034,21023 -3486038,30420006 -348603c,8c650000 -3486040,a21021 -3486044,ac620004 -3486048,24840001 -348604c,1493fff1 -3486050,24630004 -3486054,92950000 -3486058,26b50037 -348605c,82820002 -3486060,2a2a821 -3486064,92820004 -3486068,10400006 -348606c,2801825 -3486070,8fa4002c -3486074,417c2 -3486078,441021 -348607c,21043 -3486080,2a2a823 -3486084,80620001 -3486088,2442005c -348608c,80630003 -3486090,431021 -3486094,afa20030 -3486098,2c08025 -348609c,92060000 -34860a0,2cc2000a -34860a4,5040000b -34860a8,26100001 -34860ac,8e470000 -34860b0,afbe0018 -34860b4,afbe0014 -34860b8,8fa20030 -34860bc,afa20010 -34860c0,2a73821 -34860c4,8fa50038 -34860c8,c101c3f -34860cc,2202025 -34860d0,26100001 -34860d4,1613fff1 -34860d8,26520004 -34860dc,26730003 -34860e0,26940005 -34860e4,8fa20034 -34860e8,1454ffc3 -34860ec,26d60003 -34860f0,8fbf0074 -34860f4,8fbe0070 -34860f8,8fb7006c -34860fc,8fb60068 -3486100,8fb50064 -3486104,8fb40060 -3486108,8fb3005c -348610c,8fb20058 -3486110,8fb10054 -3486114,8fb00050 -3486118,3e00008 -348611c,27bd0078 -3486120,27bdffa0 -3486124,afbf005c -3486128,afbe0058 -348612c,afb70054 -3486130,afb60050 -3486134,afb5004c -3486138,afb40048 -348613c,afb30044 -3486140,afb20040 -3486144,afb1003c -3486148,afb00038 -348614c,afa40060 -3486150,afa50064 -3486154,3c02801c -3486158,344284a0 -348615c,8c500000 -3486160,261402b8 -3486164,8e0202c0 -3486168,24430008 -348616c,ae0302c0 -3486170,3c03de00 -3486174,ac430000 -3486178,3c038041 -348617c,2463a468 -3486180,ac430004 +3485e9c,afb00018 +3485ea0,afb00014 +3485ea4,afb50010 +3485ea8,2407003e +3485eac,3025 +3485eb0,2665a448 +3485eb4,c101c47 +3485eb8,2202025 +3485ebc,3c028041 +3485ec0,9042b5fe +3485ec4,2c42000a +3485ec8,1040000b +3485ecc,24070001 +3485ed0,2402000a +3485ed4,afa20010 +3485ed8,3c028041 +3485edc,8c47a058 +3485ee0,24060001 +3485ee4,3c058041 +3485ee8,24a5a3d8 +3485eec,c1014fa +3485ef0,2202025 +3485ef4,24070001 +3485ef8,2406000b +3485efc,3c108041 +3485f00,2605a448 +3485f04,c101bdf +3485f08,2202025 +3485f0c,24020010 +3485f10,afa20018 +3485f14,afa20014 +3485f18,24020086 +3485f1c,afa20010 +3485f20,2407003c +3485f24,3025 +3485f28,2605a448 +3485f2c,c101c47 +3485f30,2202025 +3485f34,3c028041 +3485f38,9042b5fb +3485f3c,2c42000a +3485f40,1040001d +3485f44,8e220008 +3485f48,24430008 +3485f4c,ae230008 +3485f50,3c03fa00 +3485f54,ac430000 +3485f58,3c03f4ec +3485f5c,24633000 +3485f60,2439025 +3485f64,ac520004 +3485f68,3c038041 +3485f6c,9062b564 +3485f70,24440001 +3485f74,a064b564 +3485f78,3c038041 +3485f7c,2463a044 +3485f80,21082 +3485f84,24040010 +3485f88,afa40010 +3485f8c,9064000f +3485f90,42200 +3485f94,90670010 +3485f98,e43825 +3485f9c,73c00 +3485fa0,3046000f +3485fa4,3c058041 +3485fa8,24a5a418 +3485fac,c1014fa +3485fb0,2202025 +3485fb4,8e220008 +3485fb8,24430008 +3485fbc,ae230008 +3485fc0,3c03fa00 +3485fc4,ac430000 +3485fc8,ac540004 +3485fcc,2407000a +3485fd0,3025 +3485fd4,3c058041 +3485fd8,24a5a3e8 +3485fdc,c101bdf +3485fe0,2202025 +3485fe4,8fa2004c +3485fe8,2453001b +3485fec,3c168041 +3485ff0,26d6b5f0 +3485ff4,3c148041 +3485ff8,2694a044 +3485ffc,26820019 +3486000,afa20034 +3486004,24170001 +3486008,241e0008 +348600c,3c028041 +3486010,2442a3e8 +3486014,afa20038 +3486018,afa00020 +348601c,afa00024 +3486020,afa00028 +3486024,afa0002c +3486028,27b20020 +348602c,2401825 +3486030,2c02025 +3486034,90820000 +3486038,54570006 +348603c,2c42000a +3486040,8c620000 +3486044,2442ffff +3486048,ac620000 +348604c,10000003 +3486050,24020005 +3486054,21023 +3486058,30420006 +348605c,8c650000 +3486060,a21021 +3486064,ac620004 +3486068,24840001 +348606c,1493fff1 +3486070,24630004 +3486074,92950000 +3486078,26b50037 +348607c,82820002 +3486080,2a2a821 +3486084,92820004 +3486088,10400006 +348608c,2801825 +3486090,8fa4002c +3486094,417c2 +3486098,441021 +348609c,21043 +34860a0,2a2a823 +34860a4,80620001 +34860a8,2442005c +34860ac,80630003 +34860b0,431021 +34860b4,afa20030 +34860b8,2c08025 +34860bc,92060000 +34860c0,2cc2000a +34860c4,5040000b +34860c8,26100001 +34860cc,8e470000 +34860d0,afbe0018 +34860d4,afbe0014 +34860d8,8fa20030 +34860dc,afa20010 +34860e0,2a73821 +34860e4,8fa50038 +34860e8,c101c47 +34860ec,2202025 +34860f0,26100001 +34860f4,1613fff1 +34860f8,26520004 +34860fc,26730003 +3486100,26940005 +3486104,8fa20034 +3486108,1454ffc3 +348610c,26d60003 +3486110,8fbf0074 +3486114,8fbe0070 +3486118,8fb7006c +348611c,8fb60068 +3486120,8fb50064 +3486124,8fb40060 +3486128,8fb3005c +348612c,8fb20058 +3486130,8fb10054 +3486134,8fb00050 +3486138,3e00008 +348613c,27bd0078 +3486140,27bdffa0 +3486144,afbf005c +3486148,afbe0058 +348614c,afb70054 +3486150,afb60050 +3486154,afb5004c +3486158,afb40048 +348615c,afb30044 +3486160,afb20040 +3486164,afb1003c +3486168,afb00038 +348616c,afa40060 +3486170,afa50064 +3486174,3c02801c +3486178,344284a0 +348617c,8c500000 +3486180,261402b8 3486184,8e0202c0 3486188,24430008 348618c,ae0302c0 -3486190,3c03e700 +3486190,3c03de00 3486194,ac430000 -3486198,ac400004 -348619c,8e0202c0 -34861a0,24430008 -34861a4,ae0302c0 -34861a8,3c03fc11 -34861ac,34639623 -34861b0,ac430000 -34861b4,3c03ff2f -34861b8,3463ffff -34861bc,ac430004 -34861c0,8e0202c0 -34861c4,24430008 -34861c8,ae0302c0 -34861cc,3c03fa00 +3486198,3c038041 +348619c,2463a488 +34861a0,ac430004 +34861a4,8e0202c0 +34861a8,24430008 +34861ac,ae0302c0 +34861b0,3c03e700 +34861b4,ac430000 +34861b8,ac400004 +34861bc,8e0202c0 +34861c0,24430008 +34861c4,ae0302c0 +34861c8,3c03fc11 +34861cc,34639623 34861d0,ac430000 -34861d4,2403ffff -34861d8,ac430004 -34861dc,3c028041 -34861e0,8c52b548 -34861e4,24110054 -34861e8,3c178041 -34861ec,26f7a328 -34861f0,3c168041 -34861f4,26d6b4ac -34861f8,24150018 -34861fc,241e000c -3486200,3242001f -3486204,21040 -3486208,129143 -348620c,571021 -3486210,90430000 -3486214,31880 -3486218,761821 -348621c,8c730000 -3486220,24070001 -3486224,90460001 -3486228,2602825 -348622c,c101bd7 -3486230,2802025 -3486234,afb50018 -3486238,afb50014 -348623c,afbe0010 -3486240,2203825 -3486244,3025 +34861d4,3c03ff2f +34861d8,3463ffff +34861dc,ac430004 +34861e0,8e0202c0 +34861e4,24430008 +34861e8,ae0302c0 +34861ec,3c03fa00 +34861f0,ac430000 +34861f4,2403ffff +34861f8,ac430004 +34861fc,3c028041 +3486200,8c52b568 +3486204,24110054 +3486208,3c178041 +348620c,26f7a348 +3486210,3c168041 +3486214,26d6b4cc +3486218,24150018 +348621c,241e000c +3486220,3242001f +3486224,21040 +3486228,129143 +348622c,571021 +3486230,90430000 +3486234,31880 +3486238,761821 +348623c,8c730000 +3486240,24070001 +3486244,90460001 3486248,2602825 -348624c,c101c3f +348624c,c101bdf 3486250,2802025 -3486254,26310020 -3486258,240200f4 -348625c,1622ffe9 -3486260,3242001f -3486264,8fa50064 -3486268,c1015ed -348626c,2802025 -3486270,8e0202c0 -3486274,24430008 -3486278,ae0302c0 -348627c,3c03e700 -3486280,ac430000 -3486284,ac400004 -3486288,8e0202c0 -348628c,24430008 -3486290,ae0302c0 -3486294,3c03fcff -3486298,3463ffff -348629c,ac430000 -34862a0,3c03fffd -34862a4,3463f6fb -34862a8,ac430004 -34862ac,8e0202c0 -34862b0,24430008 -34862b4,ae0302c0 -34862b8,3c03fa00 +3486254,afb50018 +3486258,afb50014 +348625c,afbe0010 +3486260,2203825 +3486264,3025 +3486268,2602825 +348626c,c101c47 +3486270,2802025 +3486274,26310020 +3486278,240200f4 +348627c,1622ffe9 +3486280,3242001f +3486284,8fa50064 +3486288,c1015f5 +348628c,2802025 +3486290,8e0202c0 +3486294,24430008 +3486298,ae0302c0 +348629c,3c03e700 +34862a0,ac430000 +34862a4,ac400004 +34862a8,8e0202c0 +34862ac,24430008 +34862b0,ae0302c0 +34862b4,3c03fcff +34862b8,3463ffff 34862bc,ac430000 -34862c0,93a30063 -34862c4,ac430004 -34862c8,3c02e450 -34862cc,244203c0 -34862d0,afa20020 -34862d4,afa00024 -34862d8,3c02e100 -34862dc,afa20028 -34862e0,afa0002c -34862e4,3c02f100 -34862e8,afa20030 -34862ec,3c020400 -34862f0,24420400 -34862f4,afa20034 -34862f8,27a20020 -34862fc,27a60038 -3486300,8e0302c0 -3486304,24640008 -3486308,ae0402c0 -348630c,8c450004 -3486310,8c440000 -3486314,ac650004 -3486318,24420008 -348631c,14c2fff8 -3486320,ac640000 -3486324,8fbf005c -3486328,8fbe0058 -348632c,8fb70054 -3486330,8fb60050 -3486334,8fb5004c -3486338,8fb40048 -348633c,8fb30044 -3486340,8fb20040 -3486344,8fb1003c -3486348,8fb00038 -348634c,3e00008 -3486350,27bd0060 -3486354,3c028041 -3486358,9042b54c -348635c,1040000d -3486360,3c028011 -3486364,3442a5d0 -3486368,8c430000 -348636c,24020517 -3486370,14620008 -3486378,27bdffe8 -348637c,afbf0014 -3486380,c102532 -3486388,8fbf0014 -348638c,3e00008 -3486390,27bd0018 -3486394,3e00008 -348639c,14800003 -34863a0,3c028041 -34863a4,3e00008 -34863a8,8c42a368 -34863ac,27bdffe8 -34863b0,afbf0014 -34863b4,afb00010 -34863b8,808025 -34863bc,c1018e7 -34863c0,42102 -34863c4,3210000f -34863c8,108080 -34863cc,3c038041 -34863d0,2463a368 -34863d4,2038021 -34863d8,8e030000 -34863dc,431021 -34863e0,8fbf0014 -34863e4,8fb00010 -34863e8,3e00008 -34863ec,27bd0018 -34863f0,3c028011 -34863f4,3442a5d0 -34863f8,8c42135c -34863fc,1440004c -3486400,3c028041 -3486404,9042b550 -3486408,10400049 -348640c,3c038011 -3486410,3463a5d0 -3486414,906300b2 -3486418,30630001 -348641c,14600044 -3486420,24030003 -3486424,27bdffe8 -3486428,10430028 -348642c,afbf0014 -3486430,2c430004 -3486434,10600007 -3486438,24030001 -348643c,1043000a -3486440,24030002 -3486444,10430014 -3486448,3c028011 -348644c,10000036 -3486450,8fbf0014 -3486454,24030004 -3486458,10430029 -348645c,3c028011 -3486460,10000031 -3486464,8fbf0014 +34862c0,3c03fffd +34862c4,3463f6fb +34862c8,ac430004 +34862cc,8e0202c0 +34862d0,24430008 +34862d4,ae0302c0 +34862d8,3c03fa00 +34862dc,ac430000 +34862e0,93a30063 +34862e4,ac430004 +34862e8,3c02e450 +34862ec,244203c0 +34862f0,afa20020 +34862f4,afa00024 +34862f8,3c02e100 +34862fc,afa20028 +3486300,afa0002c +3486304,3c02f100 +3486308,afa20030 +348630c,3c020400 +3486310,24420400 +3486314,afa20034 +3486318,27a20020 +348631c,27a60038 +3486320,8e0302c0 +3486324,24640008 +3486328,ae0402c0 +348632c,8c450004 +3486330,8c440000 +3486334,ac650004 +3486338,24420008 +348633c,14c2fff8 +3486340,ac640000 +3486344,8fbf005c +3486348,8fbe0058 +348634c,8fb70054 +3486350,8fb60050 +3486354,8fb5004c +3486358,8fb40048 +348635c,8fb30044 +3486360,8fb20040 +3486364,8fb1003c +3486368,8fb00038 +348636c,3e00008 +3486370,27bd0060 +3486374,3c028041 +3486378,9042b56c +348637c,1040000d +3486380,3c028011 +3486384,3442a5d0 +3486388,8c430000 +348638c,24020517 +3486390,14620008 +3486398,27bdffe8 +348639c,afbf0014 +34863a0,c10253a +34863a8,8fbf0014 +34863ac,3e00008 +34863b0,27bd0018 +34863b4,3e00008 +34863bc,14800003 +34863c0,3c028041 +34863c4,3e00008 +34863c8,8c42a388 +34863cc,27bdffe8 +34863d0,afbf0014 +34863d4,afb00010 +34863d8,808025 +34863dc,c1018ef +34863e0,42102 +34863e4,3210000f +34863e8,108080 +34863ec,3c038041 +34863f0,2463a388 +34863f4,2038021 +34863f8,8e030000 +34863fc,431021 +3486400,8fbf0014 +3486404,8fb00010 +3486408,3e00008 +348640c,27bd0018 +3486410,3c028011 +3486414,3442a5d0 +3486418,8c42135c +348641c,1440004c +3486420,3c028041 +3486424,9042b570 +3486428,10400049 +348642c,3c038011 +3486430,3463a5d0 +3486434,906300b2 +3486438,30630001 +348643c,14600044 +3486440,24030003 +3486444,27bdffe8 +3486448,10430028 +348644c,afbf0014 +3486450,2c430004 +3486454,10600007 +3486458,24030001 +348645c,1043000a +3486460,24030002 +3486464,10430014 3486468,3c028011 -348646c,3442a5d0 -3486470,8c4400a4 -3486474,c1018e7 -3486478,3084003f -348647c,3c038041 -3486480,9463b54e -3486484,43102b -3486488,10400024 -348648c,8fbf0014 -3486490,10000025 -3486498,3442a5d0 -348649c,8c4400a4 -34864a0,3c02001c -34864a4,2442003f -34864a8,c1018e7 -34864ac,822024 -34864b0,3c038041 -34864b4,9463b54e -34864b8,43102b -34864bc,10400017 -34864c0,8fbf0014 -34864c4,10000018 -34864cc,3c028011 -34864d0,3442a5d0 -34864d4,8c4400a4 -34864d8,3c02001c -34864dc,c1018e7 -34864e0,822024 -34864e4,3c038041 -34864e8,9463b54e -34864ec,43102b -34864f0,1040000a -34864f4,8fbf0014 -34864f8,1000000b -3486500,3442a5d0 -3486504,844200d0 -3486508,3c038041 -348650c,9463b54e -3486510,43102a -3486514,14400004 -3486518,8fbf0014 -348651c,c101a68 -3486520,24040003 -3486524,8fbf0014 -3486528,3e00008 -348652c,27bd0018 -3486530,3e00008 -3486538,27bdffe8 -348653c,afbf0014 -3486540,3c028041 -3486544,8c42b580 -3486548,218c0 -348654c,3c048041 -3486550,2484b5fc -3486554,641821 -3486558,8c630000 -348655c,1060000c -3486560,24420001 -3486564,220c0 -3486568,3c038041 -348656c,2463b5fc -3486570,641821 -3486574,402825 -3486578,8c640000 -348657c,24420001 -3486580,1480fffc -3486584,24630008 -3486588,3c028041 -348658c,ac45b580 -3486590,c10273a -3486594,2404013c -3486598,3c038041 -348659c,ac62b57c -34865a0,24030001 -34865a4,ac430130 -34865a8,8fbf0014 -34865ac,3e00008 -34865b0,27bd0018 -34865b4,801025 -34865b8,84a30000 -34865bc,2404000a -34865c0,14640012 -34865c4,24040015 -34865c8,24030010 -34865cc,14c30008 -34865d0,94a3001c -34865d4,31942 -34865d8,3063007f -34865dc,24040075 -34865e0,54640003 -34865e4,94a3001c -34865e8,3e00008 -34865ec,ac400000 -34865f0,3063001f -34865f4,a0400000 -34865f8,a0460001 -34865fc,24040001 -3486600,a0440002 -3486604,3e00008 -3486608,a0430003 -348660c,14640010 -3486610,2404019c -3486614,90a3001d -3486618,24040006 -348661c,10640005 -3486620,24040011 -3486624,50640004 -3486628,90a30141 -348662c,3e00008 -3486630,ac400000 -3486634,90a30141 -3486638,a0400000 -348663c,a0460001 -3486640,24040002 -3486644,a0440002 -3486648,3e00008 -348664c,a0430003 -3486650,1464000a -3486654,2404003e -3486658,94a4001c -348665c,a0400000 -3486660,41a02 -3486664,3063001f -3486668,a0430001 -348666c,24030003 -3486670,a0430002 -3486674,3e00008 -3486678,a0440003 -348667c,54c4000d -3486680,a4400000 -3486684,2404011a -3486688,5464000a -348668c,a4400000 -3486690,3c038011 -3486694,3463a5d0 -3486698,90631397 -348669c,a0400000 -34866a0,a0430001 -34866a4,24030004 -34866a8,a0430002 -34866ac,3e00008 -34866b0,a0470003 -34866b4,a0400002 -34866b8,a0460001 -34866bc,3e00008 -34866c0,a0470003 -34866c4,3c038041 -34866c8,8c67b580 -34866cc,24e7ffff -34866d0,4e00021 -34866d4,801025 -34866d8,27bdfff8 -34866dc,4825 -34866e0,3c0a8041 -34866e4,254ab5fc -34866e8,1273021 -34866ec,61fc2 -34866f0,661821 -34866f4,31843 -34866f8,330c0 -34866fc,ca3021 -3486700,8cc80000 -3486704,8cc60004 -3486708,afa60004 -348670c,a8302b -3486710,10c00003 -3486714,105302b -3486718,10000008 -348671c,2467ffff -3486720,50c00003 -3486724,ac480000 -3486728,10000004 -348672c,24690001 -3486730,8fa30004 -3486734,10000006 -3486738,ac430004 -348673c,e9182a -3486740,1060ffea -3486744,1273021 -3486748,ac400000 -348674c,ac400004 -3486750,3e00008 -3486754,27bd0008 -3486758,ac800000 -348675c,3e00008 -3486760,ac800004 -3486764,27bdffe0 -3486768,afbf001c -348676c,afb00018 -3486770,808025 -3486774,c10196d -3486778,27a40010 -348677c,8fa50010 -3486780,14a00004 -3486788,ae000000 -348678c,10000003 -3486790,ae000004 -3486794,c1019b1 -3486798,2002025 -348679c,2001025 -34867a0,8fbf001c -34867a4,8fb00018 -34867a8,3e00008 -34867ac,27bd0020 -34867b0,27bdffe8 -34867b4,afbf0014 -34867b8,afb00010 -34867bc,afa40018 -34867c0,58202 -34867c4,afa5001c -34867c8,321000ff -34867cc,c101ee3 -34867d0,52402 -34867d4,c101ed4 -34867d8,402025 -34867dc,3c038041 -34867e0,8fa40018 -34867e4,ac64b574 -34867e8,2463b574 -34867ec,8fa4001c -34867f0,ac640004 -34867f4,10202b -34867f8,3c038041 -34867fc,ac64b570 -3486800,3c038041 -3486804,ac62b56c -3486808,90440001 -348680c,3c038041 -3486810,ac64b568 -3486814,94440002 +348646c,10000036 +3486470,8fbf0014 +3486474,24030004 +3486478,10430029 +348647c,3c028011 +3486480,10000031 +3486484,8fbf0014 +3486488,3c028011 +348648c,3442a5d0 +3486490,8c4400a4 +3486494,c1018ef +3486498,3084003f +348649c,3c038041 +34864a0,9463b56e +34864a4,43102b +34864a8,10400024 +34864ac,8fbf0014 +34864b0,10000025 +34864b8,3442a5d0 +34864bc,8c4400a4 +34864c0,3c02001c +34864c4,2442003f +34864c8,c1018ef +34864cc,822024 +34864d0,3c038041 +34864d4,9463b56e +34864d8,43102b +34864dc,10400017 +34864e0,8fbf0014 +34864e4,10000018 +34864ec,3c028011 +34864f0,3442a5d0 +34864f4,8c4400a4 +34864f8,3c02001c +34864fc,c1018ef +3486500,822024 +3486504,3c038041 +3486508,9463b56e +348650c,43102b +3486510,1040000a +3486514,8fbf0014 +3486518,1000000b +3486520,3442a5d0 +3486524,844200d0 +3486528,3c038041 +348652c,9463b56e +3486530,43102a +3486534,14400004 +3486538,8fbf0014 +348653c,c101a70 +3486540,24040003 +3486544,8fbf0014 +3486548,3e00008 +348654c,27bd0018 +3486550,3e00008 +3486558,27bdffe8 +348655c,afbf0014 +3486560,3c028041 +3486564,8c42b5a0 +3486568,218c0 +348656c,3c048041 +3486570,2484b61c +3486574,641821 +3486578,8c630000 +348657c,1060000c +3486580,24420001 +3486584,220c0 +3486588,3c038041 +348658c,2463b61c +3486590,641821 +3486594,402825 +3486598,8c640000 +348659c,24420001 +34865a0,1480fffc +34865a4,24630008 +34865a8,3c028041 +34865ac,ac45b5a0 +34865b0,c102742 +34865b4,2404013c +34865b8,3c038041 +34865bc,ac62b59c +34865c0,24030001 +34865c4,ac430130 +34865c8,8fbf0014 +34865cc,3e00008 +34865d0,27bd0018 +34865d4,801025 +34865d8,84a30000 +34865dc,2404000a +34865e0,14640012 +34865e4,24040015 +34865e8,24030010 +34865ec,14c30008 +34865f0,94a3001c +34865f4,31942 +34865f8,3063007f +34865fc,24040075 +3486600,54640003 +3486604,94a3001c +3486608,3e00008 +348660c,ac400000 +3486610,3063001f +3486614,a0400000 +3486618,a0460001 +348661c,24040001 +3486620,a0440002 +3486624,3e00008 +3486628,a0430003 +348662c,14640010 +3486630,2404019c +3486634,90a3001d +3486638,24040006 +348663c,10640005 +3486640,24040011 +3486644,50640004 +3486648,90a30141 +348664c,3e00008 +3486650,ac400000 +3486654,90a30141 +3486658,a0400000 +348665c,a0460001 +3486660,24040002 +3486664,a0440002 +3486668,3e00008 +348666c,a0430003 +3486670,1464000a +3486674,2404003e +3486678,94a4001c +348667c,a0400000 +3486680,41a02 +3486684,3063001f +3486688,a0430001 +348668c,24030003 +3486690,a0430002 +3486694,3e00008 +3486698,a0440003 +348669c,54c4000d +34866a0,a4400000 +34866a4,2404011a +34866a8,5464000a +34866ac,a4400000 +34866b0,3c038011 +34866b4,3463a5d0 +34866b8,90631397 +34866bc,a0400000 +34866c0,a0430001 +34866c4,24030004 +34866c8,a0430002 +34866cc,3e00008 +34866d0,a0470003 +34866d4,a0400002 +34866d8,a0460001 +34866dc,3e00008 +34866e0,a0470003 +34866e4,3c038041 +34866e8,8c67b5a0 +34866ec,24e7ffff +34866f0,4e00021 +34866f4,801025 +34866f8,27bdfff8 +34866fc,4825 +3486700,3c0a8041 +3486704,254ab61c +3486708,1273021 +348670c,61fc2 +3486710,661821 +3486714,31843 +3486718,330c0 +348671c,ca3021 +3486720,8cc80000 +3486724,8cc60004 +3486728,afa60004 +348672c,a8302b +3486730,10c00003 +3486734,105302b +3486738,10000008 +348673c,2467ffff +3486740,50c00003 +3486744,ac480000 +3486748,10000004 +348674c,24690001 +3486750,8fa30004 +3486754,10000006 +3486758,ac430004 +348675c,e9182a +3486760,1060ffea +3486764,1273021 +3486768,ac400000 +348676c,ac400004 +3486770,3e00008 +3486774,27bd0008 +3486778,ac800000 +348677c,3e00008 +3486780,ac800004 +3486784,27bdffe0 +3486788,afbf001c +348678c,afb00018 +3486790,808025 +3486794,c101975 +3486798,27a40010 +348679c,8fa50010 +34867a0,14a00004 +34867a8,ae000000 +34867ac,10000003 +34867b0,ae000004 +34867b4,c1019b9 +34867b8,2002025 +34867bc,2001025 +34867c0,8fbf001c +34867c4,8fb00018 +34867c8,3e00008 +34867cc,27bd0020 +34867d0,27bdffe8 +34867d4,afbf0014 +34867d8,afb00010 +34867dc,afa40018 +34867e0,58202 +34867e4,afa5001c +34867e8,321000ff +34867ec,c101eeb +34867f0,52402 +34867f4,c101edc +34867f8,402025 +34867fc,3c038041 +3486800,8fa40018 +3486804,ac64b594 +3486808,2463b594 +348680c,8fa4001c +3486810,ac640004 +3486814,10202b 3486818,3c038041 -348681c,ac64b564 -3486820,94440004 -3486824,3c038041 -3486828,ac64b560 -348682c,80440006 -3486830,3c038041 -3486834,ac64b55c -3486838,90420007 -348683c,30420001 -3486840,3c038041 -3486844,16000003 -3486848,ac62b558 -348684c,3c028040 -3486850,90500024 -3486854,3c028040 -3486858,a0500025 -348685c,8fbf0014 -3486860,8fb00010 -3486864,3e00008 -3486868,27bd0018 -348686c,3c028041 -3486870,ac40b574 -3486874,2442b574 -3486878,ac400004 -348687c,3c028041 -3486880,ac40b570 -3486884,3c028041 -3486888,ac40b56c +348681c,ac64b590 +3486820,3c038041 +3486824,ac62b58c +3486828,90440001 +348682c,3c038041 +3486830,ac64b588 +3486834,94440002 +3486838,3c038041 +348683c,ac64b584 +3486840,94440004 +3486844,3c038041 +3486848,ac64b580 +348684c,80440006 +3486850,3c038041 +3486854,ac64b57c +3486858,90420007 +348685c,30420001 +3486860,3c038041 +3486864,16000003 +3486868,ac62b578 +348686c,3c028040 +3486870,90500024 +3486874,3c028040 +3486878,a0500025 +348687c,8fbf0014 +3486880,8fb00010 +3486884,3e00008 +3486888,27bd0018 348688c,3c028041 -3486890,ac40b568 -3486894,3c028041 -3486898,ac40b564 +3486890,ac40b594 +3486894,2442b594 +3486898,ac400004 348689c,3c028041 -34868a0,ac40b560 +34868a0,ac40b590 34868a4,3c028041 -34868a8,ac40b55c +34868a8,ac40b58c 34868ac,3c028041 -34868b0,3e00008 -34868b4,ac40b558 -34868b8,8c830000 -34868bc,3c028040 -34868c0,ac43002c -34868c4,94830004 -34868c8,3c028040 -34868cc,a4430030 -34868d0,90830006 -34868d4,3c028040 -34868d8,3e00008 -34868dc,a4430032 -34868e0,afa40000 -34868e4,afa50004 -34868e8,3c028041 -34868ec,2442b5e4 -34868f0,1825 -34868f4,24060003 -34868f8,8c450000 -34868fc,14a0000a -3486904,318c0 +34868b0,ac40b588 +34868b4,3c028041 +34868b8,ac40b584 +34868bc,3c028041 +34868c0,ac40b580 +34868c4,3c028041 +34868c8,ac40b57c +34868cc,3c028041 +34868d0,3e00008 +34868d4,ac40b578 +34868d8,8c830000 +34868dc,3c028040 +34868e0,ac43002c +34868e4,94830004 +34868e8,3c028040 +34868ec,a4430030 +34868f0,90830006 +34868f4,3c028040 +34868f8,3e00008 +34868fc,a4430032 +3486900,afa40000 +3486904,afa50004 3486908,3c028041 -348690c,2442b5e4 -3486910,621821 -3486914,8fa20000 -3486918,ac620000 -348691c,8fa20004 -3486920,3e00008 -3486924,ac620004 -3486928,10a40003 -348692c,24630001 -3486930,1466fff1 -3486934,24420008 -3486938,3e00008 -3486940,3c028040 -3486944,94420028 -3486948,10400013 -348694c,2403ffff -3486950,27bdffe0 -3486954,afbf001c -3486958,afa00010 -348695c,afa00014 -3486960,a3a30011 -3486964,24040005 -3486968,a3a40012 -348696c,a3a30013 -3486970,3c038040 -3486974,94630026 -3486978,a3a30016 -348697c,a7a20014 -3486980,8fa40010 -3486984,c101a38 -3486988,8fa50014 -348698c,8fbf001c -3486990,3e00008 -3486994,27bd0020 -3486998,3e00008 -34869a0,27bdffe0 -34869a4,afbf001c -34869a8,3c0200ff -34869ac,34420500 -34869b0,442825 -34869b4,c1019b1 -34869b8,27a40010 -34869bc,8fa20010 -34869c0,10400005 -34869c4,8fbf001c -34869c8,402025 -34869cc,c101a38 -34869d0,8fa50014 -34869d4,8fbf001c -34869d8,3e00008 -34869dc,27bd0020 -34869e0,3c038041 -34869e4,2462b5e4 -34869e8,8c450008 -34869ec,8c44000c -34869f0,ac65b5e4 -34869f4,ac440004 -34869f8,8c440010 -34869fc,8c430014 -3486a00,ac440008 -3486a04,ac43000c -3486a08,ac400010 -3486a0c,3e00008 -3486a10,ac400014 -3486a14,801825 -3486a18,3084ffff -3486a1c,240205ff -3486a20,1482000b -3486a24,27bdfff8 -3486a28,3c028011 -3486a2c,3442a660 -3486a30,94430000 -3486a34,24630001 -3486a38,a4430000 -3486a3c,3c028040 -3486a40,a4400028 -3486a44,3c028040 -3486a48,10000009 -3486a4c,a4400026 -3486a50,3c020057 -3486a54,24420058 -3486a58,14620005 -3486a5c,3c02801c -3486a60,344284a0 -3486a64,8c431d38 -3486a68,34630001 -3486a6c,ac431d38 -3486a70,3e00008 -3486a74,27bd0008 -3486a78,27bdffe0 -3486a7c,afbf001c -3486a80,afb00018 -3486a84,3c028041 -3486a88,8c50b5e4 -3486a8c,2442b5e4 -3486a90,8c420004 -3486a94,afa20010 -3486a98,2403ff00 -3486a9c,431024 -3486aa0,3c03007c -3486aa4,14430008 -3486aa8,8fbf001c -3486aac,c101df7 -3486ab4,c101a78 -3486abc,c101a85 -3486ac0,2002025 -3486ac4,8fbf001c -3486ac8,8fb00018 -3486acc,3e00008 -3486ad0,27bd0020 -3486ad4,27bdffe8 -3486ad8,afbf0014 -3486adc,afb00010 -3486ae0,3c028041 -3486ae4,8c50b574 -3486ae8,1200000e -3486aec,8fbf0014 -3486af0,c101a2e -3486af4,2444b574 -3486af8,3c028041 -3486afc,8c42b5e4 -3486b00,14500003 -3486b08,c101a78 -3486b10,c101a85 -3486b14,2002025 -3486b18,c101a1b -3486b20,8fbf0014 -3486b24,8fb00010 -3486b28,3e00008 -3486b2c,27bd0018 -3486b30,27bdffe0 -3486b34,afbf001c -3486b38,3c028041 -3486b3c,8c43b5e4 -3486b40,2442b5e4 -3486b44,8c420004 -3486b48,afa30010 -3486b4c,1060000d -3486b50,afa20014 -3486b54,602025 -3486b58,c1019ec -3486b5c,402825 -3486b60,3c02801d -3486b64,3442aa30 -3486b68,3c038041 -3486b6c,8c63b57c -3486b70,ac430428 -3486b74,3c038041 -3486b78,8c63b56c -3486b7c,80630000 -3486b80,a0430424 -3486b84,8fbf001c -3486b88,3e00008 -3486b8c,27bd0020 -3486b90,27bdffe8 -3486b94,afbf0014 -3486b98,c101a50 -3486ba0,3c02801d -3486ba4,3442aa30 -3486ba8,8c42066c -3486bac,3c03fcac -3486bb0,24632485 -3486bb4,431024 -3486bb8,14400033 -3486bbc,3c028041 +348690c,2442b604 +3486910,1825 +3486914,24060003 +3486918,8c450000 +348691c,14a0000a +3486924,318c0 +3486928,3c028041 +348692c,2442b604 +3486930,621821 +3486934,8fa20000 +3486938,ac620000 +348693c,8fa20004 +3486940,3e00008 +3486944,ac620004 +3486948,10a40003 +348694c,24630001 +3486950,1466fff1 +3486954,24420008 +3486958,3e00008 +3486960,3c028040 +3486964,94420028 +3486968,10400013 +348696c,2403ffff +3486970,27bdffe0 +3486974,afbf001c +3486978,afa00010 +348697c,afa00014 +3486980,a3a30011 +3486984,24040005 +3486988,a3a40012 +348698c,a3a30013 +3486990,3c038040 +3486994,94630026 +3486998,a3a30016 +348699c,a7a20014 +34869a0,8fa40010 +34869a4,c101a40 +34869a8,8fa50014 +34869ac,8fbf001c +34869b0,3e00008 +34869b4,27bd0020 +34869b8,3e00008 +34869c0,27bdffe0 +34869c4,afbf001c +34869c8,3c0200ff +34869cc,34420500 +34869d0,442825 +34869d4,c1019b9 +34869d8,27a40010 +34869dc,8fa20010 +34869e0,10400005 +34869e4,8fbf001c +34869e8,402025 +34869ec,c101a40 +34869f0,8fa50014 +34869f4,8fbf001c +34869f8,3e00008 +34869fc,27bd0020 +3486a00,3c038041 +3486a04,2462b604 +3486a08,8c450008 +3486a0c,8c44000c +3486a10,ac65b604 +3486a14,ac440004 +3486a18,8c440010 +3486a1c,8c430014 +3486a20,ac440008 +3486a24,ac43000c +3486a28,ac400010 +3486a2c,3e00008 +3486a30,ac400014 +3486a34,801825 +3486a38,3084ffff +3486a3c,240205ff +3486a40,1482000b +3486a44,27bdfff8 +3486a48,3c028011 +3486a4c,3442a660 +3486a50,94430000 +3486a54,24630001 +3486a58,a4430000 +3486a5c,3c028040 +3486a60,a4400028 +3486a64,3c028040 +3486a68,10000009 +3486a6c,a4400026 +3486a70,3c020057 +3486a74,24420058 +3486a78,14620005 +3486a7c,3c02801c +3486a80,344284a0 +3486a84,8c431d38 +3486a88,34630001 +3486a8c,ac431d38 +3486a90,3e00008 +3486a94,27bd0008 +3486a98,27bdffe0 +3486a9c,afbf001c +3486aa0,afb00018 +3486aa4,3c028041 +3486aa8,8c50b604 +3486aac,2442b604 +3486ab0,8c420004 +3486ab4,afa20010 +3486ab8,2403ff00 +3486abc,431024 +3486ac0,3c03007c +3486ac4,14430008 +3486ac8,8fbf001c +3486acc,c101dff +3486ad4,c101a80 +3486adc,c101a8d +3486ae0,2002025 +3486ae4,8fbf001c +3486ae8,8fb00018 +3486aec,3e00008 +3486af0,27bd0020 +3486af4,27bdffe8 +3486af8,afbf0014 +3486afc,afb00010 +3486b00,3c028041 +3486b04,8c50b594 +3486b08,1200000e +3486b0c,8fbf0014 +3486b10,c101a36 +3486b14,2444b594 +3486b18,3c028041 +3486b1c,8c42b604 +3486b20,14500003 +3486b28,c101a80 +3486b30,c101a8d +3486b34,2002025 +3486b38,c101a23 +3486b40,8fbf0014 +3486b44,8fb00010 +3486b48,3e00008 +3486b4c,27bd0018 +3486b50,27bdffe0 +3486b54,afbf001c +3486b58,3c028041 +3486b5c,8c43b604 +3486b60,2442b604 +3486b64,8c420004 +3486b68,afa30010 +3486b6c,1060000d +3486b70,afa20014 +3486b74,602025 +3486b78,c1019f4 +3486b7c,402825 +3486b80,3c02801d +3486b84,3442aa30 +3486b88,3c038041 +3486b8c,8c63b59c +3486b90,ac430428 +3486b94,3c038041 +3486b98,8c63b58c +3486b9c,80630000 +3486ba0,a0430424 +3486ba4,8fbf001c +3486ba8,3e00008 +3486bac,27bd0020 +3486bb0,27bdffe8 +3486bb4,afbf0014 +3486bb8,c101a58 3486bc0,3c02801d 3486bc4,3442aa30 -3486bc8,94420088 -3486bcc,30420001 -3486bd0,1040002a -3486bd4,1025 -3486bd8,3c02801d -3486bdc,3442aa30 -3486be0,8c420670 -3486be4,3c03000c -3486be8,431024 -3486bec,14400023 -3486bf0,1025 -3486bf4,3c02800e -3486bf8,3442f1b0 -3486bfc,8c420000 -3486c00,30420020 -3486c04,1440001d -3486c08,1025 -3486c0c,3c02801c -3486c10,344284a0 -3486c14,8c420794 -3486c18,14400018 -3486c1c,1025 -3486c20,3c028041 -3486c24,9042b554 -3486c28,24420001 -3486c2c,304200ff -3486c30,2c430002 -3486c34,14600012 -3486c38,3c038041 -3486c3c,3c028041 -3486c40,c101a9e -3486c44,a040b554 -3486c48,c101df3 -3486c50,10400005 -3486c58,c101dfc -3486c60,1000000b -3486c64,8fbf0014 -3486c68,c101acc -3486c70,10000007 -3486c74,8fbf0014 -3486c78,1025 -3486c7c,3c038041 -3486c80,10000002 -3486c84,a062b554 -3486c88,a040b554 -3486c8c,8fbf0014 -3486c90,3e00008 -3486c94,27bd0018 -3486c98,27bdffd8 -3486c9c,afbf0024 -3486ca0,afb20020 -3486ca4,afb1001c -3486ca8,afb00018 -3486cac,a09025 -3486cb0,10800012 -3486cb4,c08825 -3486cb8,10c00010 -3486cbc,808025 -3486cc0,4c10004 -3486cc4,c03825 -3486cc8,63823 -3486ccc,73e00 -3486cd0,73e03 -3486cd4,30e700ff -3486cd8,3c02801c -3486cdc,344284a0 -3486ce0,904600a5 -3486ce4,2002825 -3486ce8,c1019d9 -3486cec,27a40010 -3486cf0,8fa20010 -3486cf4,14400005 -3486cf8,8fa40010 -3486cfc,c101a1b -3486d04,10000019 -3486d08,2201025 -3486d0c,c1019ec -3486d10,8fa50014 -3486d14,3c028041 -3486d18,8c42b56c -3486d1c,86040000 -3486d20,2403000a -3486d24,1483000c -3486d28,80420000 -3486d2c,8fa30014 -3486d30,2404ff00 -3486d34,641824 -3486d38,3c04007c -3486d3c,50640001 -3486d40,2402007c -3486d44,9603001c -3486d48,3063f01f -3486d4c,22140 -3486d50,641825 -3486d54,a603001c -3486d58,6230005 -3486d5c,a2420424 -3486d60,21023 -3486d64,21600 -3486d68,21603 -3486d6c,a2420424 -3486d70,8fbf0024 -3486d74,8fb20020 -3486d78,8fb1001c -3486d7c,8fb00018 -3486d80,3e00008 -3486d84,27bd0028 -3486d88,27bdffd8 -3486d8c,afbf0024 -3486d90,afb20020 -3486d94,afb1001c -3486d98,afb00018 -3486d9c,808825 -3486da0,3825 -3486da4,3025 -3486da8,802825 -3486dac,c1019d9 -3486db0,27a40010 -3486db4,8fa20010 -3486db8,10400029 -3486dbc,93b20016 -3486dc0,c101ee3 -3486dc4,97a40014 -3486dc8,c101ed4 -3486dcc,402025 -3486dd0,408025 -3486dd4,ae200134 -3486dd8,3c028040 -3486ddc,16400015 -3486de0,a0520025 -3486de4,3c028040 -3486de8,90430024 -3486dec,3c028040 -3486df0,a0430025 -3486df4,3025 -3486df8,96050002 -3486dfc,3c11801c -3486e00,3c02800d -3486e04,3442ce14 -3486e08,40f809 -3486e0c,362484a0 -3486e10,92050001 -3486e14,3c028006 -3486e18,3442fdcc -3486e1c,40f809 -3486e20,362484a0 -3486e24,c101efb -3486e28,2002025 -3486e2c,10000013 -3486e30,8fbf0024 -3486e34,3025 -3486e38,96050002 -3486e3c,3c04801c -3486e40,3c02800d -3486e44,3442ce14 -3486e48,40f809 -3486e4c,348484a0 -3486e50,c101a2e -3486e54,27a40010 -3486e58,10000008 -3486e5c,8fbf0024 -3486e60,c101ee3 -3486e64,2404005b -3486e68,c101ed4 -3486e6c,402025 -3486e70,408025 -3486e74,1000ffdb -3486e78,ae200134 -3486e7c,8fb20020 -3486e80,8fb1001c -3486e84,8fb00018 -3486e88,3e00008 -3486e8c,27bd0028 -3486e90,27bdffe8 -3486e94,afbf0014 -3486e98,afb00010 -3486e9c,3c028011 -3486ea0,3442a5d0 -3486ea4,94500eec -3486ea8,32100002 -3486eac,1600000c -3486eb0,3c028040 -3486eb4,90420cd5 -3486eb8,50400004 +3486bc8,8c42066c +3486bcc,3c03fcac +3486bd0,24632485 +3486bd4,431024 +3486bd8,14400033 +3486bdc,3c028041 +3486be0,3c02801d +3486be4,3442aa30 +3486be8,94420088 +3486bec,30420001 +3486bf0,1040002a +3486bf4,1025 +3486bf8,3c02801d +3486bfc,3442aa30 +3486c00,8c420670 +3486c04,3c03000c +3486c08,431024 +3486c0c,14400023 +3486c10,1025 +3486c14,3c02800e +3486c18,3442f1b0 +3486c1c,8c420000 +3486c20,30420020 +3486c24,1440001d +3486c28,1025 +3486c2c,3c02801c +3486c30,344284a0 +3486c34,8c420794 +3486c38,14400018 +3486c3c,1025 +3486c40,3c028041 +3486c44,9042b574 +3486c48,24420001 +3486c4c,304200ff +3486c50,2c430002 +3486c54,14600012 +3486c58,3c038041 +3486c5c,3c028041 +3486c60,c101aa6 +3486c64,a040b574 +3486c68,c101dfb +3486c70,10400005 +3486c78,c101e04 +3486c80,1000000b +3486c84,8fbf0014 +3486c88,c101ad4 +3486c90,10000007 +3486c94,8fbf0014 +3486c98,1025 +3486c9c,3c038041 +3486ca0,10000002 +3486ca4,a062b574 +3486ca8,a040b574 +3486cac,8fbf0014 +3486cb0,3e00008 +3486cb4,27bd0018 +3486cb8,27bdffd8 +3486cbc,afbf0024 +3486cc0,afb20020 +3486cc4,afb1001c +3486cc8,afb00018 +3486ccc,a09025 +3486cd0,10800012 +3486cd4,c08825 +3486cd8,10c00010 +3486cdc,808025 +3486ce0,4c10004 +3486ce4,c03825 +3486ce8,63823 +3486cec,73e00 +3486cf0,73e03 +3486cf4,30e700ff +3486cf8,3c02801c +3486cfc,344284a0 +3486d00,904600a5 +3486d04,2002825 +3486d08,c1019e1 +3486d0c,27a40010 +3486d10,8fa20010 +3486d14,14400005 +3486d18,8fa40010 +3486d1c,c101a23 +3486d24,10000019 +3486d28,2201025 +3486d2c,c1019f4 +3486d30,8fa50014 +3486d34,3c028041 +3486d38,8c42b58c +3486d3c,86040000 +3486d40,2403000a +3486d44,1483000c +3486d48,80420000 +3486d4c,8fa30014 +3486d50,2404ff00 +3486d54,641824 +3486d58,3c04007c +3486d5c,50640001 +3486d60,2402007c +3486d64,9603001c +3486d68,3063f01f +3486d6c,22140 +3486d70,641825 +3486d74,a603001c +3486d78,6230005 +3486d7c,a2420424 +3486d80,21023 +3486d84,21600 +3486d88,21603 +3486d8c,a2420424 +3486d90,8fbf0024 +3486d94,8fb20020 +3486d98,8fb1001c +3486d9c,8fb00018 +3486da0,3e00008 +3486da4,27bd0028 +3486da8,27bdffd8 +3486dac,afbf0024 +3486db0,afb20020 +3486db4,afb1001c +3486db8,afb00018 +3486dbc,808825 +3486dc0,3825 +3486dc4,3025 +3486dc8,802825 +3486dcc,c1019e1 +3486dd0,27a40010 +3486dd4,8fa20010 +3486dd8,10400029 +3486ddc,93b20016 +3486de0,c101eeb +3486de4,97a40014 +3486de8,c101edc +3486dec,402025 +3486df0,408025 +3486df4,ae200134 +3486df8,3c028040 +3486dfc,16400015 +3486e00,a0520025 +3486e04,3c028040 +3486e08,90430024 +3486e0c,3c028040 +3486e10,a0430025 +3486e14,3025 +3486e18,96050002 +3486e1c,3c11801c +3486e20,3c02800d +3486e24,3442ce14 +3486e28,40f809 +3486e2c,362484a0 +3486e30,92050001 +3486e34,3c028006 +3486e38,3442fdcc +3486e3c,40f809 +3486e40,362484a0 +3486e44,c101f03 +3486e48,2002025 +3486e4c,10000013 +3486e50,8fbf0024 +3486e54,3025 +3486e58,96050002 +3486e5c,3c04801c +3486e60,3c02800d +3486e64,3442ce14 +3486e68,40f809 +3486e6c,348484a0 +3486e70,c101a36 +3486e74,27a40010 +3486e78,10000008 +3486e7c,8fbf0024 +3486e80,c101eeb +3486e84,2404005b +3486e88,c101edc +3486e8c,402025 +3486e90,408025 +3486e94,1000ffdb +3486e98,ae200134 +3486e9c,8fb20020 +3486ea0,8fb1001c +3486ea4,8fb00018 +3486ea8,3e00008 +3486eac,27bd0028 +3486eb0,27bdffe8 +3486eb4,afbf0014 +3486eb8,afb00010 3486ebc,3c028011 -3486ec0,c101a68 -3486ec4,24040002 -3486ec8,3c028011 -3486ecc,3442a5d0 -3486ed0,94430eec -3486ed4,34630002 -3486ed8,a4430eec -3486edc,3c028040 -3486ee0,90430cd5 -3486ee4,14600002 -3486ee8,24020001 -3486eec,10102b -3486ef0,8fbf0014 -3486ef4,8fb00010 -3486ef8,3e00008 -3486efc,27bd0018 -3486f00,94830004 -3486f04,94820006 -3486f08,620018 -3486f0c,9082000c -3486f10,1812 -3486f1c,620018 -3486f20,1012 -3486f24,3e00008 -3486f2c,27bdffe8 -3486f30,afbf0014 -3486f34,afb00010 -3486f38,c101bc0 -3486f3c,808025 -3486f40,96030008 -3486f44,620018 -3486f48,1012 -3486f4c,8fbf0014 -3486f50,8fb00010 -3486f54,3e00008 -3486f58,27bd0018 -3486f5c,27bdff98 -3486f60,afbf0064 -3486f64,afb60060 -3486f68,afb5005c -3486f6c,afb40058 -3486f70,afb30054 -3486f74,afb20050 -3486f78,afb1004c -3486f7c,afb00048 -3486f80,808025 -3486f84,a0a025 -3486f88,c0a825 -3486f8c,94b10004 -3486f90,94a20006 -3486f94,470018 -3486f98,9012 -3486f9c,90b6000b -3486fa0,90b3000a -3486fa4,139d40 -3486fa8,3c0200e0 -3486fac,2629824 -3486fb0,1614c0 -3486fb4,3c030018 -3486fb8,431024 -3486fbc,2629825 -3486fc0,2622ffff -3486fc4,30420fff -3486fc8,531025 -3486fcc,3c03fd00 -3486fd0,431025 -3486fd4,afa20010 -3486fd8,c101bc0 -3486fdc,a02025 -3486fe0,550018 -3486fe4,8e820000 -3486fe8,1812 -3486fec,431021 -3486ff0,afa20014 -3486ff4,2ec30002 -3486ff8,10600003 -3486ffc,24020010 -3487000,24020004 -3487004,2c21004 -3487008,510018 -348700c,1812 -3487010,2463003f -3487014,317c3 -3487018,3042003f -348701c,431021 -3487020,210c0 -3487024,3c030003 -3487028,3463fe00 -348702c,431024 -3487030,531025 -3487034,3c03f500 -3487038,431025 -348703c,afa20018 -3487040,3c040700 -3487044,afa4001c -3487048,3c03e600 -348704c,afa30020 -3487050,afa00024 -3487054,3c03f400 -3487058,afa30028 -348705c,2623ffff -3487060,31b80 -3487064,3c0500ff -3487068,34a5f000 -348706c,651824 -3487070,2652ffff -3487074,129080 -3487078,32520ffc -348707c,721825 -3487080,642025 -3487084,afa4002c -3487088,3c04e700 -348708c,afa40030 -3487090,afa00034 -3487094,afa20038 -3487098,afa0003c -348709c,3c02f200 -34870a0,afa20040 -34870a4,afa30044 -34870a8,27a20010 -34870ac,27a60048 -34870b0,8e030008 -34870b4,24640008 -34870b8,ae040008 -34870bc,8c450004 -34870c0,8c440000 -34870c4,ac650004 -34870c8,24420008 -34870cc,1446fff8 -34870d0,ac640000 -34870d4,8fbf0064 -34870d8,8fb60060 -34870dc,8fb5005c -34870e0,8fb40058 -34870e4,8fb30054 -34870e8,8fb20050 -34870ec,8fb1004c -34870f0,8fb00048 -34870f4,3e00008 -34870f8,27bd0068 -34870fc,27bdffe0 -3487100,8fa80030 -3487104,8fa20034 -3487108,8faa0038 -348710c,94a30004 -3487110,31a80 -3487114,14400002 -3487118,62001a -348711c,7000d -3487120,4812 -3487124,94a30006 -3487128,471021 -348712c,21380 -3487130,3c0b00ff -3487134,356bf000 -3487138,4b1024 -348713c,1482821 -3487140,52880 -3487144,30a50fff -3487148,451025 -348714c,3c05e400 -3487150,451025 -3487154,afa20000 -3487158,73b80 -348715c,eb3824 -3487160,84080 -3487164,31080fff -3487168,e83825 -348716c,afa70004 -3487170,3c02e100 -3487174,afa20008 -3487178,660018 -348717c,1012 -3487180,21140 -3487184,3042ffff -3487188,afa2000c -348718c,3c02f100 -3487190,afa20010 -3487194,31a80 -3487198,15400002 -348719c,6a001a -34871a0,7000d -34871a4,1012 -34871a8,3042ffff -34871ac,94c00 -34871b0,491025 -34871b4,afa20014 -34871b8,afbd0018 -34871bc,27a50018 -34871c0,8c820008 -34871c4,24430008 -34871c8,ac830008 -34871cc,8fa30018 -34871d0,8c670004 -34871d4,8c660000 -34871d8,ac470004 -34871dc,ac460000 -34871e0,24620008 -34871e4,1445fff6 -34871e8,afa20018 -34871ec,3e00008 -34871f0,27bd0020 -34871f4,27bdffa0 -34871f8,afbf005c -34871fc,afb10058 -3487200,afb00054 -3487204,afa00010 -3487208,3c0201a0 -348720c,24422000 -3487210,afa20014 -3487214,3c110003 -3487218,362295c0 -348721c,afa20018 -3487220,c102749 -3487224,27a40010 -3487228,afa0001c -348722c,3c020084 -3487230,24426000 -3487234,afa20020 -3487238,3402b400 -348723c,afa20024 -3487240,c102749 -3487244,27a4001c -3487248,afa00028 -348724c,3c02007b -3487250,3442d000 -3487254,afa2002c -3487258,3c100008 -348725c,361088a0 -3487260,afb00030 -3487264,c102749 -3487268,27a40028 -348726c,afa00034 -3487270,3c0201a3 -3487274,3442c000 -3487278,afa20038 -348727c,24023b00 -3487280,afa2003c -3487284,c102749 -3487288,27a40034 -348728c,afa00040 -3487290,3c020085 -3487294,3442e000 -3487298,afa20044 -348729c,24021d80 -34872a0,afa20048 -34872a4,c102749 -34872a8,27a40040 -34872ac,8fa20010 -34872b0,2631a300 -34872b4,518821 -34872b8,3c038041 -34872bc,ac71a458 -34872c0,24422980 -34872c4,3c038041 -34872c8,ac62a448 -34872cc,8fa20028 -34872d0,3c038041 -34872d4,ac62a438 +3486ec0,3442a5d0 +3486ec4,94500eec +3486ec8,32100002 +3486ecc,1600000c +3486ed0,3c028040 +3486ed4,90420cd5 +3486ed8,50400004 +3486edc,3c028011 +3486ee0,c101a70 +3486ee4,24040002 +3486ee8,3c028011 +3486eec,3442a5d0 +3486ef0,94430eec +3486ef4,34630002 +3486ef8,a4430eec +3486efc,3c028040 +3486f00,90430cd5 +3486f04,14600002 +3486f08,24020001 +3486f0c,10102b +3486f10,8fbf0014 +3486f14,8fb00010 +3486f18,3e00008 +3486f1c,27bd0018 +3486f20,94830004 +3486f24,94820006 +3486f28,620018 +3486f2c,9082000c +3486f30,1812 +3486f3c,620018 +3486f40,1012 +3486f44,3e00008 +3486f4c,27bdffe8 +3486f50,afbf0014 +3486f54,afb00010 +3486f58,c101bc8 +3486f5c,808025 +3486f60,96030008 +3486f64,620018 +3486f68,1012 +3486f6c,8fbf0014 +3486f70,8fb00010 +3486f74,3e00008 +3486f78,27bd0018 +3486f7c,27bdff98 +3486f80,afbf0064 +3486f84,afb60060 +3486f88,afb5005c +3486f8c,afb40058 +3486f90,afb30054 +3486f94,afb20050 +3486f98,afb1004c +3486f9c,afb00048 +3486fa0,808025 +3486fa4,a0a025 +3486fa8,c0a825 +3486fac,94b10004 +3486fb0,94a20006 +3486fb4,470018 +3486fb8,9012 +3486fbc,90b6000b +3486fc0,90b3000a +3486fc4,139d40 +3486fc8,3c0200e0 +3486fcc,2629824 +3486fd0,1614c0 +3486fd4,3c030018 +3486fd8,431024 +3486fdc,2629825 +3486fe0,2622ffff +3486fe4,30420fff +3486fe8,531025 +3486fec,3c03fd00 +3486ff0,431025 +3486ff4,afa20010 +3486ff8,c101bc8 +3486ffc,a02025 +3487000,550018 +3487004,8e820000 +3487008,1812 +348700c,431021 +3487010,afa20014 +3487014,2ec30002 +3487018,10600003 +348701c,24020010 +3487020,24020004 +3487024,2c21004 +3487028,510018 +348702c,1812 +3487030,2463003f +3487034,317c3 +3487038,3042003f +348703c,431021 +3487040,210c0 +3487044,3c030003 +3487048,3463fe00 +348704c,431024 +3487050,531025 +3487054,3c03f500 +3487058,431025 +348705c,afa20018 +3487060,3c040700 +3487064,afa4001c +3487068,3c03e600 +348706c,afa30020 +3487070,afa00024 +3487074,3c03f400 +3487078,afa30028 +348707c,2623ffff +3487080,31b80 +3487084,3c0500ff +3487088,34a5f000 +348708c,651824 +3487090,2652ffff +3487094,129080 +3487098,32520ffc +348709c,721825 +34870a0,642025 +34870a4,afa4002c +34870a8,3c04e700 +34870ac,afa40030 +34870b0,afa00034 +34870b4,afa20038 +34870b8,afa0003c +34870bc,3c02f200 +34870c0,afa20040 +34870c4,afa30044 +34870c8,27a20010 +34870cc,27a60048 +34870d0,8e030008 +34870d4,24640008 +34870d8,ae040008 +34870dc,8c450004 +34870e0,8c440000 +34870e4,ac650004 +34870e8,24420008 +34870ec,1446fff8 +34870f0,ac640000 +34870f4,8fbf0064 +34870f8,8fb60060 +34870fc,8fb5005c +3487100,8fb40058 +3487104,8fb30054 +3487108,8fb20050 +348710c,8fb1004c +3487110,8fb00048 +3487114,3e00008 +3487118,27bd0068 +348711c,27bdffe0 +3487120,8fa80030 +3487124,8fa20034 +3487128,8faa0038 +348712c,94a30004 +3487130,31a80 +3487134,14400002 +3487138,62001a +348713c,7000d +3487140,4812 +3487144,94a30006 +3487148,471021 +348714c,21380 +3487150,3c0b00ff +3487154,356bf000 +3487158,4b1024 +348715c,1482821 +3487160,52880 +3487164,30a50fff +3487168,451025 +348716c,3c05e400 +3487170,451025 +3487174,afa20000 +3487178,73b80 +348717c,eb3824 +3487180,84080 +3487184,31080fff +3487188,e83825 +348718c,afa70004 +3487190,3c02e100 +3487194,afa20008 +3487198,660018 +348719c,1012 +34871a0,21140 +34871a4,3042ffff +34871a8,afa2000c +34871ac,3c02f100 +34871b0,afa20010 +34871b4,31a80 +34871b8,15400002 +34871bc,6a001a +34871c0,7000d +34871c4,1012 +34871c8,3042ffff +34871cc,94c00 +34871d0,491025 +34871d4,afa20014 +34871d8,afbd0018 +34871dc,27a50018 +34871e0,8c820008 +34871e4,24430008 +34871e8,ac830008 +34871ec,8fa30018 +34871f0,8c670004 +34871f4,8c660000 +34871f8,ac470004 +34871fc,ac460000 +3487200,24620008 +3487204,1445fff6 +3487208,afa20018 +348720c,3e00008 +3487210,27bd0020 +3487214,27bdffa0 +3487218,afbf005c +348721c,afb10058 +3487220,afb00054 +3487224,afa00010 +3487228,3c0201a0 +348722c,24422000 +3487230,afa20014 +3487234,3c110003 +3487238,362295c0 +348723c,afa20018 +3487240,c102751 +3487244,27a40010 +3487248,afa0001c +348724c,3c020084 +3487250,24426000 +3487254,afa20020 +3487258,3402b400 +348725c,afa20024 +3487260,c102751 +3487264,27a4001c +3487268,afa00028 +348726c,3c02007b +3487270,3442d000 +3487274,afa2002c +3487278,3c100008 +348727c,361088a0 +3487280,afb00030 +3487284,c102751 +3487288,27a40028 +348728c,afa00034 +3487290,3c0201a3 +3487294,3442c000 +3487298,afa20038 +348729c,24023b00 +34872a0,afa2003c +34872a4,c102751 +34872a8,27a40034 +34872ac,afa00040 +34872b0,3c020085 +34872b4,3442e000 +34872b8,afa20044 +34872bc,24021d80 +34872c0,afa20048 +34872c4,c102751 +34872c8,27a40040 +34872cc,8fa20010 +34872d0,2631a300 +34872d4,518821 34872d8,3c038041 -34872dc,8fa4001c -34872e0,ac64a428 -34872e4,3c048041 -34872e8,3c038041 -34872ec,2463db08 -34872f0,ac83a408 -34872f4,3c048041 +34872dc,ac71a478 +34872e0,24422980 +34872e4,3c038041 +34872e8,ac62a468 +34872ec,8fa20028 +34872f0,3c038041 +34872f4,ac62a458 34872f8,3c038041 -34872fc,2463e308 -3487300,ac83a3f8 -3487304,2610f7a0 -3487308,501021 -348730c,3c038041 -3487310,ac62a3e8 -3487314,8fa20034 -3487318,24441e00 -348731c,3c038041 -3487320,ac64a3d8 -3487324,244435c0 -3487328,3c038041 -348732c,ac64a3c8 -3487330,8fa30040 -3487334,24631980 -3487338,3c048041 -348733c,ac83a3b8 -3487340,3c038041 -3487344,ac62a3a8 -3487348,3c118041 -348734c,c101bcb -3487350,2624a418 -3487354,408025 -3487358,c10273a -348735c,402025 -3487360,104fc2 -3487364,1304821 -3487368,2a100002 -348736c,16000018 -3487370,ae22a418 -3487374,94843 -3487378,3c038041 -348737c,2463c640 -3487380,2025 -3487384,3025 -3487388,2204025 -348738c,2407fff0 -3487390,8d05a418 -3487394,a42821 -3487398,90620000 -348739c,21102 -34873a0,471025 -34873a4,a0a20000 -34873a8,8d02a418 -34873ac,441021 -34873b0,90650000 -34873b4,a72825 -34873b8,a0450001 -34873bc,24c60001 -34873c0,24630001 -34873c4,c9102a -34873c8,1440fff1 -34873cc,24840002 -34873d0,8fbf005c -34873d4,8fb10058 -34873d8,8fb00054 -34873dc,3e00008 -34873e0,27bd0060 -34873e4,3c038040 -34873e8,9462084e -34873ec,2463084e -34873f0,94640002 -34873f4,94630004 -34873f8,3c058041 -34873fc,8ca5b520 -3487400,a4a20000 -3487404,a4a40002 -3487408,a4a30004 -348740c,3c058041 -3487410,8ca6b51c -3487414,a4c20000 -3487418,8ca5b51c -348741c,a4a40004 -3487420,a4a30008 -3487424,240500ff -3487428,1445000a +34872fc,8fa4001c +3487300,ac64a448 +3487304,3c048041 +3487308,3c038041 +348730c,2463db28 +3487310,ac83a428 +3487314,3c048041 +3487318,3c038041 +348731c,2463e328 +3487320,ac83a418 +3487324,2610f7a0 +3487328,501021 +348732c,3c038041 +3487330,ac62a408 +3487334,8fa20034 +3487338,24441e00 +348733c,3c038041 +3487340,ac64a3f8 +3487344,244435c0 +3487348,3c038041 +348734c,ac64a3e8 +3487350,8fa30040 +3487354,24631980 +3487358,3c048041 +348735c,ac83a3d8 +3487360,3c038041 +3487364,ac62a3c8 +3487368,3c118041 +348736c,c101bd3 +3487370,2624a438 +3487374,408025 +3487378,c102742 +348737c,402025 +3487380,104fc2 +3487384,1304821 +3487388,2a100002 +348738c,16000018 +3487390,ae22a438 +3487394,94843 +3487398,3c038041 +348739c,2463c660 +34873a0,2025 +34873a4,3025 +34873a8,2204025 +34873ac,2407fff0 +34873b0,8d05a438 +34873b4,a42821 +34873b8,90620000 +34873bc,21102 +34873c0,471025 +34873c4,a0a20000 +34873c8,8d02a438 +34873cc,441021 +34873d0,90650000 +34873d4,a72825 +34873d8,a0450001 +34873dc,24c60001 +34873e0,24630001 +34873e4,c9102a +34873e8,1440fff1 +34873ec,24840002 +34873f0,8fbf005c +34873f4,8fb10058 +34873f8,8fb00054 +34873fc,3e00008 +3487400,27bd0060 +3487404,3c038040 +3487408,9462084e +348740c,2463084e +3487410,94640002 +3487414,94630004 +3487418,3c058041 +348741c,8ca5b540 +3487420,a4a20000 +3487424,a4a40002 +3487428,a4a30004 348742c,3c058041 -3487430,24050046 -3487434,14850007 -3487438,3c058041 -348743c,24050032 -3487440,14650004 -3487444,3c058041 -3487448,1825 -348744c,2025 -3487450,240200c8 -3487454,8ca5b518 -3487458,a4a20000 -348745c,a4a40002 -3487460,a4a30004 +3487430,8ca6b53c +3487434,a4c20000 +3487438,8ca5b53c +348743c,a4a40004 +3487440,a4a30008 +3487444,240500ff +3487448,1445000a +348744c,3c058041 +3487450,24050046 +3487454,14850007 +3487458,3c058041 +348745c,24050032 +3487460,14650004 3487464,3c058041 -3487468,8ca5b514 -348746c,a4a20000 -3487470,a4a40002 -3487474,a4a30004 -3487478,3c028041 -348747c,8c43b510 -3487480,3c028040 -3487484,94450854 -3487488,24420854 -348748c,94440002 -3487490,94420004 -3487494,a4650000 -3487498,a4640002 -348749c,a4620004 -34874a0,3c028041 -34874a4,8c43b50c -34874a8,3c028040 -34874ac,9445085a -34874b0,2442085a -34874b4,94440002 -34874b8,94420004 -34874bc,a4650000 -34874c0,a4640002 -34874c4,a4620004 -34874c8,3c028041 -34874cc,8c43b508 -34874d0,3c028040 -34874d4,94450860 -34874d8,24420860 -34874dc,94440002 -34874e0,94420004 -34874e4,a4650000 -34874e8,a4640002 -34874ec,a4620004 -34874f0,3c028041 -34874f4,8c42b504 -34874f8,3c068040 -34874fc,94c30872 -3487500,a4430000 -3487504,3c028041 -3487508,8c43b500 -348750c,24c20872 -3487510,94440002 -3487514,a4640000 -3487518,3c038041 -348751c,8c63b4fc -3487520,94440004 -3487524,a4640000 -3487528,3c038041 -348752c,8c63b4f8 -3487530,3c058040 -3487534,94a40878 -3487538,a4640000 -348753c,3c038041 -3487540,8c64b4f4 -3487544,24a30878 -3487548,94670002 -348754c,a4870000 -3487550,3c048041 -3487554,8c84b4f0 -3487558,94670004 -348755c,a4870000 -3487560,3c048041 -3487564,8c84b4ec -3487568,94c80872 -348756c,94470002 -3487570,94460004 -3487574,a4880000 -3487578,a4870002 -348757c,a4860004 +3487468,1825 +348746c,2025 +3487470,240200c8 +3487474,8ca5b538 +3487478,a4a20000 +348747c,a4a40002 +3487480,a4a30004 +3487484,3c058041 +3487488,8ca5b534 +348748c,a4a20000 +3487490,a4a40002 +3487494,a4a30004 +3487498,3c028041 +348749c,8c43b530 +34874a0,3c028040 +34874a4,94450854 +34874a8,24420854 +34874ac,94440002 +34874b0,94420004 +34874b4,a4650000 +34874b8,a4640002 +34874bc,a4620004 +34874c0,3c028041 +34874c4,8c43b52c +34874c8,3c028040 +34874cc,9445085a +34874d0,2442085a +34874d4,94440002 +34874d8,94420004 +34874dc,a4650000 +34874e0,a4640002 +34874e4,a4620004 +34874e8,3c028041 +34874ec,8c43b528 +34874f0,3c028040 +34874f4,94450860 +34874f8,24420860 +34874fc,94440002 +3487500,94420004 +3487504,a4650000 +3487508,a4640002 +348750c,a4620004 +3487510,3c028041 +3487514,8c42b524 +3487518,3c068040 +348751c,94c30872 +3487520,a4430000 +3487524,3c028041 +3487528,8c43b520 +348752c,24c20872 +3487530,94440002 +3487534,a4640000 +3487538,3c038041 +348753c,8c63b51c +3487540,94440004 +3487544,a4640000 +3487548,3c038041 +348754c,8c63b518 +3487550,3c058040 +3487554,94a40878 +3487558,a4640000 +348755c,3c038041 +3487560,8c64b514 +3487564,24a30878 +3487568,94670002 +348756c,a4870000 +3487570,3c048041 +3487574,8c84b510 +3487578,94670004 +348757c,a4870000 3487580,3c048041 -3487584,8c84b4dc -3487588,94a60878 -348758c,94650002 -3487590,94630004 -3487594,a4860000 -3487598,a4850002 -348759c,a4830004 -34875a0,94420002 -34875a4,3043ffff -34875a8,2c6300ce -34875ac,50600001 -34875b0,240200cd -34875b4,24420032 -34875b8,3047ffff -34875bc,3c028040 -34875c0,94420876 +3487584,8c84b50c +3487588,94c80872 +348758c,94470002 +3487590,94460004 +3487594,a4880000 +3487598,a4870002 +348759c,a4860004 +34875a0,3c048041 +34875a4,8c84b4fc +34875a8,94a60878 +34875ac,94650002 +34875b0,94630004 +34875b4,a4860000 +34875b8,a4850002 +34875bc,a4830004 +34875c0,94420002 34875c4,3043ffff 34875c8,2c6300ce 34875cc,50600001 34875d0,240200cd 34875d4,24420032 -34875d8,3046ffff +34875d8,3047ffff 34875dc,3c028040 -34875e0,94420878 +34875e0,94420876 34875e4,3043ffff 34875e8,2c6300ce 34875ec,50600001 34875f0,240200cd 34875f4,24420032 -34875f8,3044ffff +34875f8,3046ffff 34875fc,3c028040 -3487600,9442087a +3487600,94420878 3487604,3043ffff 3487608,2c6300ce 348760c,50600001 3487610,240200cd 3487614,24420032 -3487618,3043ffff +3487618,3044ffff 348761c,3c028040 -3487620,9442087c -3487624,3045ffff -3487628,2ca500ce -348762c,50a00001 +3487620,9442087a +3487624,3043ffff +3487628,2c6300ce +348762c,50600001 3487630,240200cd 3487634,24420032 -3487638,3c058041 -348763c,8ca8b4e8 -3487640,3c058040 -3487644,94a50872 -3487648,30a9ffff -348764c,2d2900ce -3487650,15200002 -3487654,3042ffff -3487658,240500cd -348765c,24a50032 -3487660,a5050000 -3487664,a5070002 -3487668,a5060004 -348766c,3c058041 -3487670,8ca5b4d8 -3487674,a4a40000 -3487678,a4a30002 -348767c,a4a20004 -3487680,3c028041 -3487684,8c43b4e0 -3487688,3c028040 -348768c,94450872 -3487690,24420872 -3487694,94440002 -3487698,94420004 -348769c,a4650000 -34876a0,a4640002 -34876a4,a4620004 -34876a8,3c028041 -34876ac,8c43b4d0 -34876b0,3c028040 -34876b4,94450878 -34876b8,24420878 -34876bc,94440002 -34876c0,94420004 -34876c4,a4650000 -34876c8,a4640002 -34876cc,a4620004 -34876d0,3c028041 -34876d4,8c43b4cc -34876d8,3c028040 -34876dc,94460866 -34876e0,24440866 -34876e4,94850002 -34876e8,94840004 -34876ec,a4660000 -34876f0,a4650002 -34876f4,a4640004 -34876f8,94420866 -34876fc,3043ffff -3487700,2c6300ce -3487704,50600001 -3487708,240200cd -348770c,24420032 -3487710,3044ffff -3487714,3c028040 -3487718,94420868 +3487638,3043ffff +348763c,3c028040 +3487640,9442087c +3487644,3045ffff +3487648,2ca500ce +348764c,50a00001 +3487650,240200cd +3487654,24420032 +3487658,3c058041 +348765c,8ca8b508 +3487660,3c058040 +3487664,94a50872 +3487668,30a9ffff +348766c,2d2900ce +3487670,15200002 +3487674,3042ffff +3487678,240500cd +348767c,24a50032 +3487680,a5050000 +3487684,a5070002 +3487688,a5060004 +348768c,3c058041 +3487690,8ca5b4f8 +3487694,a4a40000 +3487698,a4a30002 +348769c,a4a20004 +34876a0,3c028041 +34876a4,8c43b500 +34876a8,3c028040 +34876ac,94450872 +34876b0,24420872 +34876b4,94440002 +34876b8,94420004 +34876bc,a4650000 +34876c0,a4640002 +34876c4,a4620004 +34876c8,3c028041 +34876cc,8c43b4f0 +34876d0,3c028040 +34876d4,94450878 +34876d8,24420878 +34876dc,94440002 +34876e0,94420004 +34876e4,a4650000 +34876e8,a4640002 +34876ec,a4620004 +34876f0,3c028041 +34876f4,8c43b4ec +34876f8,3c028040 +34876fc,94460866 +3487700,24440866 +3487704,94850002 +3487708,94840004 +348770c,a4660000 +3487710,a4650002 +3487714,a4640004 +3487718,94420866 348771c,3043ffff 3487720,2c6300ce 3487724,50600001 3487728,240200cd 348772c,24420032 -3487730,3043ffff +3487730,3044ffff 3487734,3c028040 -3487738,9442086a -348773c,3045ffff -3487740,2ca500ce -3487744,50a00001 +3487738,94420868 +348773c,3043ffff +3487740,2c6300ce +3487744,50600001 3487748,240200cd 348774c,24420032 -3487750,3042ffff -3487754,3c058041 -3487758,8ca5b4c8 -348775c,a4a40000 -3487760,a4a30002 -3487764,a4a20004 -3487768,3c058041 -348776c,8ca5b4c0 -3487770,a4a40000 -3487774,a4a30002 -3487778,3e00008 -348777c,a4a20004 -3487780,3c028011 -3487784,3442a5d0 -3487788,8c4200a0 -348778c,21302 -3487790,30420003 -3487794,21840 -3487798,621821 -348779c,3c028041 -34877a0,2442a1a0 -34877a4,621821 -34877a8,90640000 -34877ac,42600 -34877b0,90620001 -34877b4,21400 -34877b8,822021 -34877bc,90620002 -34877c0,21200 -34877c4,3e00008 -34877c8,821021 -34877cc,3c028041 -34877d0,9042b584 -34877d4,3e00008 -34877d8,2102b -34877dc,3c038041 -34877e0,9062b584 -34877e4,24420001 -34877e8,3e00008 -34877ec,a062b584 -34877f0,3c028041 -34877f4,9042b584 -34877f8,1040001b -34877fc,2442ffff -3487800,27bdffd8 -3487804,afbf0024 -3487808,afb10020 -348780c,afb0001c -3487810,3c038041 -3487814,a062b584 -3487818,3c108038 -348781c,3610e578 -3487820,24050014 -3487824,3c11801d -3487828,200f809 -348782c,3624aa30 -3487830,24020014 -3487834,afa20014 -3487838,afa00010 -348783c,26100130 -3487840,3825 -3487844,24060003 -3487848,3625aa30 -348784c,200f809 -3487850,262484a0 -3487854,8fbf0024 -3487858,8fb10020 -348785c,8fb0001c -3487860,3e00008 -3487864,27bd0028 -3487868,3e00008 -3487870,3e00008 -3487878,24020140 -348787c,3e00008 -3487880,a4821424 -3487884,27bdffe0 -3487888,afbf001c -348788c,afb10018 -3487890,afb00014 -3487894,808025 -3487898,8c8208c4 -348789c,24420001 -34878a0,c1025d8 -34878a4,ac8208c4 -34878a8,3c028041 -34878ac,9442b532 -34878b0,8e0308c4 -34878b4,1462001e -34878b8,8fbf001c -34878bc,920200b2 -34878c0,34420001 -34878c4,a20200b2 -34878c8,3c04801c -34878cc,348484a0 -34878d0,3c110001 -34878d4,918821 -34878d8,86221e1a -34878dc,ae020000 -34878e0,948200a4 -34878e4,a6020066 -34878e8,3c108009 -34878ec,3602d894 -34878f0,40f809 -34878f4,261005d4 -34878f8,3c04a34b -34878fc,200f809 -3487900,3484e820 -3487904,3c028011 -3487908,3442a5d0 -348790c,2403fff8 -3487910,a4431412 -3487914,240200a0 -3487918,a6221e1a -348791c,24020014 -3487920,a2221e15 -3487924,24020001 -3487928,a2221e5e -348792c,8fbf001c -3487930,8fb10018 -3487934,8fb00014 -3487938,3e00008 -348793c,27bd0020 -3487940,8c8200a0 -3487944,34423000 -3487948,ac8200a0 -348794c,3c028041 -3487950,9042b587 -3487954,304200ff -3487958,10400005 -348795c,52840 -3487960,3c028010 -3487964,451021 -3487968,94428cec -348796c,a4820034 -3487970,3e00008 -3487978,24020001 -348797c,3e00008 -3487980,a082003e -3487984,24020012 -3487988,2406ffff -348798c,24070016 -3487990,821821 -3487994,80630074 -3487998,54660004 -348799c,24420001 -34879a0,822021 -34879a4,3e00008 -34879a8,a0850074 -34879ac,1447fff9 +3487750,3043ffff +3487754,3c028040 +3487758,9442086a +348775c,3045ffff +3487760,2ca500ce +3487764,50a00001 +3487768,240200cd +348776c,24420032 +3487770,3042ffff +3487774,3c058041 +3487778,8ca5b4e8 +348777c,a4a40000 +3487780,a4a30002 +3487784,a4a20004 +3487788,3c058041 +348778c,8ca5b4e0 +3487790,a4a40000 +3487794,a4a30002 +3487798,3e00008 +348779c,a4a20004 +34877a0,3c028011 +34877a4,3442a5d0 +34877a8,8c4200a0 +34877ac,21302 +34877b0,30420003 +34877b4,21840 +34877b8,621821 +34877bc,3c028041 +34877c0,2442a1c0 +34877c4,621821 +34877c8,90640000 +34877cc,42600 +34877d0,90620001 +34877d4,21400 +34877d8,822021 +34877dc,90620002 +34877e0,21200 +34877e4,3e00008 +34877e8,821021 +34877ec,3c028041 +34877f0,9042b5a4 +34877f4,3e00008 +34877f8,2102b +34877fc,3c038041 +3487800,9062b5a4 +3487804,24420001 +3487808,3e00008 +348780c,a062b5a4 +3487810,3c028041 +3487814,9042b5a4 +3487818,1040001b +348781c,2442ffff +3487820,27bdffd8 +3487824,afbf0024 +3487828,afb10020 +348782c,afb0001c +3487830,3c038041 +3487834,a062b5a4 +3487838,3c108038 +348783c,3610e578 +3487840,24050014 +3487844,3c11801d +3487848,200f809 +348784c,3624aa30 +3487850,24020014 +3487854,afa20014 +3487858,afa00010 +348785c,26100130 +3487860,3825 +3487864,24060003 +3487868,3625aa30 +348786c,200f809 +3487870,262484a0 +3487874,8fbf0024 +3487878,8fb10020 +348787c,8fb0001c +3487880,3e00008 +3487884,27bd0028 +3487888,3e00008 +3487890,3e00008 +3487898,24020140 +348789c,3e00008 +34878a0,a4821424 +34878a4,27bdffe0 +34878a8,afbf001c +34878ac,afb10018 +34878b0,afb00014 +34878b4,808025 +34878b8,8c8208c4 +34878bc,24420001 +34878c0,c1025e0 +34878c4,ac8208c4 +34878c8,3c028041 +34878cc,9442b552 +34878d0,8e0308c4 +34878d4,1462001e +34878d8,8fbf001c +34878dc,920200b2 +34878e0,34420001 +34878e4,a20200b2 +34878e8,3c04801c +34878ec,348484a0 +34878f0,3c110001 +34878f4,918821 +34878f8,86221e1a +34878fc,ae020000 +3487900,948200a4 +3487904,a6020066 +3487908,3c108009 +348790c,3602d894 +3487910,40f809 +3487914,261005d4 +3487918,3c04a34b +348791c,200f809 +3487920,3484e820 +3487924,3c028011 +3487928,3442a5d0 +348792c,2403fff8 +3487930,a4431412 +3487934,240200a0 +3487938,a6221e1a +348793c,24020014 +3487940,a2221e15 +3487944,24020001 +3487948,a2221e5e +348794c,8fbf001c +3487950,8fb10018 +3487954,8fb00014 +3487958,3e00008 +348795c,27bd0020 +3487960,8c8200a0 +3487964,34423000 +3487968,ac8200a0 +348796c,3c028041 +3487970,9042b5a7 +3487974,304200ff +3487978,10400005 +348797c,52840 +3487980,3c028010 +3487984,451021 +3487988,94428cec +348798c,a4820034 +3487990,3e00008 +3487998,24020001 +348799c,3e00008 +34879a0,a082003e +34879a4,24020012 +34879a8,2406ffff +34879ac,24070016 34879b0,821821 -34879b4,3e00008 -34879bc,862021 -34879c0,908200a8 -34879c4,a22825 -34879c8,3e00008 -34879cc,a08500a8 -34879d0,852021 -34879d4,908200bc -34879d8,21e00 -34879dc,31e03 -34879e0,4620001 -34879e4,1025 -34879e8,24420001 -34879ec,3e00008 -34879f0,a08200bc -34879f4,24020001 -34879f8,a082003d -34879fc,24020014 -3487a00,a08200cf -3487a04,24020140 -3487a08,3e00008 -3487a0c,a4821424 -3487a10,24020001 -3487a14,a0820032 -3487a18,a082003a -3487a1c,24020030 -3487a20,a48213f4 -3487a24,3e00008 -3487a28,a0820033 -3487a2c,24020002 -3487a30,a0820032 -3487a34,24020001 +34879b4,80630074 +34879b8,54660004 +34879bc,24420001 +34879c0,822021 +34879c4,3e00008 +34879c8,a0850074 +34879cc,1447fff9 +34879d0,821821 +34879d4,3e00008 +34879dc,862021 +34879e0,908200a8 +34879e4,a22825 +34879e8,3e00008 +34879ec,a08500a8 +34879f0,852021 +34879f4,908200bc +34879f8,21e00 +34879fc,31e03 +3487a00,4620001 +3487a04,1025 +3487a08,24420001 +3487a0c,3e00008 +3487a10,a08200bc +3487a14,24020001 +3487a18,a082003d +3487a1c,24020014 +3487a20,a08200cf +3487a24,24020140 +3487a28,3e00008 +3487a2c,a4821424 +3487a30,24020001 +3487a34,a0820032 3487a38,a082003a -3487a3c,a082003c -3487a40,24020060 -3487a44,a48213f4 -3487a48,3e00008 -3487a4c,a0820033 -3487a50,24020007 -3487a54,3e00008 -3487a58,a082007b -3487a5c,24020001 -3487a60,a21004 -3487a64,8c8500a4 -3487a68,a22825 -3487a6c,3e00008 -3487a70,ac8500a4 -3487a74,27bdffe8 -3487a78,afbf0014 -3487a7c,c101df7 -3487a84,8fbf0014 -3487a88,3e00008 -3487a8c,27bd0018 -3487a90,24020010 -3487a94,a0820082 -3487a98,9082009a -3487a9c,2442000a -3487aa0,3e00008 -3487aa4,a082009a -3487aa8,3c028041 -3487aac,9042b587 -3487ab0,304200ff -3487ab4,10400005 -3487ab8,52840 -3487abc,3c028010 -3487ac0,451021 -3487ac4,94428cec -3487ac8,a4820034 -3487acc,3e00008 -3487ad4,3c028041 -3487ad8,9042b586 -3487adc,1040000c -3487ae0,3c028041 -3487ae4,94820f06 -3487ae8,34420040 -3487aec,a4820f06 -3487af0,3c028041 -3487af4,9042b585 -3487af8,54400009 -3487afc,94820f06 -3487b00,94820ef4 -3487b04,3042fb87 -3487b08,3e00008 -3487b0c,a4820ef4 -3487b10,9042b585 -3487b14,1040000c +3487a3c,24020030 +3487a40,a48213f4 +3487a44,3e00008 +3487a48,a0820033 +3487a4c,24020002 +3487a50,a0820032 +3487a54,24020001 +3487a58,a082003a +3487a5c,a082003c +3487a60,24020060 +3487a64,a48213f4 +3487a68,3e00008 +3487a6c,a0820033 +3487a70,24020007 +3487a74,3e00008 +3487a78,a082007b +3487a7c,24020001 +3487a80,a21004 +3487a84,8c8500a4 +3487a88,a22825 +3487a8c,3e00008 +3487a90,ac8500a4 +3487a94,27bdffe8 +3487a98,afbf0014 +3487a9c,c101dff +3487aa4,8fbf0014 +3487aa8,3e00008 +3487aac,27bd0018 +3487ab0,24020010 +3487ab4,a0820082 +3487ab8,9082009a +3487abc,2442000a +3487ac0,3e00008 +3487ac4,a082009a +3487ac8,3c028041 +3487acc,9042b5a7 +3487ad0,304200ff +3487ad4,10400005 +3487ad8,52840 +3487adc,3c028010 +3487ae0,451021 +3487ae4,94428cec +3487ae8,a4820034 +3487aec,3e00008 +3487af4,3c028041 +3487af8,9042b5a6 +3487afc,1040000c +3487b00,3c028041 +3487b04,94820f06 +3487b08,34420040 +3487b0c,a4820f06 +3487b10,3c028041 +3487b14,9042b5a5 +3487b18,54400009 3487b1c,94820f06 -3487b20,34420080 -3487b24,a4820f06 -3487b28,94820ef6 -3487b2c,24038f00 -3487b30,431025 -3487b34,a4820ef6 -3487b38,94820ee4 -3487b3c,2403f000 -3487b40,431025 -3487b44,a4820ee4 -3487b48,3e00008 -3487b50,2c8200cd -3487b54,1040000b -3487b58,41880 -3487b5c,641021 -3487b60,21080 -3487b64,3c058041 -3487b68,24a5a490 -3487b6c,a21021 -3487b70,80430000 -3487b74,3182b -3487b78,31823 -3487b7c,3e00008 -3487b80,431024 -3487b84,3e00008 -3487b88,1025 -3487b8c,27bdffe0 -3487b90,afbf001c -3487b94,afb20018 -3487b98,afb10014 -3487b9c,afb00010 -3487ba0,808025 -3487ba4,3c128011 -3487ba8,3652a5d0 -3487bac,c101ed4 -3487bb0,2002025 -3487bb4,2008825 -3487bb8,8c420008 -3487bbc,2002825 -3487bc0,40f809 -3487bc4,2402025 -3487bc8,1622fff8 -3487bcc,408025 -3487bd0,2201025 -3487bd4,8fbf001c -3487bd8,8fb20018 -3487bdc,8fb10014 -3487be0,8fb00010 -3487be4,3e00008 -3487be8,27bd0020 -3487bec,27bdffe8 -3487bf0,afbf0014 -3487bf4,8c82000c -3487bf8,84860012 -3487bfc,84850010 -3487c00,3c048011 -3487c04,40f809 -3487c08,3484a5d0 -3487c0c,8fbf0014 -3487c10,3e00008 -3487c14,27bd0018 -3487c18,3e00008 -3487c1c,a01025 -3487c20,8082007d -3487c24,21027 -3487c28,2102b -3487c2c,3e00008 -3487c30,24420008 -3487c34,8c8200a0 -3487c38,21182 -3487c3c,30420007 -3487c40,10400005 -3487c48,38420001 -3487c4c,2102b -3487c50,3e00008 -3487c54,24420035 -3487c58,3e00008 -3487c5c,24020054 -3487c60,8c8200a0 -3487c64,210c2 -3487c68,30420007 -3487c6c,10400005 -3487c74,38420001 -3487c78,2102b -3487c7c,3e00008 -3487c80,24420033 -3487c84,3e00008 -3487c88,24020032 -3487c8c,8c8200a0 -3487c90,30420007 -3487c94,10400005 -3487c9c,38420001 -3487ca0,2102b +3487b20,94820ef4 +3487b24,3042fb87 +3487b28,3e00008 +3487b2c,a4820ef4 +3487b30,9042b5a5 +3487b34,1040000c +3487b3c,94820f06 +3487b40,34420080 +3487b44,a4820f06 +3487b48,94820ef6 +3487b4c,24038f00 +3487b50,431025 +3487b54,a4820ef6 +3487b58,94820ee4 +3487b5c,2403f000 +3487b60,431025 +3487b64,a4820ee4 +3487b68,3e00008 +3487b70,2c8200cd +3487b74,1040000b +3487b78,41880 +3487b7c,641021 +3487b80,21080 +3487b84,3c058041 +3487b88,24a5a4b0 +3487b8c,a21021 +3487b90,80430000 +3487b94,3182b +3487b98,31823 +3487b9c,3e00008 +3487ba0,431024 +3487ba4,3e00008 +3487ba8,1025 +3487bac,27bdffe0 +3487bb0,afbf001c +3487bb4,afb20018 +3487bb8,afb10014 +3487bbc,afb00010 +3487bc0,808025 +3487bc4,3c128011 +3487bc8,3652a5d0 +3487bcc,c101edc +3487bd0,2002025 +3487bd4,2008825 +3487bd8,8c420008 +3487bdc,2002825 +3487be0,40f809 +3487be4,2402025 +3487be8,1622fff8 +3487bec,408025 +3487bf0,2201025 +3487bf4,8fbf001c +3487bf8,8fb20018 +3487bfc,8fb10014 +3487c00,8fb00010 +3487c04,3e00008 +3487c08,27bd0020 +3487c0c,27bdffe8 +3487c10,afbf0014 +3487c14,8c82000c +3487c18,84860012 +3487c1c,84850010 +3487c20,3c048011 +3487c24,40f809 +3487c28,3484a5d0 +3487c2c,8fbf0014 +3487c30,3e00008 +3487c34,27bd0018 +3487c38,3e00008 +3487c3c,a01025 +3487c40,8082007d +3487c44,21027 +3487c48,2102b +3487c4c,3e00008 +3487c50,24420008 +3487c54,8c8200a0 +3487c58,21182 +3487c5c,30420007 +3487c60,10400005 +3487c68,38420001 +3487c6c,2102b +3487c70,3e00008 +3487c74,24420035 +3487c78,3e00008 +3487c7c,24020054 +3487c80,8c8200a0 +3487c84,210c2 +3487c88,30420007 +3487c8c,10400005 +3487c94,38420001 +3487c98,2102b +3487c9c,3e00008 +3487ca0,24420033 3487ca4,3e00008 -3487ca8,24420030 -3487cac,3e00008 -3487cb0,24020004 -3487cb4,8c8300a0 -3487cb8,31b82 -3487cbc,30630007 -3487cc0,10600005 -3487cc4,24040001 -3487cc8,14640004 -3487ccc,2402007b -3487cd0,3e00008 -3487cd4,24020060 -3487cd8,24020005 -3487cdc,3e00008 -3487ce4,8c8300a0 -3487ce8,31b02 -3487cec,30630003 -3487cf0,10600005 -3487cf4,24040001 -3487cf8,14640004 -3487cfc,240200c7 -3487d00,3e00008 -3487d04,24020046 -3487d08,24020045 -3487d0c,3e00008 -3487d14,8c8200a0 -3487d18,21242 -3487d1c,30420007 -3487d20,2102b -3487d24,3e00008 -3487d28,24420037 -3487d2c,8c8200a0 -3487d30,21502 -3487d34,30420007 -3487d38,2c420002 -3487d3c,2c420001 -3487d40,3e00008 -3487d44,24420079 -3487d48,8c8200a0 -3487d4c,21442 -3487d50,30420007 -3487d54,2c420002 -3487d58,2c420001 -3487d5c,3e00008 -3487d60,24420077 -3487d64,9082003a -3487d68,2102b -3487d6c,3e00008 -3487d70,244200b9 -3487d74,8083007c -3487d78,2402ffff -3487d7c,50620007 -3487d80,2402006b -3487d84,80830094 -3487d88,28630006 -3487d8c,10600003 -3487d90,2402006a -3487d94,3e00008 -3487d98,24020003 -3487d9c,3e00008 -3487da4,8083007b -3487da8,2402ffff -3487dac,10620003 +3487ca8,24020032 +3487cac,8c8200a0 +3487cb0,30420007 +3487cb4,10400005 +3487cbc,38420001 +3487cc0,2102b +3487cc4,3e00008 +3487cc8,24420030 +3487ccc,3e00008 +3487cd0,24020004 +3487cd4,8c8300a0 +3487cd8,31b82 +3487cdc,30630007 +3487ce0,10600005 +3487ce4,24040001 +3487ce8,14640004 +3487cec,2402007b +3487cf0,3e00008 +3487cf4,24020060 +3487cf8,24020005 +3487cfc,3e00008 +3487d04,8c8300a0 +3487d08,31b02 +3487d0c,30630003 +3487d10,10600005 +3487d14,24040001 +3487d18,14640004 +3487d1c,240200c7 +3487d20,3e00008 +3487d24,24020046 +3487d28,24020045 +3487d2c,3e00008 +3487d34,8c8200a0 +3487d38,21242 +3487d3c,30420007 +3487d40,2102b +3487d44,3e00008 +3487d48,24420037 +3487d4c,8c8200a0 +3487d50,21502 +3487d54,30420007 +3487d58,2c420002 +3487d5c,2c420001 +3487d60,3e00008 +3487d64,24420079 +3487d68,8c8200a0 +3487d6c,21442 +3487d70,30420007 +3487d74,2c420002 +3487d78,2c420001 +3487d7c,3e00008 +3487d80,24420077 +3487d84,9082003a +3487d88,2102b +3487d8c,3e00008 +3487d90,244200b9 +3487d94,8083007c +3487d98,2402ffff +3487d9c,50620007 +3487da0,2402006b +3487da4,80830094 +3487da8,28630006 +3487dac,10600003 +3487db0,2402006a 3487db4,3e00008 -3487db8,2402000c +3487db8,24020003 3487dbc,3e00008 -3487dc0,2402003b -3487dc4,8c8300a0 -3487dc8,30630007 -3487dcc,14600002 -3487dd0,a01025 -3487dd4,2402004d -3487dd8,3e00008 -3487de0,8c8300a0 -3487de4,30630038 -3487de8,14600002 -3487dec,a01025 -3487df0,2402004d -3487df4,3e00008 -3487dfc,8c8300a0 -3487e00,3c040001 -3487e04,3484c000 -3487e08,641824 -3487e0c,14600002 -3487e10,a01025 -3487e14,2402004d -3487e18,3e00008 -3487e20,94820eda -3487e24,30420008 -3487e28,14400010 -3487e30,80830086 -3487e34,2402001b -3487e38,1062000e -3487e40,80830087 -3487e44,1062000d -3487e4c,80830088 -3487e50,1062000c -3487e54,2403001b -3487e58,80840089 -3487e5c,1483000a -3487e60,a01025 -3487e64,3e00008 -3487e68,240200c8 -3487e6c,3e00008 -3487e70,240200c8 -3487e74,3e00008 -3487e78,240200c8 -3487e7c,3e00008 -3487e80,240200c8 -3487e84,240200c8 -3487e88,3e00008 -3487e90,27bdffe8 -3487e94,afbf0014 -3487e98,c102735 -3487ea0,c101c7d -3487ea8,c10254e -3487eb0,c10194e -3487eb8,c102361 -3487ec0,8fbf0014 -3487ec4,3e00008 -3487ec8,27bd0018 -3487ecc,27bdffe8 -3487ed0,afbf0014 -3487ed4,c101ae4 -3487edc,c100f82 -3487ee4,c102284 -3487eec,c101cf9 -3487ef4,c10140e -3487efc,8fbf0014 -3487f00,3e00008 -3487f04,27bd0018 -3487f08,27bdffe8 -3487f0c,afbf0014 -3487f10,afb00010 -3487f14,3c10801c -3487f18,361084a0 -3487f1c,8e040000 -3487f20,c101176 -3487f24,248402a8 -3487f28,8e040000 -3487f2c,c1025e2 -3487f30,248402a8 -3487f34,c1018fc -3487f3c,8fbf0014 -3487f40,8fb00010 -3487f44,3e00008 -3487f48,27bd0018 -3487f4c,27bdffe0 -3487f50,afbf001c -3487f54,afb10018 -3487f58,afb00014 -3487f5c,808025 -3487f60,c10275a -3487f64,a08825 -3487f68,2202825 -3487f6c,c027368 -3487f70,2002025 -3487f74,8fbf001c -3487f78,8fb10018 -3487f7c,8fb00014 -3487f80,3e00008 -3487f84,27bd0020 -3487f88,27bdffe8 -3487f8c,afbf0014 -3487f90,c1018d5 -3487f98,c102730 -3487fa0,c102374 -3487fa8,c101408 -3487fb0,8fbf0014 -3487fb4,3e00008 -3487fb8,27bd0018 -3487fbc,3c02801c -3487fc0,344284a0 -3487fc4,3c030001 -3487fc8,431021 -3487fcc,84430988 -3487fd0,14600022 -3487fd4,3c02801c -3487fd8,344284a0 -3487fdc,3c030001 -3487fe0,431021 -3487fe4,84420992 -3487fe8,14400014 -3487fec,21840 -3487ff0,3c028011 -3487ff4,3442a5d0 -3487ff8,8c420004 -3487ffc,14400009 -3488000,3c028011 -3488004,3442a5d0 -3488008,8c4300a0 -348800c,3c020001 -3488010,3442c007 -3488014,621824 -3488018,14600026 -348801c,24020001 +3487dc4,8083007b +3487dc8,2402ffff +3487dcc,10620003 +3487dd4,3e00008 +3487dd8,2402000c +3487ddc,3e00008 +3487de0,2402003b +3487de4,8c8300a0 +3487de8,30630007 +3487dec,14600002 +3487df0,a01025 +3487df4,2402004d +3487df8,3e00008 +3487e00,8c8300a0 +3487e04,30630038 +3487e08,14600002 +3487e0c,a01025 +3487e10,2402004d +3487e14,3e00008 +3487e1c,8c8300a0 +3487e20,3c040001 +3487e24,3484c000 +3487e28,641824 +3487e2c,14600002 +3487e30,a01025 +3487e34,2402004d +3487e38,3e00008 +3487e40,94820eda +3487e44,30420008 +3487e48,14400010 +3487e50,80830086 +3487e54,2402001b +3487e58,1062000e +3487e60,80830087 +3487e64,1062000d +3487e6c,80830088 +3487e70,1062000c +3487e74,2403001b +3487e78,80840089 +3487e7c,1483000a +3487e80,a01025 +3487e84,3e00008 +3487e88,240200c8 +3487e8c,3e00008 +3487e90,240200c8 +3487e94,3e00008 +3487e98,240200c8 +3487e9c,3e00008 +3487ea0,240200c8 +3487ea4,240200c8 +3487ea8,3e00008 +3487eb0,27bdffe8 +3487eb4,afbf0014 +3487eb8,c10273d +3487ec0,c101c85 +3487ec8,c102556 +3487ed0,c101956 +3487ed8,c102369 +3487ee0,8fbf0014 +3487ee4,3e00008 +3487ee8,27bd0018 +3487eec,27bdffe8 +3487ef0,afbf0014 +3487ef4,c101aec +3487efc,c100f8a +3487f04,c10228c +3487f0c,c101d01 +3487f14,c101416 +3487f1c,8fbf0014 +3487f20,3e00008 +3487f24,27bd0018 +3487f28,27bdffe8 +3487f2c,afbf0014 +3487f30,afb00010 +3487f34,3c10801c +3487f38,361084a0 +3487f3c,8e040000 +3487f40,c10117e +3487f44,248402a8 +3487f48,8e040000 +3487f4c,c1025ea +3487f50,248402a8 +3487f54,c101904 +3487f5c,8fbf0014 +3487f60,8fb00010 +3487f64,3e00008 +3487f68,27bd0018 +3487f6c,27bdffe0 +3487f70,afbf001c +3487f74,afb10018 +3487f78,afb00014 +3487f7c,808025 +3487f80,c102762 +3487f84,a08825 +3487f88,2202825 +3487f8c,c027368 +3487f90,2002025 +3487f94,8fbf001c +3487f98,8fb10018 +3487f9c,8fb00014 +3487fa0,3e00008 +3487fa4,27bd0020 +3487fa8,27bdffe8 +3487fac,afbf0014 +3487fb0,c1018dd +3487fb8,c102738 +3487fc0,c10237c +3487fc8,c101410 +3487fd0,8fbf0014 +3487fd4,3e00008 +3487fd8,27bd0018 +3487fdc,3c02801c +3487fe0,344284a0 +3487fe4,3c030001 +3487fe8,431021 +3487fec,84430988 +3487ff0,14600022 +3487ff4,3c02801c +3487ff8,344284a0 +3487ffc,3c030001 +3488000,431021 +3488004,84420992 +3488008,14400014 +348800c,21840 +3488010,3c028011 +3488014,3442a5d0 +3488018,8c420004 +348801c,14400009 3488020,3c028011 3488024,3442a5d0 -3488028,8c4200a0 -348802c,21382 -3488030,30420007 -3488034,3e00008 -3488038,2102b -348803c,621821 +3488028,8c4300a0 +348802c,3c020001 +3488030,3442c007 +3488034,621824 +3488038,14600026 +348803c,24020001 3488040,3c028011 3488044,3442a5d0 3488048,8c4200a0 -348804c,621006 +348804c,21382 3488050,30420007 3488054,3e00008 3488058,2102b -348805c,344284a0 -3488060,3c040001 -3488064,441021 -3488068,84440992 -348806c,1480000a -3488070,3c028011 -3488074,24020003 -3488078,14620007 -348807c,3c028011 -3488080,3442a5d0 -3488084,8c42009c -3488088,3c03000c -348808c,431024 -3488090,3e00008 -3488094,2102b -3488098,3442a5d0 -348809c,9442009c -34880a0,42080 -34880a4,2463ffff -34880a8,832021 -34880ac,821007 -34880b0,30420001 -34880b4,3e00008 -34880bc,27bdffe0 -34880c0,afbf001c -34880c4,3c028040 -34880c8,9042088b -34880cc,10400010 -34880d0,3c028040 -34880d4,2406000c -34880d8,3c028041 -34880dc,8c45b588 -34880e0,c1024a7 -34880e4,27a40010 -34880e8,3c028011 -34880ec,97a30010 -34880f0,a4435dd2 -34880f4,93a30012 -34880f8,a0435dd4 -34880fc,97a30010 -3488100,a4435dda -3488104,93a30012 -3488108,a0435ddc -348810c,3c028040 -3488110,9042088c -3488114,10400010 -3488118,8fbf001c -348811c,2406000a -3488120,3c028041 -3488124,8c45b588 -3488128,c1024a7 -348812c,27a40010 -3488130,3c028011 -3488134,97a30010 -3488138,a4435dce -348813c,93a30012 -3488140,a0435dd0 -3488144,97a30010 -3488148,a4435dd6 -348814c,93a30012 -3488150,a0435dd8 -3488154,8fbf001c -3488158,3e00008 -348815c,27bd0020 -3488160,3c02801d -3488164,3442aa30 -3488168,8c420678 -348816c,10400063 -3488174,8c430130 -3488178,10600060 -3488180,8c4201c8 -3488184,2c43001f -3488188,1060005c -3488190,27bdffd8 -3488194,afbf0024 -3488198,afb10020 -348819c,afb0001c -34881a0,280c0 -34881a4,2028023 -34881a8,108080 -34881ac,2028023 -34881b0,108100 -34881b4,3c028011 -34881b8,2028021 -34881bc,3c028040 -34881c0,9042088d -34881c4,10400018 -34881c8,2610572c -34881cc,3c118041 -34881d0,24060006 -34881d4,8e25b588 -34881d8,c1024a7 -34881dc,27a40010 -34881e0,93a20010 -34881e4,a2020192 -34881e8,93a20011 -34881ec,a2020193 -34881f0,93a20012 -34881f4,a2020194 -34881f8,8e25b588 -34881fc,24060006 -3488200,24a5000c -3488204,c1024a7 -3488208,27a40010 -348820c,93a20010 -3488210,a202019a -3488214,93a20011 -3488218,a202019b -348821c,93a20012 -3488220,1000000c -3488224,a202019c -3488228,3c028040 -348822c,9044087e -3488230,a2040192 -3488234,2442087e -3488238,90430001 -348823c,a2030193 -3488240,90420002 -3488244,a2020194 -3488248,a204019a -348824c,a203019b -3488250,a202019c -3488254,3c028040 -3488258,9042088e -348825c,10400018 -3488260,3c028040 -3488264,3c118041 -3488268,24060005 -348826c,8e25b588 -3488270,c1024a7 -3488274,27a40010 -3488278,93a20010 -348827c,a2020196 -3488280,93a20011 -3488284,a2020197 -3488288,93a20012 -348828c,a2020198 -3488290,8e25b588 -3488294,24060005 -3488298,24a5000a -348829c,c1024a7 -34882a0,27a40010 -34882a4,93a20010 -34882a8,a202019e -34882ac,93a20011 -34882b0,a202019f -34882b4,93a20012 -34882b8,1000000b -34882bc,a20201a0 -34882c0,90440881 -34882c4,a2040196 -34882c8,24420881 -34882cc,90430001 -34882d0,a2030197 -34882d4,90420002 -34882d8,a2020198 -34882dc,a204019e -34882e0,a203019f -34882e4,a20201a0 -34882e8,8fbf0024 -34882ec,8fb10020 -34882f0,8fb0001c -34882f4,3e00008 -34882f8,27bd0028 -34882fc,3e00008 -3488304,27bdffd0 -3488308,afbf002c -348830c,afb20028 -3488310,afb10024 -3488314,afb00020 -3488318,3c028040 -348831c,90430884 -3488320,240200fa -3488324,14620008 -3488328,24100001 -348832c,3c028040 -3488330,24420884 -3488334,90500001 -3488338,90420002 -348833c,2028025 -3488340,321000ff -3488344,10802b -3488348,3c028040 -348834c,90430887 -3488350,240200fa -3488354,14620008 -3488358,24110001 -348835c,3c028040 -3488360,24420887 -3488364,90510001 -3488368,90420002 -348836c,2228825 -3488370,323100ff -3488374,11882b -3488378,3c128041 -348837c,24060009 -3488380,8e45b588 -3488384,c1024a7 -3488388,27a40010 -348838c,8e45b588 -3488390,24060009 -3488394,24a50012 -3488398,c1024a7 -348839c,27a40014 -34883a0,24060007 -34883a4,8e45b588 -34883a8,c1024a7 -34883ac,27a40018 -34883b0,8e45b588 -34883b4,24060007 -34883b8,24a5000e -34883bc,c1024a7 -34883c0,27a4001c -34883c4,3c02801c -34883c8,344284a0 -34883cc,8c421c4c -34883d0,10400064 -34883d4,8fbf002c -34883d8,240500da -34883dc,3c068011 -34883e0,24c65c3c -34883e4,3c088040 -34883e8,3c078040 -34883ec,3c0a8040 -34883f0,254c0887 -34883f4,3c098040 -34883f8,252b0884 -34883fc,8c430130 -3488400,50600055 -3488404,8c420124 -3488408,84430000 -348840c,54650052 -3488410,8c420124 -3488414,8c43016c -3488418,320c0 -348841c,832023 -3488420,42080 -3488424,832023 -3488428,42100 -348842c,2484faf0 -3488430,862021 -3488434,8c4d0170 -3488438,d18c0 -348843c,6d1823 -3488440,31880 -3488444,6d1823 -3488448,31900 -348844c,2463faf0 -3488450,910d088f -3488454,11a0000e -3488458,661821 -348845c,97ae0010 -3488460,a48e0192 -3488464,93ad0012 -3488468,a08d0194 -348846c,a46e0192 -3488470,a06d0194 -3488474,97ae0014 -3488478,a48e019a -348847c,93ad0016 -3488480,a08d019c -3488484,a46e019a -3488488,10000012 -348848c,a06d019c -3488490,12000011 -3488494,90ed0890 -3488498,912f0884 -348849c,a08f0192 -34884a0,916e0001 -34884a4,a08e0193 -34884a8,916d0002 -34884ac,a08d0194 -34884b0,a06f0192 -34884b4,a06e0193 -34884b8,a06d0194 -34884bc,a08f019a -34884c0,a08e019b -34884c4,a08d019c -34884c8,a06f019a -34884cc,a06e019b -34884d0,a06d019c -34884d4,90ed0890 -34884d8,11a0000d -34884dc,97ae0018 -34884e0,a48e0196 -34884e4,93ad001a -34884e8,a08d0198 -34884ec,a46e0196 -34884f0,a06d0198 -34884f4,97ae001c -34884f8,a48e019e -34884fc,93ad001e -3488500,a08d01a0 -3488504,a46e019e -3488508,10000012 -348850c,a06d01a0 -3488510,52200011 -3488514,8c420124 -3488518,914f0887 -348851c,a08f0196 -3488520,918e0001 -3488524,a08e0197 -3488528,918d0002 -348852c,a08d0198 -3488530,a06f0196 -3488534,a06e0197 -3488538,a06d0198 -348853c,a08f019e -3488540,a08e019f -3488544,a08d01a0 -3488548,a06f019e -348854c,a06e019f -3488550,a06d01a0 -3488554,8c420124 -3488558,5440ffa9 -348855c,8c430130 -3488560,8fbf002c -3488564,8fb20028 -3488568,8fb10024 -348856c,8fb00020 -3488570,3e00008 -3488574,27bd0030 -3488578,27bdffd8 -348857c,afbf001c -3488580,f7b40020 -3488584,3c028040 -3488588,9042088f -348858c,1040000a -3488590,46006506 -3488594,24060009 -3488598,3c028041 -348859c,8c45b588 -34885a0,c1024a7 -34885a4,27a40010 -34885a8,93a20010 -34885ac,93a30011 -34885b0,10000006 -34885b4,93a40012 -34885b8,3c048040 -34885bc,90820884 -34885c0,24840884 -34885c4,90830001 -34885c8,90840002 -34885cc,240500fa -34885d0,14450043 -34885d4,642825 -34885d8,14a00041 -34885e0,3c028041 -34885e4,c440a1ec -34885e8,4600a002 -34885ec,3c028041 -34885f0,c442a1f0 -34885f4,46020000 -34885f8,3c028041 -34885fc,c442a1f4 -3488600,4600103e -3488608,45030005 -348860c,46020001 -3488610,4600000d -3488614,44020000 -3488618,10000006 -348861c,304200ff -3488620,4600000d -3488624,44020000 -3488628,3c038000 -348862c,431025 -3488630,304200ff -3488634,3c038041 -3488638,c460a1f8 -348863c,4600a002 -3488640,3c038041 -3488644,c462a1f0 -3488648,46020000 -348864c,3c038041 -3488650,c462a1f4 -3488654,4600103e -348865c,45030005 -3488660,46020001 -3488664,4600000d -3488668,44030000 -348866c,10000006 -3488670,306300ff -3488674,4600000d -3488678,44030000 -348867c,3c048000 -3488680,641825 -3488684,306300ff -3488688,3c048041 -348868c,c480a1fc -3488690,4600a002 -3488694,3c048041 -3488698,c482a200 -348869c,46020000 -34886a0,3c048041 -34886a4,c482a1f4 -34886a8,4600103e -34886b0,45030005 -34886b4,46020001 -34886b8,4600000d -34886bc,44040000 -34886c0,10000040 -34886c4,308400ff -34886c8,4600000d -34886cc,44040000 -34886d0,3c058000 -34886d4,852025 -34886d8,1000003a -34886dc,308400ff -34886e0,44820000 -34886e8,46800020 -34886ec,46140002 -34886f0,3c028041 -34886f4,c442a1f4 -34886f8,4600103e -3488700,45030005 -3488704,46020001 -3488708,4600000d -348870c,44020000 -3488710,10000006 -3488714,304200ff -3488718,4600000d -348871c,44020000 -3488720,3c058000 -3488724,451025 -3488728,304200ff -348872c,44830000 -3488734,46800020 -3488738,46140002 -348873c,3c038041 -3488740,c462a1f4 -3488744,4600103e -348874c,45030005 -3488750,46020001 -3488754,4600000d -3488758,44030000 -348875c,10000006 -3488760,306300ff -3488764,4600000d -3488768,44030000 -348876c,3c058000 -3488770,651825 -3488774,306300ff -3488778,44840000 -3488780,46800020 -3488784,46140002 -3488788,3c048041 -348878c,c482a1f4 -3488790,4600103e -3488798,45030005 -348879c,46020001 -34887a0,4600000d -34887a4,44040000 -34887a8,10000006 -34887ac,308400ff -34887b0,4600000d -34887b4,44040000 -34887b8,3c058000 -34887bc,852025 -34887c0,308400ff -34887c4,21600 -34887c8,42200 -34887cc,441025 -34887d0,31c00 -34887d4,431025 -34887d8,344200ff -34887dc,8fbf001c -34887e0,d7b40020 -34887e4,3e00008 -34887e8,27bd0028 -34887ec,27bdffd8 -34887f0,afbf0024 -34887f4,afb20020 -34887f8,afb1001c -34887fc,afb00018 -3488800,3c02801c -3488804,344284a0 -3488808,90421cda -348880c,24030004 -3488810,10430015 -3488814,2c430005 -3488818,50600006 -348881c,2442fffb -3488820,24030002 -3488824,50430008 -3488828,3c028040 -348882c,10000013 -3488830,3c028040 -3488834,304200fb -3488838,54400010 -348883c,3c028040 -3488840,10000005 -3488844,3c028040 -3488848,90500891 -348884c,3c028040 -3488850,1000000d -3488854,90510892 -3488858,90500893 +348805c,621821 +3488060,3c028011 +3488064,3442a5d0 +3488068,8c4200a0 +348806c,621006 +3488070,30420007 +3488074,3e00008 +3488078,2102b +348807c,344284a0 +3488080,3c040001 +3488084,441021 +3488088,84440992 +348808c,1480000a +3488090,3c028011 +3488094,24020003 +3488098,14620007 +348809c,3c028011 +34880a0,3442a5d0 +34880a4,8c42009c +34880a8,3c03000c +34880ac,431024 +34880b0,3e00008 +34880b4,2102b +34880b8,3442a5d0 +34880bc,9442009c +34880c0,42080 +34880c4,2463ffff +34880c8,832021 +34880cc,821007 +34880d0,30420001 +34880d4,3e00008 +34880dc,27bdffe0 +34880e0,afbf001c +34880e4,3c028040 +34880e8,9042088b +34880ec,10400010 +34880f0,3c028040 +34880f4,2406000c +34880f8,3c028041 +34880fc,8c45b5a8 +3488100,c1024af +3488104,27a40010 +3488108,3c028011 +348810c,97a30010 +3488110,a4435dd2 +3488114,93a30012 +3488118,a0435dd4 +348811c,97a30010 +3488120,a4435dda +3488124,93a30012 +3488128,a0435ddc +348812c,3c028040 +3488130,9042088c +3488134,10400010 +3488138,8fbf001c +348813c,2406000a +3488140,3c028041 +3488144,8c45b5a8 +3488148,c1024af +348814c,27a40010 +3488150,3c028011 +3488154,97a30010 +3488158,a4435dce +348815c,93a30012 +3488160,a0435dd0 +3488164,97a30010 +3488168,a4435dd6 +348816c,93a30012 +3488170,a0435dd8 +3488174,8fbf001c +3488178,3e00008 +348817c,27bd0020 +3488180,3c02801d +3488184,3442aa30 +3488188,8c420678 +348818c,10400063 +3488194,8c430130 +3488198,10600060 +34881a0,8c4201c8 +34881a4,2c43001f +34881a8,1060005c +34881b0,27bdffd8 +34881b4,afbf0024 +34881b8,afb10020 +34881bc,afb0001c +34881c0,280c0 +34881c4,2028023 +34881c8,108080 +34881cc,2028023 +34881d0,108100 +34881d4,3c028011 +34881d8,2028021 +34881dc,3c028040 +34881e0,9042088d +34881e4,10400018 +34881e8,2610572c +34881ec,3c118041 +34881f0,24060006 +34881f4,8e25b5a8 +34881f8,c1024af +34881fc,27a40010 +3488200,93a20010 +3488204,a2020192 +3488208,93a20011 +348820c,a2020193 +3488210,93a20012 +3488214,a2020194 +3488218,8e25b5a8 +348821c,24060006 +3488220,24a5000c +3488224,c1024af +3488228,27a40010 +348822c,93a20010 +3488230,a202019a +3488234,93a20011 +3488238,a202019b +348823c,93a20012 +3488240,1000000c +3488244,a202019c +3488248,3c028040 +348824c,9044087e +3488250,a2040192 +3488254,2442087e +3488258,90430001 +348825c,a2030193 +3488260,90420002 +3488264,a2020194 +3488268,a204019a +348826c,a203019b +3488270,a202019c +3488274,3c028040 +3488278,9042088e +348827c,10400018 +3488280,3c028040 +3488284,3c118041 +3488288,24060005 +348828c,8e25b5a8 +3488290,c1024af +3488294,27a40010 +3488298,93a20010 +348829c,a2020196 +34882a0,93a20011 +34882a4,a2020197 +34882a8,93a20012 +34882ac,a2020198 +34882b0,8e25b5a8 +34882b4,24060005 +34882b8,24a5000a +34882bc,c1024af +34882c0,27a40010 +34882c4,93a20010 +34882c8,a202019e +34882cc,93a20011 +34882d0,a202019f +34882d4,93a20012 +34882d8,1000000b +34882dc,a20201a0 +34882e0,90440881 +34882e4,a2040196 +34882e8,24420881 +34882ec,90430001 +34882f0,a2030197 +34882f4,90420002 +34882f8,a2020198 +34882fc,a204019e +3488300,a203019f +3488304,a20201a0 +3488308,8fbf0024 +348830c,8fb10020 +3488310,8fb0001c +3488314,3e00008 +3488318,27bd0028 +348831c,3e00008 +3488324,27bdffd0 +3488328,afbf002c +348832c,afb20028 +3488330,afb10024 +3488334,afb00020 +3488338,3c028040 +348833c,90430884 +3488340,240200fa +3488344,14620008 +3488348,24100001 +348834c,3c028040 +3488350,24420884 +3488354,90500001 +3488358,90420002 +348835c,2028025 +3488360,321000ff +3488364,10802b +3488368,3c028040 +348836c,90430887 +3488370,240200fa +3488374,14620008 +3488378,24110001 +348837c,3c028040 +3488380,24420887 +3488384,90510001 +3488388,90420002 +348838c,2228825 +3488390,323100ff +3488394,11882b +3488398,3c128041 +348839c,24060009 +34883a0,8e45b5a8 +34883a4,c1024af +34883a8,27a40010 +34883ac,8e45b5a8 +34883b0,24060009 +34883b4,24a50012 +34883b8,c1024af +34883bc,27a40014 +34883c0,24060007 +34883c4,8e45b5a8 +34883c8,c1024af +34883cc,27a40018 +34883d0,8e45b5a8 +34883d4,24060007 +34883d8,24a5000e +34883dc,c1024af +34883e0,27a4001c +34883e4,3c02801c +34883e8,344284a0 +34883ec,8c421c4c +34883f0,10400064 +34883f4,8fbf002c +34883f8,240500da +34883fc,3c068011 +3488400,24c65c3c +3488404,3c088040 +3488408,3c078040 +348840c,3c0a8040 +3488410,254c0887 +3488414,3c098040 +3488418,252b0884 +348841c,8c430130 +3488420,50600055 +3488424,8c420124 +3488428,84430000 +348842c,54650052 +3488430,8c420124 +3488434,8c43016c +3488438,320c0 +348843c,832023 +3488440,42080 +3488444,832023 +3488448,42100 +348844c,2484faf0 +3488450,862021 +3488454,8c4d0170 +3488458,d18c0 +348845c,6d1823 +3488460,31880 +3488464,6d1823 +3488468,31900 +348846c,2463faf0 +3488470,910d088f +3488474,11a0000e +3488478,661821 +348847c,97ae0010 +3488480,a48e0192 +3488484,93ad0012 +3488488,a08d0194 +348848c,a46e0192 +3488490,a06d0194 +3488494,97ae0014 +3488498,a48e019a +348849c,93ad0016 +34884a0,a08d019c +34884a4,a46e019a +34884a8,10000012 +34884ac,a06d019c +34884b0,12000011 +34884b4,90ed0890 +34884b8,912f0884 +34884bc,a08f0192 +34884c0,916e0001 +34884c4,a08e0193 +34884c8,916d0002 +34884cc,a08d0194 +34884d0,a06f0192 +34884d4,a06e0193 +34884d8,a06d0194 +34884dc,a08f019a +34884e0,a08e019b +34884e4,a08d019c +34884e8,a06f019a +34884ec,a06e019b +34884f0,a06d019c +34884f4,90ed0890 +34884f8,11a0000d +34884fc,97ae0018 +3488500,a48e0196 +3488504,93ad001a +3488508,a08d0198 +348850c,a46e0196 +3488510,a06d0198 +3488514,97ae001c +3488518,a48e019e +348851c,93ad001e +3488520,a08d01a0 +3488524,a46e019e +3488528,10000012 +348852c,a06d01a0 +3488530,52200011 +3488534,8c420124 +3488538,914f0887 +348853c,a08f0196 +3488540,918e0001 +3488544,a08e0197 +3488548,918d0002 +348854c,a08d0198 +3488550,a06f0196 +3488554,a06e0197 +3488558,a06d0198 +348855c,a08f019e +3488560,a08e019f +3488564,a08d01a0 +3488568,a06f019e +348856c,a06e019f +3488570,a06d01a0 +3488574,8c420124 +3488578,5440ffa9 +348857c,8c430130 +3488580,8fbf002c +3488584,8fb20028 +3488588,8fb10024 +348858c,8fb00020 +3488590,3e00008 +3488594,27bd0030 +3488598,27bdffd8 +348859c,afbf001c +34885a0,f7b40020 +34885a4,3c028040 +34885a8,9042088f +34885ac,1040000a +34885b0,46006506 +34885b4,24060009 +34885b8,3c028041 +34885bc,8c45b5a8 +34885c0,c1024af +34885c4,27a40010 +34885c8,93a20010 +34885cc,93a30011 +34885d0,10000006 +34885d4,93a40012 +34885d8,3c048040 +34885dc,90820884 +34885e0,24840884 +34885e4,90830001 +34885e8,90840002 +34885ec,240500fa +34885f0,14450043 +34885f4,642825 +34885f8,14a00041 +3488600,3c028041 +3488604,c440a20c +3488608,4600a002 +348860c,3c028041 +3488610,c442a210 +3488614,46020000 +3488618,3c028041 +348861c,c442a214 +3488620,4600103e +3488628,45030005 +348862c,46020001 +3488630,4600000d +3488634,44020000 +3488638,10000006 +348863c,304200ff +3488640,4600000d +3488644,44020000 +3488648,3c038000 +348864c,431025 +3488650,304200ff +3488654,3c038041 +3488658,c460a218 +348865c,4600a002 +3488660,3c038041 +3488664,c462a210 +3488668,46020000 +348866c,3c038041 +3488670,c462a214 +3488674,4600103e +348867c,45030005 +3488680,46020001 +3488684,4600000d +3488688,44030000 +348868c,10000006 +3488690,306300ff +3488694,4600000d +3488698,44030000 +348869c,3c048000 +34886a0,641825 +34886a4,306300ff +34886a8,3c048041 +34886ac,c480a21c +34886b0,4600a002 +34886b4,3c048041 +34886b8,c482a220 +34886bc,46020000 +34886c0,3c048041 +34886c4,c482a214 +34886c8,4600103e +34886d0,45030005 +34886d4,46020001 +34886d8,4600000d +34886dc,44040000 +34886e0,10000040 +34886e4,308400ff +34886e8,4600000d +34886ec,44040000 +34886f0,3c058000 +34886f4,852025 +34886f8,1000003a +34886fc,308400ff +3488700,44820000 +3488708,46800020 +348870c,46140002 +3488710,3c028041 +3488714,c442a214 +3488718,4600103e +3488720,45030005 +3488724,46020001 +3488728,4600000d +348872c,44020000 +3488730,10000006 +3488734,304200ff +3488738,4600000d +348873c,44020000 +3488740,3c058000 +3488744,451025 +3488748,304200ff +348874c,44830000 +3488754,46800020 +3488758,46140002 +348875c,3c038041 +3488760,c462a214 +3488764,4600103e +348876c,45030005 +3488770,46020001 +3488774,4600000d +3488778,44030000 +348877c,10000006 +3488780,306300ff +3488784,4600000d +3488788,44030000 +348878c,3c058000 +3488790,651825 +3488794,306300ff +3488798,44840000 +34887a0,46800020 +34887a4,46140002 +34887a8,3c048041 +34887ac,c482a214 +34887b0,4600103e +34887b8,45030005 +34887bc,46020001 +34887c0,4600000d +34887c4,44040000 +34887c8,10000006 +34887cc,308400ff +34887d0,4600000d +34887d4,44040000 +34887d8,3c058000 +34887dc,852025 +34887e0,308400ff +34887e4,21600 +34887e8,42200 +34887ec,441025 +34887f0,31c00 +34887f4,431025 +34887f8,344200ff +34887fc,8fbf001c +3488800,d7b40020 +3488804,3e00008 +3488808,27bd0028 +348880c,27bdffd8 +3488810,afbf0024 +3488814,afb20020 +3488818,afb1001c +348881c,afb00018 +3488820,3c02801c +3488824,344284a0 +3488828,90421cda +348882c,24030004 +3488830,10430015 +3488834,2c430005 +3488838,50600006 +348883c,2442fffb +3488840,24030002 +3488844,50430008 +3488848,3c028040 +348884c,10000013 +3488850,3c028040 +3488854,304200fb +3488858,54400010 348885c,3c028040 -3488860,10000009 -3488864,90510894 -3488868,3c028040 -348886c,90500895 -3488870,3c028040 -3488874,10000004 -3488878,90510896 -348887c,90500897 -3488880,3c028040 -3488884,90510898 -3488888,2111025 -348888c,1040005b -3488890,8fbf0024 -3488894,3c128041 -3488898,2406000e -348889c,8e45b588 -34888a0,c1024a7 -34888a4,27a40010 -34888a8,2406000c -34888ac,8e45b588 -34888b0,c1024a7 -34888b4,27a40014 -34888b8,1200000a -34888bc,3c02801c -34888c0,344284a0 -34888c4,90431cda -34888c8,318c0 -34888cc,3c02800f -34888d0,431021 -34888d4,97a30010 -34888d8,a4438214 -34888dc,93a30012 -34888e0,a0438216 -34888e4,1220000a -34888e8,3c02801c -34888ec,344284a0 -34888f0,90431cda -34888f4,318c0 -34888f8,3c02800f -34888fc,431021 -3488900,97a30014 -3488904,a4438218 -3488908,93a30016 -348890c,a043821a -3488910,12000010 -3488914,3c02801d -3488918,3c02801c -348891c,344284a0 -3488920,97a30010 -3488924,a4431cf0 -3488928,93a30012 -348892c,a0431cf2 -3488930,97a30010 -3488934,a4431d04 -3488938,93a30012 -348893c,a0431d06 +3488860,10000005 +3488864,3c028040 +3488868,90500891 +348886c,3c028040 +3488870,1000000d +3488874,90510892 +3488878,90500893 +348887c,3c028040 +3488880,10000009 +3488884,90510894 +3488888,3c028040 +348888c,90500895 +3488890,3c028040 +3488894,10000004 +3488898,90510896 +348889c,90500897 +34888a0,3c028040 +34888a4,90510898 +34888a8,2111025 +34888ac,1040005b +34888b0,8fbf0024 +34888b4,3c128041 +34888b8,2406000e +34888bc,8e45b5a8 +34888c0,c1024af +34888c4,27a40010 +34888c8,2406000c +34888cc,8e45b5a8 +34888d0,c1024af +34888d4,27a40014 +34888d8,1200000a +34888dc,3c02801c +34888e0,344284a0 +34888e4,90431cda +34888e8,318c0 +34888ec,3c02800f +34888f0,431021 +34888f4,97a30010 +34888f8,a4438214 +34888fc,93a30012 +3488900,a0438216 +3488904,1220000a +3488908,3c02801c +348890c,344284a0 +3488910,90431cda +3488914,318c0 +3488918,3c02800f +348891c,431021 +3488920,97a30014 +3488924,a4438218 +3488928,93a30016 +348892c,a043821a +3488930,12000010 +3488934,3c02801d +3488938,3c02801c +348893c,344284a0 3488940,97a30010 -3488944,a4431d18 +3488944,a4431cf0 3488948,93a30012 -348894c,a0431d1a -3488950,3c02801d -3488954,3442aa30 -3488958,8c42067c -348895c,10400027 -3488960,8fbf0024 -3488964,8c430130 -3488968,10600025 -348896c,8fb20020 -3488970,12000010 -3488974,24430234 -3488978,93a40010 -348897c,44840000 -3488984,46800020 -3488988,e4400234 -348898c,93a20011 -3488990,44820000 -3488998,46800020 -348899c,e4600004 -34889a0,93a20012 -34889a4,44820000 -34889ac,46800020 -34889b0,e4600008 -34889b4,12200011 -34889b8,8fbf0024 -34889bc,93a20014 -34889c0,44820000 -34889c8,46800020 -34889cc,e4600010 -34889d0,93a20015 -34889d4,44820000 -34889dc,46800020 -34889e0,e4600014 -34889e4,93a20016 -34889e8,44820000 -34889f0,46800020 -34889f4,e4600018 -34889f8,8fbf0024 -34889fc,8fb20020 -3488a00,8fb1001c -3488a04,8fb00018 -3488a08,3e00008 -3488a0c,27bd0028 -3488a10,27bdffe8 -3488a14,afbf0014 -3488a18,3c038041 -3488a1c,8c62b588 -3488a20,24420001 -3488a24,c10202f -3488a28,ac62b588 -3488a2c,c102058 -3488a34,c1020c1 -3488a3c,c1021fb -3488a44,8fbf0014 -3488a48,3e00008 -3488a4c,27bd0018 -3488a50,27bdffe8 -3488a54,afbf0014 -3488a58,801025 -3488a5c,2c430193 -3488a60,10600006 -3488a64,a02025 -3488a68,210c0 -3488a6c,3c03800f -3488a70,34638ff8 -3488a74,10000008 -3488a78,431021 -3488a7c,2442fe6e -3488a80,21080 -3488a84,2403fff8 -3488a88,431024 -3488a8c,3c038040 -3488a90,24630c9c -3488a94,621021 -3488a98,8c450000 -3488a9c,8c460004 -3488aa0,3c028000 -3488aa4,24420df0 -3488aa8,40f809 -3488aac,c53023 -3488ab0,8fbf0014 -3488ab4,3e00008 -3488ab8,27bd0018 -3488abc,27bdffe8 -3488ac0,afbf0014 -3488ac4,801025 -3488ac8,a02025 -3488acc,a4450000 -3488ad0,c102294 -3488ad4,8c450004 -3488ad8,8fbf0014 -3488adc,3e00008 -3488ae0,27bd0018 -3488ae4,27bdffe8 -3488ae8,afbf0014 -3488aec,afb00010 -3488af0,3c028041 -3488af4,2442c5fc -3488af8,24450040 -3488afc,94430000 -3488b00,1064000b -3488b04,408025 -3488b08,54600006 -3488b0c,24420008 -3488b10,802825 -3488b14,c1022af -3488b18,402025 -3488b1c,10000005 -3488b20,2001025 -3488b24,5445fff6 -3488b28,94430000 -3488b2c,8025 -3488b30,2001025 -3488b34,8fbf0014 -3488b38,8fb00010 -3488b3c,3e00008 -3488b40,27bd0018 -3488b44,3c03801c -3488b48,346384a0 -3488b4c,8c620000 -3488b50,8c860004 -3488b54,8c4502d0 -3488b58,24a70008 -3488b5c,ac4702d0 -3488b60,3c02db06 -3488b64,24420018 -3488b68,aca20000 -3488b6c,aca60004 -3488b70,8c650000 -3488b74,8c840004 -3488b78,8ca302c0 -3488b7c,24660008 -3488b80,aca602c0 -3488b84,ac620000 -3488b88,3e00008 -3488b8c,ac640004 -3488b90,27bdffe0 -3488b94,afbf0014 -3488b98,f7b40018 -3488b9c,3c02800a -3488ba0,3442a78c -3488ba4,40f809 -3488ba8,46006506 -3488bac,2442000c -3488bb0,2025 -3488bb4,1000000a -3488bb8,2405000c -3488bbc,c4600000 -3488bc0,46140002 -3488bc4,e4600000 -3488bc8,24630004 -3488bcc,5462fffc -3488bd0,c4600000 -3488bd4,24840004 -3488bd8,10850003 -3488bdc,24420010 -3488be0,1000fff6 -3488be4,2443fff4 -3488be8,8fbf0014 -3488bec,d7b40018 -3488bf0,3e00008 -3488bf4,27bd0020 -3488bf8,27bdffd8 -3488bfc,afbf0024 -3488c00,afb30020 -3488c04,afb2001c -3488c08,afb10018 -3488c0c,afb00014 -3488c10,809825 -3488c14,a09025 -3488c18,c08025 -3488c1c,3c118002 -3488c20,26222438 -3488c24,3025 -3488c28,2002825 -3488c2c,40f809 -3488c30,2402025 -3488c34,26312554 -3488c38,3025 -3488c3c,2002825 -3488c40,220f809 -3488c44,2402025 -3488c48,2602825 -3488c4c,3c028005 -3488c50,244270c0 -3488c54,40f809 -3488c58,2002025 -3488c5c,8fbf0024 -3488c60,8fb30020 -3488c64,8fb2001c -3488c68,8fb10018 -3488c6c,8fb00014 -3488c70,3e00008 -3488c74,27bd0028 -3488c78,44860000 -3488c7c,24020063 -3488c80,54820005 -3488c84,84a20000 -3488c88,3c028041 -3488c8c,c442a208 +348894c,a0431cf2 +3488950,97a30010 +3488954,a4431d04 +3488958,93a30012 +348895c,a0431d06 +3488960,97a30010 +3488964,a4431d18 +3488968,93a30012 +348896c,a0431d1a +3488970,3c02801d +3488974,3442aa30 +3488978,8c42067c +348897c,10400027 +3488980,8fbf0024 +3488984,8c430130 +3488988,10600025 +348898c,8fb20020 +3488990,12000010 +3488994,24430234 +3488998,93a40010 +348899c,44840000 +34889a4,46800020 +34889a8,e4400234 +34889ac,93a20011 +34889b0,44820000 +34889b8,46800020 +34889bc,e4600004 +34889c0,93a20012 +34889c4,44820000 +34889cc,46800020 +34889d0,e4600008 +34889d4,12200011 +34889d8,8fbf0024 +34889dc,93a20014 +34889e0,44820000 +34889e8,46800020 +34889ec,e4600010 +34889f0,93a20015 +34889f4,44820000 +34889fc,46800020 +3488a00,e4600014 +3488a04,93a20016 +3488a08,44820000 +3488a10,46800020 +3488a14,e4600018 +3488a18,8fbf0024 +3488a1c,8fb20020 +3488a20,8fb1001c +3488a24,8fb00018 +3488a28,3e00008 +3488a2c,27bd0028 +3488a30,27bdffe8 +3488a34,afbf0014 +3488a38,3c038041 +3488a3c,8c62b5a8 +3488a40,24420001 +3488a44,c102037 +3488a48,ac62b5a8 +3488a4c,c102060 +3488a54,c1020c9 +3488a5c,c102203 +3488a64,8fbf0014 +3488a68,3e00008 +3488a6c,27bd0018 +3488a70,27bdffe8 +3488a74,afbf0014 +3488a78,801025 +3488a7c,2c430193 +3488a80,10600006 +3488a84,a02025 +3488a88,210c0 +3488a8c,3c03800f +3488a90,34638ff8 +3488a94,10000008 +3488a98,431021 +3488a9c,2442fe6e +3488aa0,21080 +3488aa4,2403fff8 +3488aa8,431024 +3488aac,3c038040 +3488ab0,24630c9c +3488ab4,621021 +3488ab8,8c450000 +3488abc,8c460004 +3488ac0,3c028000 +3488ac4,24420df0 +3488ac8,40f809 +3488acc,c53023 +3488ad0,8fbf0014 +3488ad4,3e00008 +3488ad8,27bd0018 +3488adc,27bdffe8 +3488ae0,afbf0014 +3488ae4,801025 +3488ae8,a02025 +3488aec,a4450000 +3488af0,c10229c +3488af4,8c450004 +3488af8,8fbf0014 +3488afc,3e00008 +3488b00,27bd0018 +3488b04,27bdffe8 +3488b08,afbf0014 +3488b0c,afb00010 +3488b10,3c028041 +3488b14,2442c61c +3488b18,24450040 +3488b1c,94430000 +3488b20,1064000b +3488b24,408025 +3488b28,54600006 +3488b2c,24420008 +3488b30,802825 +3488b34,c1022b7 +3488b38,402025 +3488b3c,10000005 +3488b40,2001025 +3488b44,5445fff6 +3488b48,94430000 +3488b4c,8025 +3488b50,2001025 +3488b54,8fbf0014 +3488b58,8fb00010 +3488b5c,3e00008 +3488b60,27bd0018 +3488b64,3c03801c +3488b68,346384a0 +3488b6c,8c620000 +3488b70,8c860004 +3488b74,8c4502d0 +3488b78,24a70008 +3488b7c,ac4702d0 +3488b80,3c02db06 +3488b84,24420018 +3488b88,aca20000 +3488b8c,aca60004 +3488b90,8c650000 +3488b94,8c840004 +3488b98,8ca302c0 +3488b9c,24660008 +3488ba0,aca602c0 +3488ba4,ac620000 +3488ba8,3e00008 +3488bac,ac640004 +3488bb0,27bdffe0 +3488bb4,afbf0014 +3488bb8,f7b40018 +3488bbc,3c02800a +3488bc0,3442a78c +3488bc4,40f809 +3488bc8,46006506 +3488bcc,2442000c +3488bd0,2025 +3488bd4,1000000a +3488bd8,2405000c +3488bdc,c4600000 +3488be0,46140002 +3488be4,e4600000 +3488be8,24630004 +3488bec,5462fffc +3488bf0,c4600000 +3488bf4,24840004 +3488bf8,10850003 +3488bfc,24420010 +3488c00,1000fff6 +3488c04,2443fff4 +3488c08,8fbf0014 +3488c0c,d7b40018 +3488c10,3e00008 +3488c14,27bd0020 +3488c18,27bdffd8 +3488c1c,afbf0024 +3488c20,afb30020 +3488c24,afb2001c +3488c28,afb10018 +3488c2c,afb00014 +3488c30,809825 +3488c34,a09025 +3488c38,c08025 +3488c3c,3c118002 +3488c40,26222438 +3488c44,3025 +3488c48,2002825 +3488c4c,40f809 +3488c50,2402025 +3488c54,26312554 +3488c58,3025 +3488c5c,2002825 +3488c60,220f809 +3488c64,2402025 +3488c68,2602825 +3488c6c,3c028005 +3488c70,244270c0 +3488c74,40f809 +3488c78,2002025 +3488c7c,8fbf0024 +3488c80,8fb30020 +3488c84,8fb2001c +3488c88,8fb10018 +3488c8c,8fb00014 3488c90,3e00008 -3488c94,46020002 -3488c98,240300f1 -3488c9c,54430008 -3488ca0,24030015 -3488ca4,24020046 -3488ca8,1082000d -3488cac,2402002f -3488cb0,1482000e -3488cb4,3c028041 -3488cb8,3e00008 -3488cbc,c440a204 -3488cc0,1443000a -3488cc4,24020011 -3488cc8,90a3001d -3488ccc,14620007 -3488cd0,3c028041 -3488cd4,c442a208 +3488c94,27bd0028 +3488c98,44860000 +3488c9c,24020063 +3488ca0,54820005 +3488ca4,84a20000 +3488ca8,3c028041 +3488cac,c442a228 +3488cb0,3e00008 +3488cb4,46020002 +3488cb8,240300f1 +3488cbc,54430008 +3488cc0,24030015 +3488cc4,24020046 +3488cc8,1082000d +3488ccc,2402002f +3488cd0,1482000e +3488cd4,3c028041 3488cd8,3e00008 -3488cdc,46020002 -3488ce0,3c028041 -3488ce4,3e00008 -3488ce8,c440a204 -3488cec,3e00008 -3488cf4,27bdffd8 -3488cf8,afbf001c -3488cfc,afb20018 -3488d00,afb10014 -3488d04,afb00010 -3488d08,f7b40020 -3488d0c,48202 -3488d10,afa40028 -3488d14,a08825 -3488d18,c09025 -3488d1c,4487a000 -3488d20,108600 -3488d24,108603 -3488d28,c1022b9 -3488d2c,42402 -3488d30,c1022d1 -3488d34,402025 -3488d38,4406a000 -3488d3c,2202825 -3488d40,c10231e -3488d44,2002025 -3488d48,c1022e4 -3488d4c,46000306 -3488d50,2604ffff -3488d54,2403025 -3488d58,2202825 -3488d5c,42600 -3488d60,c1022fe -3488d64,42603 -3488d68,8fbf001c -3488d6c,8fb20018 -3488d70,8fb10014 -3488d74,8fb00010 -3488d78,d7b40020 -3488d7c,3e00008 -3488d80,27bd0028 -3488d84,27bdffe0 -3488d88,afbf001c -3488d8c,afb10018 -3488d90,afb00014 -3488d94,3c108041 -3488d98,2610c5fc -3488d9c,26110040 -3488da0,a6000000 -3488da4,c10273a -3488da8,24041e70 -3488dac,ae020004 -3488db0,26100008 -3488db4,5611fffb -3488db8,a6000000 -3488dbc,8fbf001c -3488dc0,8fb10018 -3488dc4,8fb00014 -3488dc8,3e00008 -3488dcc,27bd0020 -3488dd0,3c028041 -3488dd4,a440c5fc -3488dd8,2442c5fc -3488ddc,a4400008 -3488de0,a4400010 -3488de4,a4400018 -3488de8,a4400020 -3488dec,a4400028 -3488df0,a4400030 -3488df4,3e00008 -3488df8,a4400038 -3488dfc,27bdffe8 -3488e00,afbf0014 -3488e04,afb00010 -3488e08,afa5001c -3488e0c,10a0000e -3488e10,afa60020 -3488e14,808025 -3488e18,93a40023 -3488e1c,50800002 -3488e20,97a40020 -3488e24,3084ffff -3488e28,c101ee3 -3488e30,c101ed4 -3488e34,402025 -3488e38,94430004 -3488e3c,a6030000 -3488e40,80420006 -3488e44,a2020002 -3488e48,8fbf0014 -3488e4c,8fb00010 -3488e50,3e00008 -3488e54,27bd0018 -3488e58,27bdffe0 -3488e5c,afbf001c -3488e60,afb00018 -3488e64,808025 -3488e68,30e700ff -3488e6c,90c600a5 -3488e70,c1019d9 -3488e74,27a40010 -3488e78,8fa50010 -3488e7c,8fa60014 -3488e80,c10237f -3488e84,2002025 -3488e88,8fbf001c -3488e8c,8fb00018 -3488e90,3e00008 -3488e94,27bd0020 -3488e98,27bdffd8 -3488e9c,afbf0024 -3488ea0,afb10020 -3488ea4,afb0001c -3488ea8,808025 -3488eac,a08825 -3488eb0,3c028041 -3488eb4,8c42a1ac -3488eb8,afa20010 -3488ebc,3825 -3488ec0,a03025 -3488ec4,802825 -3488ec8,c102396 -3488ecc,27a40010 +3488cdc,c440a224 +3488ce0,1443000a +3488ce4,24020011 +3488ce8,90a3001d +3488cec,14620007 +3488cf0,3c028041 +3488cf4,c442a228 +3488cf8,3e00008 +3488cfc,46020002 +3488d00,3c028041 +3488d04,3e00008 +3488d08,c440a224 +3488d0c,3e00008 +3488d14,27bdffd8 +3488d18,afbf001c +3488d1c,afb20018 +3488d20,afb10014 +3488d24,afb00010 +3488d28,f7b40020 +3488d2c,48202 +3488d30,afa40028 +3488d34,a08825 +3488d38,c09025 +3488d3c,4487a000 +3488d40,108600 +3488d44,108603 +3488d48,c1022c1 +3488d4c,42402 +3488d50,c1022d9 +3488d54,402025 +3488d58,4406a000 +3488d5c,2202825 +3488d60,c102326 +3488d64,2002025 +3488d68,c1022ec +3488d6c,46000306 +3488d70,2604ffff +3488d74,2403025 +3488d78,2202825 +3488d7c,42600 +3488d80,c102306 +3488d84,42603 +3488d88,8fbf001c +3488d8c,8fb20018 +3488d90,8fb10014 +3488d94,8fb00010 +3488d98,d7b40020 +3488d9c,3e00008 +3488da0,27bd0028 +3488da4,27bdffe0 +3488da8,afbf001c +3488dac,afb10018 +3488db0,afb00014 +3488db4,3c108041 +3488db8,2610c61c +3488dbc,26110040 +3488dc0,a6000000 +3488dc4,c102742 +3488dc8,24041e70 +3488dcc,ae020004 +3488dd0,26100008 +3488dd4,5611fffb +3488dd8,a6000000 +3488ddc,8fbf001c +3488de0,8fb10018 +3488de4,8fb00014 +3488de8,3e00008 +3488dec,27bd0020 +3488df0,3c028041 +3488df4,a440c61c +3488df8,2442c61c +3488dfc,a4400008 +3488e00,a4400010 +3488e04,a4400018 +3488e08,a4400020 +3488e0c,a4400028 +3488e10,a4400030 +3488e14,3e00008 +3488e18,a4400038 +3488e1c,27bdffe8 +3488e20,afbf0014 +3488e24,afb00010 +3488e28,afa5001c +3488e2c,10a0000e +3488e30,afa60020 +3488e34,808025 +3488e38,93a40023 +3488e3c,50800002 +3488e40,97a40020 +3488e44,3084ffff +3488e48,c101eeb +3488e50,c101edc +3488e54,402025 +3488e58,94430004 +3488e5c,a6030000 +3488e60,80420006 +3488e64,a2020002 +3488e68,8fbf0014 +3488e6c,8fb00010 +3488e70,3e00008 +3488e74,27bd0018 +3488e78,27bdffe0 +3488e7c,afbf001c +3488e80,afb00018 +3488e84,808025 +3488e88,30e700ff +3488e8c,90c600a5 +3488e90,c1019e1 +3488e94,27a40010 +3488e98,8fa50010 +3488e9c,8fa60014 +3488ea0,c102387 +3488ea4,2002025 +3488ea8,8fbf001c +3488eac,8fb00018 +3488eb0,3e00008 +3488eb4,27bd0020 +3488eb8,27bdffd8 +3488ebc,afbf0024 +3488ec0,afb10020 +3488ec4,afb0001c +3488ec8,808025 +3488ecc,a08825 3488ed0,3c028041 -3488ed4,8c47a20c -3488ed8,2203025 -3488edc,2002825 -3488ee0,c10233d -3488ee4,8fa40010 -3488ee8,8fbf0024 -3488eec,8fb10020 -3488ef0,8fb0001c -3488ef4,3e00008 -3488ef8,27bd0028 -3488efc,27bdffd8 -3488f00,afbf0024 -3488f04,afb10020 -3488f08,afb0001c -3488f0c,808025 -3488f10,9083001d -3488f14,24020011 -3488f18,10620007 -3488f1c,a08825 -3488f20,3c028001 -3488f24,24423268 -3488f28,40f809 -3488f30,10000010 -3488f34,8fbf0024 -3488f38,3c028041 -3488f3c,8c42a1b0 -3488f40,afa20010 -3488f44,3825 -3488f48,a03025 -3488f4c,802825 -3488f50,c102396 -3488f54,27a40010 +3488ed4,8c42a1cc +3488ed8,afa20010 +3488edc,3825 +3488ee0,a03025 +3488ee4,802825 +3488ee8,c10239e +3488eec,27a40010 +3488ef0,3c028041 +3488ef4,8c47a22c +3488ef8,2203025 +3488efc,2002825 +3488f00,c102345 +3488f04,8fa40010 +3488f08,8fbf0024 +3488f0c,8fb10020 +3488f10,8fb0001c +3488f14,3e00008 +3488f18,27bd0028 +3488f1c,27bdffd8 +3488f20,afbf0024 +3488f24,afb10020 +3488f28,afb0001c +3488f2c,808025 +3488f30,9083001d +3488f34,24020011 +3488f38,10620007 +3488f3c,a08825 +3488f40,3c028001 +3488f44,24423268 +3488f48,40f809 +3488f50,10000010 +3488f54,8fbf0024 3488f58,3c028041 -3488f5c,8c47a20c -3488f60,2203025 -3488f64,2002825 -3488f68,c10233d -3488f6c,8fa40010 -3488f70,8fbf0024 -3488f74,8fb10020 -3488f78,8fb0001c -3488f7c,3e00008 -3488f80,27bd0028 -3488f84,27bdffd8 -3488f88,afbf0024 -3488f8c,afb10020 -3488f90,afb0001c -3488f94,808025 -3488f98,a08825 -3488f9c,3c028041 -3488fa0,8c42a1b4 -3488fa4,afa20010 -3488fa8,2407004f -3488fac,a03025 -3488fb0,802825 -3488fb4,c102396 -3488fb8,27a40010 +3488f5c,8c42a1d0 +3488f60,afa20010 +3488f64,3825 +3488f68,a03025 +3488f6c,802825 +3488f70,c10239e +3488f74,27a40010 +3488f78,3c028041 +3488f7c,8c47a22c +3488f80,2203025 +3488f84,2002825 +3488f88,c102345 +3488f8c,8fa40010 +3488f90,8fbf0024 +3488f94,8fb10020 +3488f98,8fb0001c +3488f9c,3e00008 +3488fa0,27bd0028 +3488fa4,27bdffd8 +3488fa8,afbf0024 +3488fac,afb10020 +3488fb0,afb0001c +3488fb4,808025 +3488fb8,a08825 3488fbc,3c028041 -3488fc0,8c47a210 -3488fc4,2203025 -3488fc8,2002825 -3488fcc,c10233d -3488fd0,8fa40010 -3488fd4,8fbf0024 -3488fd8,8fb10020 -3488fdc,8fb0001c -3488fe0,3e00008 -3488fe4,27bd0028 -3488fe8,27bdffd8 -3488fec,afbf0024 -3488ff0,afb10020 -3488ff4,afb0001c -3488ff8,808025 -3488ffc,a08825 -3489000,3c028041 -3489004,8c42a1b8 -3489008,afa20010 -348900c,3825 -3489010,a03025 -3489014,802825 -3489018,c102396 -348901c,27a40010 +3488fc0,8c42a1d4 +3488fc4,afa20010 +3488fc8,2407004f +3488fcc,a03025 +3488fd0,802825 +3488fd4,c10239e +3488fd8,27a40010 +3488fdc,3c028041 +3488fe0,8c47a230 +3488fe4,2203025 +3488fe8,2002825 +3488fec,c102345 +3488ff0,8fa40010 +3488ff4,8fbf0024 +3488ff8,8fb10020 +3488ffc,8fb0001c +3489000,3e00008 +3489004,27bd0028 +3489008,27bdffd8 +348900c,afbf0024 +3489010,afb10020 +3489014,afb0001c +3489018,808025 +348901c,a08825 3489020,3c028041 -3489024,8c47a214 -3489028,2203025 -348902c,2002825 -3489030,c10233d -3489034,8fa40010 -3489038,8fbf0024 -348903c,8fb10020 -3489040,8fb0001c -3489044,3e00008 -3489048,27bd0028 -348904c,27bdffd8 -3489050,afbf0024 -3489054,afb10020 -3489058,afb0001c -348905c,808025 -3489060,a08825 -3489064,3c028041 -3489068,8c42a1bc -348906c,afa20010 -3489070,2407000c -3489074,a03025 -3489078,802825 -348907c,c102396 -3489080,27a40010 +3489024,8c42a1d8 +3489028,afa20010 +348902c,3825 +3489030,a03025 +3489034,802825 +3489038,c10239e +348903c,27a40010 +3489040,3c028041 +3489044,8c47a234 +3489048,2203025 +348904c,2002825 +3489050,c102345 +3489054,8fa40010 +3489058,8fbf0024 +348905c,8fb10020 +3489060,8fb0001c +3489064,3e00008 +3489068,27bd0028 +348906c,27bdffd8 +3489070,afbf0024 +3489074,afb10020 +3489078,afb0001c +348907c,808025 +3489080,a08825 3489084,3c028041 -3489088,8c47a218 -348908c,2203025 -3489090,2002825 -3489094,c10233d -3489098,8fa40010 -348909c,8fbf0024 -34890a0,8fb10020 -34890a4,8fb0001c -34890a8,3e00008 -34890ac,27bd0028 -34890b0,27bdffd0 -34890b4,afbf002c -34890b8,afb10028 -34890bc,afb00024 -34890c0,808025 -34890c4,afa00010 -34890c8,afa00014 -34890cc,9482001c -34890d0,24030001 -34890d4,14430008 -34890d8,a08825 -34890dc,24070015 -34890e0,90a600a5 -34890e4,802825 -34890e8,c1019d9 -34890ec,27a40010 -34890f0,10000012 -34890f4,afa00018 -34890f8,24030007 -34890fc,14430008 -3489100,24030a0c -3489104,24070058 -3489108,90a600a5 -348910c,802825 -3489110,c1019d9 -3489114,27a40010 -3489118,10000008 -348911c,afa00018 -3489120,54430006 -3489124,afa00018 -3489128,3c050010 -348912c,34a5010a -3489130,c1019b1 +3489088,8c42a1dc +348908c,afa20010 +3489090,2407000c +3489094,a03025 +3489098,802825 +348909c,c10239e +34890a0,27a40010 +34890a4,3c028041 +34890a8,8c47a238 +34890ac,2203025 +34890b0,2002825 +34890b4,c102345 +34890b8,8fa40010 +34890bc,8fbf0024 +34890c0,8fb10020 +34890c4,8fb0001c +34890c8,3e00008 +34890cc,27bd0028 +34890d0,27bdffd0 +34890d4,afbf002c +34890d8,afb10028 +34890dc,afb00024 +34890e0,808025 +34890e4,afa00010 +34890e8,afa00014 +34890ec,9482001c +34890f0,24030001 +34890f4,14430008 +34890f8,a08825 +34890fc,24070015 +3489100,90a600a5 +3489104,802825 +3489108,c1019e1 +348910c,27a40010 +3489110,10000012 +3489114,afa00018 +3489118,24030007 +348911c,14430008 +3489120,24030a0c +3489124,24070058 +3489128,90a600a5 +348912c,802825 +3489130,c1019e1 3489134,27a40010 -3489138,afa00018 -348913c,8fa50010 -3489140,8fa60014 -3489144,c10237f -3489148,27a40018 -348914c,97a20018 -3489150,10400008 -3489154,2203025 -3489158,3c028041 -348915c,8c47a204 -3489160,2002825 -3489164,c10233d -3489168,8fa40018 -348916c,10000005 -3489170,8fbf002c -3489174,2002825 -3489178,c1022fe -348917c,82040141 -3489180,8fbf002c -3489184,8fb10028 -3489188,8fb00024 -348918c,3e00008 -3489190,27bd0030 -3489194,27bdffd0 -3489198,afbf002c -348919c,afb10028 -34891a0,afb00024 -34891a4,808025 -34891a8,afa00010 -34891ac,afa00014 -34891b0,9482001c -34891b4,10400004 -34891b8,a08825 -34891bc,24030005 -34891c0,54430007 -34891c4,afa00018 -34891c8,24070034 -34891cc,922600a5 -34891d0,2002825 -34891d4,c1019d9 -34891d8,27a40010 -34891dc,afa00018 -34891e0,8fa50010 -34891e4,8fa60014 -34891e8,c10237f -34891ec,27a40018 -34891f0,97a20018 -34891f4,10400008 -34891f8,2203025 -34891fc,3c028041 -3489200,8c47a204 -3489204,2002825 -3489208,c10233d -348920c,8fa40018 -3489210,10000005 -3489214,8fbf002c -3489218,2002825 -348921c,c1022fe -3489220,82040147 -3489224,8fbf002c -3489228,8fb10028 -348922c,8fb00024 -3489230,3e00008 -3489234,27bd0030 -3489238,27bdffd8 -348923c,afbf0024 -3489240,afb10020 -3489244,afb0001c -3489248,808025 -348924c,a08825 -3489250,3c028041 -3489254,8c42a1ac -3489258,afa20010 -348925c,2407003e -3489260,a03025 -3489264,802825 -3489268,c102396 -348926c,27a40010 +3489138,10000008 +348913c,afa00018 +3489140,54430006 +3489144,afa00018 +3489148,3c050010 +348914c,34a5010a +3489150,c1019b9 +3489154,27a40010 +3489158,afa00018 +348915c,8fa50010 +3489160,8fa60014 +3489164,c102387 +3489168,27a40018 +348916c,97a20018 +3489170,10400008 +3489174,2203025 +3489178,3c028041 +348917c,8c47a224 +3489180,2002825 +3489184,c102345 +3489188,8fa40018 +348918c,10000005 +3489190,8fbf002c +3489194,2002825 +3489198,c102306 +348919c,82040141 +34891a0,8fbf002c +34891a4,8fb10028 +34891a8,8fb00024 +34891ac,3e00008 +34891b0,27bd0030 +34891b4,27bdffd0 +34891b8,afbf002c +34891bc,afb10028 +34891c0,afb00024 +34891c4,808025 +34891c8,afa00010 +34891cc,afa00014 +34891d0,9482001c +34891d4,10400004 +34891d8,a08825 +34891dc,24030005 +34891e0,54430007 +34891e4,afa00018 +34891e8,24070034 +34891ec,922600a5 +34891f0,2002825 +34891f4,c1019e1 +34891f8,27a40010 +34891fc,afa00018 +3489200,8fa50010 +3489204,8fa60014 +3489208,c102387 +348920c,27a40018 +3489210,97a20018 +3489214,10400008 +3489218,2203025 +348921c,3c028041 +3489220,8c47a224 +3489224,2002825 +3489228,c102345 +348922c,8fa40018 +3489230,10000005 +3489234,8fbf002c +3489238,2002825 +348923c,c102306 +3489240,82040147 +3489244,8fbf002c +3489248,8fb10028 +348924c,8fb00024 +3489250,3e00008 +3489254,27bd0030 +3489258,27bdffd8 +348925c,afbf0024 +3489260,afb10020 +3489264,afb0001c +3489268,808025 +348926c,a08825 3489270,3c028041 -3489274,8c47a204 -3489278,2203025 -348927c,2002825 -3489280,c10233d -3489284,8fa40010 -3489288,8fbf0024 -348928c,8fb10020 -3489290,8fb0001c -3489294,3e00008 -3489298,27bd0028 -348929c,801025 -34892a0,14c00002 -34892a4,a6001b -34892a8,7000d -34892ac,2810 -34892b0,3812 -34892b4,3c03aaaa -34892b8,3463aaab -34892bc,e30019 -34892c0,1810 -34892c4,31882 -34892c8,32040 -34892cc,831821 -34892d0,31840 -34892d4,e31823 -34892d8,44850000 -34892dc,4a10004 -34892e0,468000a1 -34892e4,3c048041 -34892e8,d480a228 -34892ec,46201080 -34892f0,462010a0 -34892f4,44860000 -34892f8,4c10004 -34892fc,46800021 -3489300,3c048041 -3489304,d484a228 -3489308,46240000 -348930c,46200020 -3489310,46001083 -3489314,3c048041 -3489318,c484a21c -348931c,46022101 -3489320,24640001 -3489324,3c068041 -3489328,24c6a1c0 -348932c,32840 -3489330,a32821 -3489334,c52821 -3489338,90a50001 -348933c,44850000 -3489344,46800020 -3489348,46040002 -348934c,42840 -3489350,a42821 -3489354,c53021 -3489358,90c50001 -348935c,44853000 -3489364,468031a0 -3489368,46023182 -348936c,46060000 -3489370,3c058041 -3489374,c4a6a220 -3489378,4600303e -3489380,45030005 -3489384,46060001 -3489388,4600000d -348938c,44050000 -3489390,10000006 -3489394,30a700ff -3489398,4600000d -348939c,44050000 -34893a0,3c068000 -34893a4,a62825 -34893a8,30a700ff -34893ac,3c068041 -34893b0,24c6a1c0 -34893b4,32840 -34893b8,a32821 -34893bc,c52821 -34893c0,90a50002 -34893c4,44850000 -34893cc,46800020 -34893d0,46040002 -34893d4,42840 -34893d8,a42821 -34893dc,c53021 -34893e0,90c50002 -34893e4,44853000 -34893ec,468031a0 -34893f0,46023182 -34893f4,46060000 -34893f8,3c058041 -34893fc,c4a6a220 -3489400,4600303e -3489408,45030005 -348940c,46060001 -3489410,4600000d -3489414,44050000 -3489418,10000006 -348941c,30a600ff -3489420,4600000d -3489424,44050000 -3489428,3c068000 -348942c,a62825 -3489430,30a600ff -3489434,32840 -3489438,a31821 -348943c,3c088041 -3489440,2508a1c0 -3489444,681821 -3489448,90650000 -348944c,44850000 -3489454,46800020 -3489458,46040002 -348945c,41840 -3489460,641821 +3489274,8c42a1cc +3489278,afa20010 +348927c,2407003e +3489280,a03025 +3489284,802825 +3489288,c10239e +348928c,27a40010 +3489290,3c028041 +3489294,8c47a224 +3489298,2203025 +348929c,2002825 +34892a0,c102345 +34892a4,8fa40010 +34892a8,8fbf0024 +34892ac,8fb10020 +34892b0,8fb0001c +34892b4,3e00008 +34892b8,27bd0028 +34892bc,801025 +34892c0,14c00002 +34892c4,a6001b +34892c8,7000d +34892cc,2810 +34892d0,3812 +34892d4,3c03aaaa +34892d8,3463aaab +34892dc,e30019 +34892e0,1810 +34892e4,31882 +34892e8,32040 +34892ec,831821 +34892f0,31840 +34892f4,e31823 +34892f8,44850000 +34892fc,4a10004 +3489300,468000a1 +3489304,3c048041 +3489308,d480a248 +348930c,46201080 +3489310,462010a0 +3489314,44860000 +3489318,4c10004 +348931c,46800021 +3489320,3c048041 +3489324,d484a248 +3489328,46240000 +348932c,46200020 +3489330,46001083 +3489334,3c048041 +3489338,c484a23c +348933c,46022101 +3489340,24640001 +3489344,3c068041 +3489348,24c6a1e0 +348934c,32840 +3489350,a32821 +3489354,c52821 +3489358,90a50001 +348935c,44850000 +3489364,46800020 +3489368,46040002 +348936c,42840 +3489370,a42821 +3489374,c53021 +3489378,90c50001 +348937c,44853000 +3489384,468031a0 +3489388,46023182 +348938c,46060000 +3489390,3c058041 +3489394,c4a6a240 +3489398,4600303e +34893a0,45030005 +34893a4,46060001 +34893a8,4600000d +34893ac,44050000 +34893b0,10000006 +34893b4,30a700ff +34893b8,4600000d +34893bc,44050000 +34893c0,3c068000 +34893c4,a62825 +34893c8,30a700ff +34893cc,3c068041 +34893d0,24c6a1e0 +34893d4,32840 +34893d8,a32821 +34893dc,c52821 +34893e0,90a50002 +34893e4,44850000 +34893ec,46800020 +34893f0,46040002 +34893f4,42840 +34893f8,a42821 +34893fc,c53021 +3489400,90c50002 +3489404,44853000 +348940c,468031a0 +3489410,46023182 +3489414,46060000 +3489418,3c058041 +348941c,c4a6a240 +3489420,4600303e +3489428,45030005 +348942c,46060001 +3489430,4600000d +3489434,44050000 +3489438,10000006 +348943c,30a600ff +3489440,4600000d +3489444,44050000 +3489448,3c068000 +348944c,a62825 +3489450,30a600ff +3489454,32840 +3489458,a31821 +348945c,3c088041 +3489460,2508a1e0 3489464,681821 -3489468,90630000 -348946c,44832000 -3489474,46802120 -3489478,46022082 -348947c,46020000 -3489480,3c038041 -3489484,c462a220 -3489488,4600103e -3489490,45030005 -3489494,46020001 -3489498,4600000d -348949c,44030000 -34894a0,10000006 -34894a4,a0430000 -34894a8,4600000d -34894ac,44030000 -34894b0,3c048000 -34894b4,641825 -34894b8,a0430000 -34894bc,a0470001 -34894c0,3e00008 -34894c4,a0460002 -34894c8,3c028011 -34894cc,3442a5d0 -34894d0,24030140 -34894d4,a4431424 -34894d8,90440032 -34894dc,41840 -34894e0,641821 -34894e4,31900 -34894e8,3e00008 -34894ec,a0430033 -34894f0,24a20002 -34894f4,24a50082 -34894f8,24065700 -34894fc,24070004 -3489500,9443fffe -3489504,50660008 -3489508,24420004 -348950c,50600006 -3489510,24420004 -3489514,94430000 -3489518,2c630004 -348951c,54600001 -3489520,a4470000 -3489524,24420004 -3489528,5445fff6 -348952c,9443fffe -3489530,3e00008 -3489538,27bdffe8 -348953c,afbf0014 -3489540,c10273a -3489544,24040400 -3489548,3c038041 -348954c,ac62b58c -3489550,3c038041 -3489554,ac62b590 -3489558,8fbf0014 -348955c,3e00008 -3489560,27bd0018 -3489564,80820000 -3489568,10400026 -348956c,24870001 +3489468,90650000 +348946c,44850000 +3489474,46800020 +3489478,46040002 +348947c,41840 +3489480,641821 +3489484,681821 +3489488,90630000 +348948c,44832000 +3489494,46802120 +3489498,46022082 +348949c,46020000 +34894a0,3c038041 +34894a4,c462a240 +34894a8,4600103e +34894b0,45030005 +34894b4,46020001 +34894b8,4600000d +34894bc,44030000 +34894c0,10000006 +34894c4,a0430000 +34894c8,4600000d +34894cc,44030000 +34894d0,3c048000 +34894d4,641825 +34894d8,a0430000 +34894dc,a0470001 +34894e0,3e00008 +34894e4,a0460002 +34894e8,3c028011 +34894ec,3442a5d0 +34894f0,24030140 +34894f4,a4431424 +34894f8,90440032 +34894fc,41840 +3489500,641821 +3489504,31900 +3489508,3e00008 +348950c,a0430033 +3489510,24a20002 +3489514,24a50082 +3489518,24065700 +348951c,24070004 +3489520,9443fffe +3489524,50660008 +3489528,24420004 +348952c,50600006 +3489530,24420004 +3489534,94430000 +3489538,2c630004 +348953c,54600001 +3489540,a4470000 +3489544,24420004 +3489548,5445fff6 +348954c,9443fffe +3489550,3e00008 +3489558,27bdffe8 +348955c,afbf0014 +3489560,c102742 +3489564,24040400 +3489568,3c038041 +348956c,ac62b5ac 3489570,3c038041 -3489574,8c68b58c -3489578,25080400 -348957c,3c038041 -3489580,8c63b590 -3489584,5825 -3489588,3c0aff00 -348958c,254a0fff -3489590,30c60fff -3489594,240df000 -3489598,3c098041 -348959c,2529a418 -34895a0,240c0001 -34895a4,68202b -34895a8,54800005 -34895ac,a0620000 -34895b0,11600014 -34895b4,3c028041 -34895b8,3e00008 -34895bc,ac43b590 -34895c0,30a40fff -34895c4,42300 -34895c8,8c620000 -34895cc,4a1024 -34895d0,441025 -34895d4,4d1024 -34895d8,461025 -34895dc,ac620000 -34895e0,24630004 -34895e4,95220004 -34895e8,a22821 -34895ec,24e70001 -34895f0,80e2ffff -34895f4,1440ffeb -34895f8,1805825 -34895fc,3c028041 -3489600,ac43b590 -3489604,3e00008 -348960c,27bdffb8 -3489610,afbf0044 -3489614,afbe0040 -3489618,afb7003c -348961c,afb60038 -3489620,afb50034 -3489624,afb40030 -3489628,afb3002c -348962c,afb20028 -3489630,afb10024 -3489634,afb00020 -3489638,80a825 -348963c,b025 -3489640,9025 -3489644,3c138041 -3489648,2673a418 -348964c,3c178041 -3489650,3c148041 -3489654,3c1e38e3 -3489658,24070012 -348965c,2c03025 -3489660,2602825 -3489664,c101bd7 -3489668,2a02025 -348966c,8ef0b58c -3489670,8e82b590 -3489674,202102b -3489678,50400026 -348967c,26520001 -3489680,37d18e39 -3489684,82020000 -3489688,2002825 -348968c,2442ffe0 -3489690,510018 -3489694,1810 -3489698,31883 -348969c,227c3 -34896a0,641823 -34896a4,14720016 -34896a8,26100004 -34896ac,8ca70000 -34896b0,73b02 -34896b4,510018 -34896b8,1810 -34896bc,31883 +3489574,ac62b5b0 +3489578,8fbf0014 +348957c,3e00008 +3489580,27bd0018 +3489584,80820000 +3489588,10400026 +348958c,24870001 +3489590,3c038041 +3489594,8c68b5ac +3489598,25080400 +348959c,3c038041 +34895a0,8c63b5b0 +34895a4,5825 +34895a8,3c0aff00 +34895ac,254a0fff +34895b0,30c60fff +34895b4,240df000 +34895b8,3c098041 +34895bc,2529a438 +34895c0,240c0001 +34895c4,68202b +34895c8,54800005 +34895cc,a0620000 +34895d0,11600014 +34895d4,3c028041 +34895d8,3e00008 +34895dc,ac43b5b0 +34895e0,30a40fff +34895e4,42300 +34895e8,8c620000 +34895ec,4a1024 +34895f0,441025 +34895f4,4d1024 +34895f8,461025 +34895fc,ac620000 +3489600,24630004 +3489604,95220004 +3489608,a22821 +348960c,24e70001 +3489610,80e2ffff +3489614,1440ffeb +3489618,1805825 +348961c,3c028041 +3489620,ac43b5b0 +3489624,3e00008 +348962c,27bdffb8 +3489630,afbf0044 +3489634,afbe0040 +3489638,afb7003c +348963c,afb60038 +3489640,afb50034 +3489644,afb40030 +3489648,afb3002c +348964c,afb20028 +3489650,afb10024 +3489654,afb00020 +3489658,80a825 +348965c,b025 +3489660,9025 +3489664,3c138041 +3489668,2673a438 +348966c,3c178041 +3489670,3c148041 +3489674,3c1e38e3 +3489678,24070012 +348967c,2c03025 +3489680,2602825 +3489684,c101bdf +3489688,2a02025 +348968c,8ef0b5ac +3489690,8e82b5b0 +3489694,202102b +3489698,50400026 +348969c,26520001 +34896a0,37d18e39 +34896a4,82020000 +34896a8,2002825 +34896ac,2442ffe0 +34896b0,510018 +34896b4,1810 +34896b8,31883 +34896bc,227c3 34896c0,641823 -34896c4,330c0 -34896c8,c33021 -34896cc,63040 -34896d0,96630006 -34896d4,afa30018 -34896d8,96630004 -34896dc,afa30014 -34896e0,8ca30000 -34896e4,30630fff -34896e8,afa30010 -34896ec,30e70fff -34896f0,463023 -34896f4,2602825 -34896f8,c101c3f -34896fc,2a02025 -3489700,8e82b590 -3489704,202102b -3489708,5440ffdf -348970c,82020000 -3489710,26520001 -3489714,24020006 -3489718,1642ffcf -348971c,26d60012 -3489720,3c028041 -3489724,8c43b58c -3489728,3c028041 -348972c,ac43b590 -3489730,8fbf0044 -3489734,8fbe0040 -3489738,8fb7003c -348973c,8fb60038 -3489740,8fb50034 -3489744,8fb40030 -3489748,8fb3002c -348974c,8fb20028 -3489750,8fb10024 -3489754,8fb00020 -3489758,3e00008 -348975c,27bd0048 -3489760,3c028041 -3489764,24030001 -3489768,ac43b598 -348976c,3c038041 -3489770,8c62b59c -3489774,2c440006 -3489778,50800001 -348977c,24020005 -3489780,3e00008 -3489784,ac62b59c -3489788,27bdffb8 -348978c,afbf0044 -3489790,afbe0040 -3489794,afb6003c -3489798,afb50038 -348979c,afb40034 -34897a0,afb30030 -34897a4,afb2002c -34897a8,afb10028 -34897ac,afb00024 -34897b0,3a0f025 -34897b4,3c028041 -34897b8,9442b594 -34897bc,10400133 -34897c0,3a0a825 -34897c4,3c02801d -34897c8,3442aa30 -34897cc,8c42066c -34897d0,3c033000 -34897d4,24630483 -34897d8,431024 -34897dc,1440012b -34897e0,808025 -34897e4,3c02801c -34897e8,344284a0 -34897ec,8c430008 -34897f0,3c02800f -34897f4,8c4213ec -34897f8,54620125 -34897fc,2a0e825 -3489800,3c028011 -3489804,3442a5d0 -3489808,8c47135c -348980c,14e0011f -3489810,3c02800e -3489814,3442f1b0 -3489818,8c420000 -348981c,30420020 -3489820,1440011a -3489824,3c028041 -3489828,8c43b598 -348982c,24020001 -3489830,1062000a -3489834,3c02801c -3489838,344284a0 -348983c,3c030001 -3489840,431021 -3489844,94430934 -3489848,24020006 -348984c,54620110 -3489850,2a0e825 -3489854,10000009 -3489858,3c038041 -348985c,344284a0 -3489860,3c030001 -3489864,431021 -3489868,94430934 -348986c,24020006 -3489870,14620007 -3489874,3c028041 +34896c4,14720016 +34896c8,26100004 +34896cc,8ca70000 +34896d0,73b02 +34896d4,510018 +34896d8,1810 +34896dc,31883 +34896e0,641823 +34896e4,330c0 +34896e8,c33021 +34896ec,63040 +34896f0,96630006 +34896f4,afa30018 +34896f8,96630004 +34896fc,afa30014 +3489700,8ca30000 +3489704,30630fff +3489708,afa30010 +348970c,30e70fff +3489710,463023 +3489714,2602825 +3489718,c101c47 +348971c,2a02025 +3489720,8e82b5b0 +3489724,202102b +3489728,5440ffdf +348972c,82020000 +3489730,26520001 +3489734,24020006 +3489738,1642ffcf +348973c,26d60012 +3489740,3c028041 +3489744,8c43b5ac +3489748,3c028041 +348974c,ac43b5b0 +3489750,8fbf0044 +3489754,8fbe0040 +3489758,8fb7003c +348975c,8fb60038 +3489760,8fb50034 +3489764,8fb40030 +3489768,8fb3002c +348976c,8fb20028 +3489770,8fb10024 +3489774,8fb00020 +3489778,3e00008 +348977c,27bd0048 +3489780,3c028041 +3489784,24030001 +3489788,ac43b5b8 +348978c,3c038041 +3489790,8c62b5bc +3489794,2c440006 +3489798,50800001 +348979c,24020005 +34897a0,3e00008 +34897a4,ac62b5bc +34897a8,27bdffb8 +34897ac,afbf0044 +34897b0,afbe0040 +34897b4,afb6003c +34897b8,afb50038 +34897bc,afb40034 +34897c0,afb30030 +34897c4,afb2002c +34897c8,afb10028 +34897cc,afb00024 +34897d0,3a0f025 +34897d4,3c028041 +34897d8,9442b5b4 +34897dc,10400133 +34897e0,3a0a825 +34897e4,3c02801d +34897e8,3442aa30 +34897ec,8c42066c +34897f0,3c033000 +34897f4,24630483 +34897f8,431024 +34897fc,1440012b +3489800,808025 +3489804,3c02801c +3489808,344284a0 +348980c,8c430008 +3489810,3c02800f +3489814,8c4213ec +3489818,54620125 +348981c,2a0e825 +3489820,3c028011 +3489824,3442a5d0 +3489828,8c47135c +348982c,14e0011f +3489830,3c02800e +3489834,3442f1b0 +3489838,8c420000 +348983c,30420020 +3489840,1440011a +3489844,3c028041 +3489848,8c43b5b8 +348984c,24020001 +3489850,1062000a +3489854,3c02801c +3489858,344284a0 +348985c,3c030001 +3489860,431021 +3489864,94430934 +3489868,24020006 +348986c,54620110 +3489870,2a0e825 +3489874,10000009 3489878,3c038041 -348987c,8c62b59c -3489880,3042001f -3489884,ac62b59c -3489888,10000022 -348988c,241300ff -3489890,8c42b59c -3489894,2c430006 -3489898,1060000a -348989c,2c43006a -34898a0,29a00 -34898a4,2629823 -34898a8,3c02cccc -34898ac,3442cccd -34898b0,2620019 -34898b4,9810 -34898b8,139882 -34898bc,10000015 -34898c0,327300ff -34898c4,14600013 -34898c8,241300ff -34898cc,2c4300ba -34898d0,1060000b -34898d4,21a00 -34898d8,621023 -34898dc,24429769 -34898e0,3c03cccc -34898e4,3463cccd -34898e8,430019 -34898ec,1010 -34898f0,29982 -34898f4,139827 -34898f8,10000006 -34898fc,327300ff -3489900,3c028041 -3489904,ac40b598 -3489908,3c028041 -348990c,100000df -3489910,ac40b59c -3489914,3c038041 -3489918,8c62b59c -348991c,24420001 -3489920,ac62b59c -3489924,3c028011 -3489928,3442a5d0 -348992c,8c4808c4 -3489930,19000011 -3489934,1001025 -3489938,e05025 -348993c,3c056666 -3489940,24a56667 -3489944,254a0001 -3489948,401825 -348994c,450018 -3489950,2010 -3489954,42083 -3489958,217c3 -348995c,2863000a -3489960,1060fff8 -3489964,821023 -3489968,15400005 -348996c,3c028041 -3489970,10000002 -3489974,240a0001 -3489978,240a0001 -348997c,3c028041 -3489980,9445b532 -3489984,18a00010 -3489988,a01025 -348998c,3c066666 -3489990,24c66667 -3489994,24e70001 -3489998,401825 -348999c,460018 -34899a0,2010 -34899a4,42083 -34899a8,217c3 -34899ac,2863000a -34899b0,1060fff8 -34899b4,821023 -34899b8,54e00005 -34899bc,1473821 -34899c0,10000002 -34899c4,24070001 -34899c8,24070001 -34899cc,1473821 -34899d0,24f40001 -34899d4,3c028041 -34899d8,2442a418 -34899dc,94430004 -34899e0,740018 -34899e4,2012 -34899e8,3c038041 -34899ec,2463a3f8 -34899f0,94660004 -34899f4,862021 -34899f8,497c2 -34899fc,2449021 -3489a00,129043 -3489a04,129023 -3489a08,265200a0 -3489a0c,94420006 -3489a10,44820000 -3489a18,46800021 -3489a1c,3c028041 -3489a20,d446a230 -3489a24,46260002 -3489a28,3c028041 -3489a2c,d442a238 -3489a30,46201001 -3489a34,3c028041 -3489a38,d444a240 -3489a3c,46240000 -3489a40,4620000d -3489a44,44060000 -3489a48,94620006 -3489a4c,44820000 -3489a54,46800021 -3489a58,46260002 -3489a5c,46201081 -3489a60,3c028041 -3489a64,d440a248 -3489a68,46201080 -3489a6c,46241080 -3489a70,4620100d -3489a74,44110000 -3489a78,24e20009 -3489a7c,210c2 -3489a80,210c0 -3489a84,3a2e823 -3489a88,27a40020 -3489a8c,941021 -3489a90,19400015 -3489a94,a0400000 -3489a98,2549ffff -3489a9c,894821 -3489aa0,806025 -3489aa4,3c0b6666 -3489aa8,256b6667 -3489aac,10b0018 -3489ab0,1810 -3489ab4,31883 -3489ab8,817c3 -3489abc,621823 -3489ac0,31080 -3489ac4,431021 -3489ac8,21040 -3489acc,1021023 -3489ad0,24420030 -3489ad4,a1220000 -3489ad8,604025 -3489adc,1201025 -3489ae0,144cfff2 -3489ae4,2529ffff -3489ae8,8a1021 -3489aec,2403002f -3489af0,a0430000 -3489af4,147102a -3489af8,10400012 -3489afc,873821 -3489b00,8a5021 -3489b04,3c086666 -3489b08,25086667 -3489b0c,a80018 -3489b10,1810 -3489b14,31883 -3489b18,517c3 -3489b1c,621823 -3489b20,31080 -3489b24,431021 -3489b28,21040 -3489b2c,a21023 -3489b30,24420030 -3489b34,a0e20000 -3489b38,24e7ffff -3489b3c,14eafff3 -3489b40,602825 -3489b44,8e020008 -3489b48,24430008 -3489b4c,ae030008 -3489b50,3c03de00 -3489b54,ac430000 -3489b58,3c038041 -3489b5c,2463a468 -3489b60,ac430004 +348987c,344284a0 +3489880,3c030001 +3489884,431021 +3489888,94430934 +348988c,24020006 +3489890,14620007 +3489894,3c028041 +3489898,3c038041 +348989c,8c62b5bc +34898a0,3042001f +34898a4,ac62b5bc +34898a8,10000022 +34898ac,241300ff +34898b0,8c42b5bc +34898b4,2c430006 +34898b8,1060000a +34898bc,2c43006a +34898c0,29a00 +34898c4,2629823 +34898c8,3c02cccc +34898cc,3442cccd +34898d0,2620019 +34898d4,9810 +34898d8,139882 +34898dc,10000015 +34898e0,327300ff +34898e4,14600013 +34898e8,241300ff +34898ec,2c4300ba +34898f0,1060000b +34898f4,21a00 +34898f8,621023 +34898fc,24429769 +3489900,3c03cccc +3489904,3463cccd +3489908,430019 +348990c,1010 +3489910,29982 +3489914,139827 +3489918,10000006 +348991c,327300ff +3489920,3c028041 +3489924,ac40b5b8 +3489928,3c028041 +348992c,100000df +3489930,ac40b5bc +3489934,3c038041 +3489938,8c62b5bc +348993c,24420001 +3489940,ac62b5bc +3489944,3c028011 +3489948,3442a5d0 +348994c,8c4808c4 +3489950,19000011 +3489954,1001025 +3489958,e05025 +348995c,3c056666 +3489960,24a56667 +3489964,254a0001 +3489968,401825 +348996c,450018 +3489970,2010 +3489974,42083 +3489978,217c3 +348997c,2863000a +3489980,1060fff8 +3489984,821023 +3489988,15400005 +348998c,3c028041 +3489990,10000002 +3489994,240a0001 +3489998,240a0001 +348999c,3c028041 +34899a0,9445b552 +34899a4,18a00010 +34899a8,a01025 +34899ac,3c066666 +34899b0,24c66667 +34899b4,24e70001 +34899b8,401825 +34899bc,460018 +34899c0,2010 +34899c4,42083 +34899c8,217c3 +34899cc,2863000a +34899d0,1060fff8 +34899d4,821023 +34899d8,54e00005 +34899dc,1473821 +34899e0,10000002 +34899e4,24070001 +34899e8,24070001 +34899ec,1473821 +34899f0,24f40001 +34899f4,3c028041 +34899f8,2442a438 +34899fc,94430004 +3489a00,740018 +3489a04,2012 +3489a08,3c038041 +3489a0c,2463a418 +3489a10,94660004 +3489a14,862021 +3489a18,497c2 +3489a1c,2449021 +3489a20,129043 +3489a24,129023 +3489a28,265200a0 +3489a2c,94420006 +3489a30,44820000 +3489a38,46800021 +3489a3c,3c028041 +3489a40,d446a250 +3489a44,46260002 +3489a48,3c028041 +3489a4c,d442a258 +3489a50,46201001 +3489a54,3c028041 +3489a58,d444a260 +3489a5c,46240000 +3489a60,4620000d +3489a64,44060000 +3489a68,94620006 +3489a6c,44820000 +3489a74,46800021 +3489a78,46260002 +3489a7c,46201081 +3489a80,3c028041 +3489a84,d440a268 +3489a88,46201080 +3489a8c,46241080 +3489a90,4620100d +3489a94,44110000 +3489a98,24e20009 +3489a9c,210c2 +3489aa0,210c0 +3489aa4,3a2e823 +3489aa8,27a40020 +3489aac,941021 +3489ab0,19400015 +3489ab4,a0400000 +3489ab8,2549ffff +3489abc,894821 +3489ac0,806025 +3489ac4,3c0b6666 +3489ac8,256b6667 +3489acc,10b0018 +3489ad0,1810 +3489ad4,31883 +3489ad8,817c3 +3489adc,621823 +3489ae0,31080 +3489ae4,431021 +3489ae8,21040 +3489aec,1021023 +3489af0,24420030 +3489af4,a1220000 +3489af8,604025 +3489afc,1201025 +3489b00,144cfff2 +3489b04,2529ffff +3489b08,8a1021 +3489b0c,2403002f +3489b10,a0430000 +3489b14,147102a +3489b18,10400012 +3489b1c,873821 +3489b20,8a5021 +3489b24,3c086666 +3489b28,25086667 +3489b2c,a80018 +3489b30,1810 +3489b34,31883 +3489b38,517c3 +3489b3c,621823 +3489b40,31080 +3489b44,431021 +3489b48,21040 +3489b4c,a21023 +3489b50,24420030 +3489b54,a0e20000 +3489b58,24e7ffff +3489b5c,14eafff3 +3489b60,602825 3489b64,8e020008 3489b68,24430008 3489b6c,ae030008 -3489b70,3c03e700 +3489b70,3c03de00 3489b74,ac430000 -3489b78,ac400004 -3489b7c,8e020008 -3489b80,24430008 -3489b84,ae030008 -3489b88,3c03fc11 -3489b8c,34639623 -3489b90,ac430000 -3489b94,3c03ff2f -3489b98,3463ffff -3489b9c,ac430004 -3489ba0,8e030008 -3489ba4,24620008 -3489ba8,ae020008 -3489bac,3c16fa00 -3489bb0,ac760000 -3489bb4,3c02dad3 -3489bb8,24420b00 -3489bbc,2621025 -3489bc0,ac620004 -3489bc4,c102559 -3489bc8,2402825 -3489bcc,3c028041 -3489bd0,9442a41c -3489bd4,540018 -3489bd8,a012 -3489bdc,292a021 -3489be0,8e020008 -3489be4,24430008 -3489be8,ae030008 -3489bec,ac560000 -3489bf0,3c03f4ec -3489bf4,24633000 -3489bf8,2639825 -3489bfc,ac530004 -3489c00,3c028041 -3489c04,8c46b59c -3489c08,63042 -3489c0c,24070001 -3489c10,30c6000f -3489c14,3c128041 -3489c18,2645a3f8 -3489c1c,c101bd7 -3489c20,2002025 -3489c24,2645a3f8 -3489c28,94a20006 -3489c2c,afa20018 -3489c30,94a20004 -3489c34,afa20014 -3489c38,afb10010 -3489c3c,2803825 -3489c40,3025 -3489c44,c101c3f -3489c48,2002025 -3489c4c,c102583 -3489c50,2002025 -3489c54,8e020008 -3489c58,24430008 -3489c5c,ae030008 -3489c60,3c03e900 -3489c64,ac430000 -3489c68,ac400004 -3489c6c,8e020008 -3489c70,24430008 -3489c74,ae030008 -3489c78,3c03df00 -3489c7c,ac430000 -3489c80,ac400004 -3489c84,10000002 -3489c88,2a0e825 -3489c8c,2a0e825 -3489c90,3c0e825 -3489c94,8fbf0044 -3489c98,8fbe0040 -3489c9c,8fb6003c -3489ca0,8fb50038 -3489ca4,8fb40034 -3489ca8,8fb30030 -3489cac,8fb2002c -3489cb0,8fb10028 -3489cb4,8fb00024 -3489cb8,3e00008 -3489cbc,27bd0048 -3489cc0,3c028040 -3489cc4,a0403054 -3489cc8,3c028040 -3489ccc,3e00008 -3489cd0,ac403058 -3489cd4,3c038041 -3489cd8,3c028050 -3489cdc,24420000 -3489ce0,3e00008 -3489ce4,ac62b5a0 -3489ce8,3082000f -3489cec,10400009 -3489cf0,3c038041 -3489cf4,417c3 -3489cf8,21702 -3489cfc,821821 -3489d00,3063000f -3489d04,431023 -3489d08,24420010 -3489d0c,822021 +3489b78,3c038041 +3489b7c,2463a488 +3489b80,ac430004 +3489b84,8e020008 +3489b88,24430008 +3489b8c,ae030008 +3489b90,3c03e700 +3489b94,ac430000 +3489b98,ac400004 +3489b9c,8e020008 +3489ba0,24430008 +3489ba4,ae030008 +3489ba8,3c03fc11 +3489bac,34639623 +3489bb0,ac430000 +3489bb4,3c03ff2f +3489bb8,3463ffff +3489bbc,ac430004 +3489bc0,8e030008 +3489bc4,24620008 +3489bc8,ae020008 +3489bcc,3c16fa00 +3489bd0,ac760000 +3489bd4,3c02dad3 +3489bd8,24420b00 +3489bdc,2621025 +3489be0,ac620004 +3489be4,c102561 +3489be8,2402825 +3489bec,3c028041 +3489bf0,9442a43c +3489bf4,540018 +3489bf8,a012 +3489bfc,292a021 +3489c00,8e020008 +3489c04,24430008 +3489c08,ae030008 +3489c0c,ac560000 +3489c10,3c03f4ec +3489c14,24633000 +3489c18,2639825 +3489c1c,ac530004 +3489c20,3c028041 +3489c24,8c46b5bc +3489c28,63042 +3489c2c,24070001 +3489c30,30c6000f +3489c34,3c128041 +3489c38,2645a418 +3489c3c,c101bdf +3489c40,2002025 +3489c44,2645a418 +3489c48,94a20006 +3489c4c,afa20018 +3489c50,94a20004 +3489c54,afa20014 +3489c58,afb10010 +3489c5c,2803825 +3489c60,3025 +3489c64,c101c47 +3489c68,2002025 +3489c6c,c10258b +3489c70,2002025 +3489c74,8e020008 +3489c78,24430008 +3489c7c,ae030008 +3489c80,3c03e900 +3489c84,ac430000 +3489c88,ac400004 +3489c8c,8e020008 +3489c90,24430008 +3489c94,ae030008 +3489c98,3c03df00 +3489c9c,ac430000 +3489ca0,ac400004 +3489ca4,10000002 +3489ca8,2a0e825 +3489cac,2a0e825 +3489cb0,3c0e825 +3489cb4,8fbf0044 +3489cb8,8fbe0040 +3489cbc,8fb6003c +3489cc0,8fb50038 +3489cc4,8fb40034 +3489cc8,8fb30030 +3489ccc,8fb2002c +3489cd0,8fb10028 +3489cd4,8fb00024 +3489cd8,3e00008 +3489cdc,27bd0048 +3489ce0,3c028040 +3489ce4,a040306c +3489ce8,3c028040 +3489cec,3e00008 +3489cf0,ac403070 +3489cf4,3c038041 +3489cf8,3c028050 +3489cfc,24420000 +3489d00,3e00008 +3489d04,ac62b5c0 +3489d08,3082000f +3489d0c,10400009 3489d10,3c038041 -3489d14,8c62b5a0 -3489d18,442021 -3489d1c,3e00008 -3489d20,ac64b5a0 -3489d24,27bdffe8 -3489d28,afbf0014 -3489d2c,afb00010 -3489d30,808025 -3489d34,c10273a -3489d38,8c840008 -3489d3c,402025 -3489d40,ae020000 -3489d44,8e060008 -3489d48,3c028000 -3489d4c,24420df0 -3489d50,40f809 -3489d54,8e050004 -3489d58,8fbf0014 -3489d5c,8fb00010 -3489d60,3e00008 -3489d64,27bd0018 -3489d68,3c02800f -3489d6c,a0401640 -3489d70,3c028041 -3489d74,a040b5a4 -3489d78,3c028011 -3489d7c,3442a5d0 -3489d80,8c420004 -3489d84,14400086 -3489d88,3c028011 -3489d8c,3442a5d0 -3489d90,8c421360 -3489d94,2c420004 -3489d98,10400081 -3489d9c,3c028011 -3489da0,3442a5d0 -3489da4,8c420000 -3489da8,240301fd -3489dac,14430005 -3489db0,3c038011 -3489db4,3c02800f -3489db8,24030001 -3489dbc,3e00008 -3489dc0,a0431640 -3489dc4,3463a5d0 -3489dc8,94630ed6 -3489dcc,30630100 -3489dd0,1460000a -3489dd4,3c038011 -3489dd8,24030157 -3489ddc,10430003 -3489de0,240301f9 -3489de4,14430005 -3489de8,3c038011 -3489dec,3c02800f -3489df0,24030002 -3489df4,3e00008 -3489df8,a0431640 -3489dfc,3463a5d0 -3489e00,94630edc -3489e04,30640400 -3489e08,54800016 -3489e0c,3c028011 -3489e10,240404da -3489e14,10440005 -3489e18,2404ffbf -3489e1c,441024 -3489e20,2404019d -3489e24,14440005 -3489e28,3c02801c -3489e2c,3c02800f -3489e30,24030003 -3489e34,3e00008 -3489e38,a0431640 -3489e3c,344284a0 -3489e40,944200a4 -3489e44,2442ffa8 -3489e48,2c420002 -3489e4c,10400005 -3489e50,3c028011 -3489e54,3c02800f -3489e58,24030003 -3489e5c,3e00008 -3489e60,a0431640 -3489e64,3442a5d0 -3489e68,8c4200a4 -3489e6c,30420007 -3489e70,24040007 -3489e74,5444001f -3489e78,30630200 -3489e7c,3c028011 -3489e80,3442a5d0 -3489e84,8c42037c -3489e88,30420002 -3489e8c,54400019 -3489e90,30630200 -3489e94,3c02801c -3489e98,344284a0 -3489e9c,944200a4 -3489ea0,2442ffae -3489ea4,2c420002 -3489ea8,50400012 -3489eac,30630200 -3489eb0,3c028041 -3489eb4,24040002 -3489eb8,a044b5a4 -3489ebc,3c028011 -3489ec0,3442a5d0 -3489ec4,8c420000 -3489ec8,24040191 -3489ecc,10440008 -3489ed0,24040205 -3489ed4,10440006 -3489ed8,240400db -3489edc,10440004 -3489ee0,3c02800f -3489ee4,24030005 -3489ee8,3e00008 -3489eec,a0431640 -3489ef0,30630200 -3489ef4,1460002a -3489ef8,3c02801c -3489efc,344284a0 -3489f00,3c030001 -3489f04,431021 -3489f08,84431e1a -3489f0c,240204d6 -3489f10,14620005 -3489f14,3c02801c -3489f18,3c02800f -3489f1c,24030002 -3489f20,3e00008 -3489f24,a0431640 -3489f28,344284a0 -3489f2c,944200a4 -3489f30,2c430054 -3489f34,50600006 -3489f38,2442ffa0 -3489f3c,2c420052 -3489f40,14400017 -3489f44,3c028041 -3489f48,10000006 -3489f4c,9042b5a4 -3489f50,3042ffff -3489f54,2c420002 -3489f58,10400011 -3489f5c,3c028041 -3489f60,9042b5a4 -3489f64,14400005 -3489f68,3c028011 -3489f6c,3c028041 -3489f70,24030001 -3489f74,a043b5a4 -3489f78,3c028011 -3489f7c,3442a5d0 -3489f80,8c420000 -3489f84,240300db -3489f88,10430005 -3489f8c,24030195 -3489f90,10430003 -3489f94,3c02800f -3489f98,24030002 -3489f9c,a0431640 -3489fa0,3e00008 -3489fa8,33c2 -3489fac,664399c4 -3489fb0,cc45ffc6 -3489fb4,ff47ffc8 -3489fb8,ff49e0ca -3489fbc,c24ba3cc -3489fc0,854d660d -3489fc4,440f2200 -3489fc8,85d1a352 -3489fcc,c2d3e045 -3489fd0,1010101 -3489fd4,1010101 -3489fd8,1010101 -3489fdc,1010101 -3489fe0,1010101 -3489ffc,1010000 -348a004,1010101 -348a008,1000101 -348a00c,10101 -348a010,10000 -348a014,2b242525 -348a018,26262626 -348a01c,27272727 -348a020,27272727 -348a024,500080d -348a028,1051508 -348a02c,d01052a -348a030,80d0127 -348a034,f080b01 -348a038,4d510b02 -348a040,97ff6350 -348a044,45ff5028 -348a048,57456397 -348a04c,ff5e45ff -348a050,9f006545 -348a054,ff63ff6c -348a058,45fff063 -348a05c,7345ffff -348a060,ff503aff -348a064,ffff573a -348a068,ffffff5e -348a06c,3affffff -348a070,653affff -348a074,ff6c3aff -348a078,ffff733a -348a07c,5a0c00 -348a080,720c0096 -348a084,c009618 -348a088,1652a00 -348a08c,4e2a005a -348a090,2a000000 -348a094,c004e00 -348a098,c015a00 -348a09c,c026600 -348a0a0,c037200 -348a0a4,c047e00 -348a0a8,c058a00 -348a0ac,c064e0c -348a0b0,75a0c -348a0b4,c09660c -348a0b8,a720c -348a0bc,c0c7e0c -348a0c0,c0d8a0c -348a0c4,c0e4e18 -348a0c8,c0f5a18 -348a0cc,c106618 -348a0d0,c117218 -348a0d4,c127e18 -348a0d8,c138a18 -348a0dc,ffff -348a0e0,ffff -348a0e4,ffff -348a0e8,ffff -348a0ec,ffff -348a0f0,ffff -348a0f4,ffff -348a0f8,ffff +3489d14,417c3 +3489d18,21702 +3489d1c,821821 +3489d20,3063000f +3489d24,431023 +3489d28,24420010 +3489d2c,822021 +3489d30,3c038041 +3489d34,8c62b5c0 +3489d38,442021 +3489d3c,3e00008 +3489d40,ac64b5c0 +3489d44,27bdffe8 +3489d48,afbf0014 +3489d4c,afb00010 +3489d50,808025 +3489d54,c102742 +3489d58,8c840008 +3489d5c,402025 +3489d60,ae020000 +3489d64,8e060008 +3489d68,3c028000 +3489d6c,24420df0 +3489d70,40f809 +3489d74,8e050004 +3489d78,8fbf0014 +3489d7c,8fb00010 +3489d80,3e00008 +3489d84,27bd0018 +3489d88,3c02800f +3489d8c,a0401640 +3489d90,3c028041 +3489d94,a040b5c4 +3489d98,3c028011 +3489d9c,3442a5d0 +3489da0,8c420004 +3489da4,14400086 +3489da8,3c028011 +3489dac,3442a5d0 +3489db0,8c421360 +3489db4,2c420004 +3489db8,10400081 +3489dbc,3c028011 +3489dc0,3442a5d0 +3489dc4,8c420000 +3489dc8,240301fd +3489dcc,14430005 +3489dd0,3c038011 +3489dd4,3c02800f +3489dd8,24030001 +3489ddc,3e00008 +3489de0,a0431640 +3489de4,3463a5d0 +3489de8,94630ed6 +3489dec,30630100 +3489df0,1460000a +3489df4,3c038011 +3489df8,24030157 +3489dfc,10430003 +3489e00,240301f9 +3489e04,14430005 +3489e08,3c038011 +3489e0c,3c02800f +3489e10,24030002 +3489e14,3e00008 +3489e18,a0431640 +3489e1c,3463a5d0 +3489e20,94630edc +3489e24,30640400 +3489e28,54800016 +3489e2c,3c028011 +3489e30,240404da +3489e34,10440005 +3489e38,2404ffbf +3489e3c,441024 +3489e40,2404019d +3489e44,14440005 +3489e48,3c02801c +3489e4c,3c02800f +3489e50,24030003 +3489e54,3e00008 +3489e58,a0431640 +3489e5c,344284a0 +3489e60,944200a4 +3489e64,2442ffa8 +3489e68,2c420002 +3489e6c,10400005 +3489e70,3c028011 +3489e74,3c02800f +3489e78,24030003 +3489e7c,3e00008 +3489e80,a0431640 +3489e84,3442a5d0 +3489e88,8c4200a4 +3489e8c,30420007 +3489e90,24040007 +3489e94,5444001f +3489e98,30630200 +3489e9c,3c028011 +3489ea0,3442a5d0 +3489ea4,8c42037c +3489ea8,30420002 +3489eac,54400019 +3489eb0,30630200 +3489eb4,3c02801c +3489eb8,344284a0 +3489ebc,944200a4 +3489ec0,2442ffae +3489ec4,2c420002 +3489ec8,50400012 +3489ecc,30630200 +3489ed0,3c028041 +3489ed4,24040002 +3489ed8,a044b5c4 +3489edc,3c028011 +3489ee0,3442a5d0 +3489ee4,8c420000 +3489ee8,24040191 +3489eec,10440008 +3489ef0,24040205 +3489ef4,10440006 +3489ef8,240400db +3489efc,10440004 +3489f00,3c02800f +3489f04,24030005 +3489f08,3e00008 +3489f0c,a0431640 +3489f10,30630200 +3489f14,1460002a +3489f18,3c02801c +3489f1c,344284a0 +3489f20,3c030001 +3489f24,431021 +3489f28,84431e1a +3489f2c,240204d6 +3489f30,14620005 +3489f34,3c02801c +3489f38,3c02800f +3489f3c,24030002 +3489f40,3e00008 +3489f44,a0431640 +3489f48,344284a0 +3489f4c,944200a4 +3489f50,2c430054 +3489f54,50600006 +3489f58,2442ffa0 +3489f5c,2c420052 +3489f60,14400017 +3489f64,3c028041 +3489f68,10000006 +3489f6c,9042b5c4 +3489f70,3042ffff +3489f74,2c420002 +3489f78,10400011 +3489f7c,3c028041 +3489f80,9042b5c4 +3489f84,14400005 +3489f88,3c028011 +3489f8c,3c028041 +3489f90,24030001 +3489f94,a043b5c4 +3489f98,3c028011 +3489f9c,3442a5d0 +3489fa0,8c420000 +3489fa4,240300db +3489fa8,10430005 +3489fac,24030195 +3489fb0,10430003 +3489fb4,3c02800f +3489fb8,24030002 +3489fbc,a0431640 +3489fc0,3e00008 +3489fc8,33c2 +3489fcc,664399c4 +3489fd0,cc45ffc6 +3489fd4,ff47ffc8 +3489fd8,ff49e0ca +3489fdc,c24ba3cc +3489fe0,854d660d +3489fe4,440f2200 +3489fe8,85d1a352 +3489fec,c2d3e045 +3489ff0,1010101 +3489ff4,1010101 +3489ff8,1010101 +3489ffc,1010101 +348a000,1010101 +348a01c,1010000 +348a024,1010101 +348a028,1000101 +348a02c,10101 +348a030,10000 +348a034,2b242525 +348a038,26262626 +348a03c,27272727 +348a040,27272727 +348a044,500080d +348a048,1051508 +348a04c,d01052a +348a050,80d0127 +348a054,f080b01 +348a058,4d510b02 +348a060,97ff6350 +348a064,45ff5028 +348a068,57456397 +348a06c,ff5e45ff +348a070,9f006545 +348a074,ff63ff6c +348a078,45fff063 +348a07c,7345ffff +348a080,ff503aff +348a084,ffff573a +348a088,ffffff5e +348a08c,3affffff +348a090,653affff +348a094,ff6c3aff +348a098,ffff733a +348a09c,5a0c00 +348a0a0,720c0096 +348a0a4,c009618 +348a0a8,1652a00 +348a0ac,4e2a005a +348a0b0,2a000000 +348a0b4,c004e00 +348a0b8,c015a00 +348a0bc,c026600 +348a0c0,c037200 +348a0c4,c047e00 +348a0c8,c058a00 +348a0cc,c064e0c +348a0d0,75a0c +348a0d4,c09660c +348a0d8,a720c +348a0dc,c0c7e0c +348a0e0,c0d8a0c +348a0e4,c0e4e18 +348a0e8,c0f5a18 +348a0ec,c106618 +348a0f0,c117218 +348a0f4,c127e18 +348a0f8,c138a18 348a0fc,ffff 348a100,ffff 348a104,ffff 348a108,ffff 348a10c,ffff 348a110,ffff -348a114,c3b7e2a -348a118,c3c8a2a -348a11c,c3d962a +348a114,ffff +348a118,ffff +348a11c,ffff 348a120,ffff -348a124,c3e7e36 -348a128,b3f8b37 -348a12c,b409737 +348a124,ffff +348a128,ffff +348a12c,ffff 348a130,ffff -348a134,c417e42 -348a138,c428a42 -348a13c,c439642 +348a134,c3b7e2a +348a138,c3c8a2a +348a13c,c3d962a 348a140,ffff -348a144,c447e4f -348a148,c458a4f -348a14c,c46964f +348a144,c3e7e36 +348a148,b3f8b37 +348a14c,b409737 348a150,ffff -348a154,c149600 -348a158,ffff -348a15c,2c061b31 -348a160,2c072931 -348a164,2c083731 -348a168,2a096f51 -348a16c,2c0a722a +348a154,c417e42 +348a158,c428a42 +348a15c,c439642 +348a160,ffff +348a164,c447e4f +348a168,c458a4f +348a16c,c46964f 348a170,ffff -348a174,2c00370a -348a178,2c01371a -348a17c,2c022922 -348a180,2c031b1a -348a184,2c041b0a -348a188,2c052902 -348a18c,ffff +348a174,c149600 +348a178,ffff +348a17c,2c061b31 +348a180,2c072931 +348a184,2c083731 +348a188,2a096f51 +348a18c,2c0a722a 348a190,ffff -348a194,8040a438 -348a198,8040a428 -348a19c,8040a3b8 -348a1a0,c8ff6482 -348a1a4,82ffff64 -348a1a8,64ff5aff -348a1ac,bd1400 -348a1b0,aa0200 -348a1b4,bd1300 -348a1b8,15c6300 -348a1bc,de2f00 -348a1c0,e01010e0 -348a1c4,e01010e0 -348a1c8,1010e0e0 -348a1cc,1010e0e0 -348a1d0,10e0e010 -348a1d4,10000000 -348a1d8,4d510000 -348a1dc,4e6f726d -348a1e0,616c0000 -348a1e4,bdcccccd -348a1e8,3dcccccd -348a1ec,43510000 -348a1f0,41100000 -348a1f4,4f000000 -348a1f8,42080000 -348a1fc,c20c0000 -348a200,420c0000 -348a204,3f800000 -348a208,3f000000 -348a20c,41c80000 -348a210,3fa00000 -348a214,40000000 -348a218,40200000 -348a21c,3f800000 -348a220,4f000000 -348a228,41f00000 -348a230,3ff80000 -348a238,406e0000 -348a240,3ff00000 -348a248,40080000 -348a250,80409fa8 -348a254,10203 -348a258,4050607 -348a25c,ffffffff -348a260,ffff0000 -348a264,ff00ff -348a268,3c000064 -348a26c,ffff8200 -348a270,c832ffc8 -348a274,c8000000 -348a278,104465 -348a27c,6b750000 -348a284,110446f -348a288,646f6e67 -348a28c,6f000000 -348a290,2104a61 -348a294,62750000 -348a29c,3d0466f -348a2a0,72657374 -348a2a8,4d04669 -348a2ac,72650000 -348a2b4,5d05761 -348a2b8,74657200 -348a2c0,7d05368 -348a2c4,61646f77 -348a2cc,6d05370 -348a2d0,69726974 -348a2d8,890426f -348a2dc,74570000 -348a2e4,9104963 -348a2e8,65000000 -348a2f0,ca04869 -348a2f4,64656f75 -348a2f8,74000000 -348a2fc,b804754 -348a300,47000000 -348a308,dc04761 -348a30c,6e6f6e00 -348a314,2 -348a31c,3f800000 -348a328,1 -348a32c,30006 -348a330,70009 -348a334,b000e -348a338,f0010 -348a33c,110019 -348a340,1a002b -348a344,2c002e -348a348,300032 -348a34c,35003c -348a350,400041 -348a354,460051 -348a358,540109 -348a35c,10b010c -348a360,10e010f -348a364,1100113 -348a36c,1 -348a370,1 -348a374,2 -348a378,1 -348a37c,2 -348a380,2 -348a384,3 -348a388,1 -348a38c,2 -348a390,2 -348a394,3 -348a398,2 -348a39c,3 -348a3a0,3 -348a3a4,4 -348a3ac,100010 -348a3b0,a0301 -348a3b4,1000000 -348a3bc,100010 -348a3c0,20002 -348a3c4,2000000 -348a3cc,80008 +348a194,2c00370a +348a198,2c01371a +348a19c,2c022922 +348a1a0,2c031b1a +348a1a4,2c041b0a +348a1a8,2c052902 +348a1ac,ffff +348a1b0,ffff +348a1b4,8040a458 +348a1b8,8040a448 +348a1bc,8040a3d8 +348a1c0,c8ff6482 +348a1c4,82ffff64 +348a1c8,64ff5aff +348a1cc,bd1400 +348a1d0,aa0200 +348a1d4,bd1300 +348a1d8,15c6300 +348a1dc,de2f00 +348a1e0,e01010e0 +348a1e4,e01010e0 +348a1e8,1010e0e0 +348a1ec,1010e0e0 +348a1f0,10e0e010 +348a1f4,10000000 +348a1f8,4d510000 +348a1fc,4e6f726d +348a200,616c0000 +348a204,bdcccccd +348a208,3dcccccd +348a20c,43510000 +348a210,41100000 +348a214,4f000000 +348a218,42080000 +348a21c,c20c0000 +348a220,420c0000 +348a224,3f800000 +348a228,3f000000 +348a22c,41c80000 +348a230,3fa00000 +348a234,40000000 +348a238,40200000 +348a23c,3f800000 +348a240,4f000000 +348a248,41f00000 +348a250,3ff80000 +348a258,406e0000 +348a260,3ff00000 +348a268,40080000 +348a270,80409fc8 +348a274,10203 +348a278,4050607 +348a27c,ffffffff +348a280,ffff0000 +348a284,ff00ff +348a288,3c000064 +348a28c,ffff8200 +348a290,c832ffc8 +348a294,c8000000 +348a298,104465 +348a29c,6b750000 +348a2a4,110446f +348a2a8,646f6e67 +348a2ac,6f000000 +348a2b0,2104a61 +348a2b4,62750000 +348a2bc,3d0466f +348a2c0,72657374 +348a2c8,4d04669 +348a2cc,72650000 +348a2d4,5d05761 +348a2d8,74657200 +348a2e0,7d05368 +348a2e4,61646f77 +348a2ec,6d05370 +348a2f0,69726974 +348a2f8,890426f +348a2fc,74570000 +348a304,9104963 +348a308,65000000 +348a310,ca04869 +348a314,64656f75 +348a318,74000000 +348a31c,b804754 +348a320,47000000 +348a328,dc04761 +348a32c,6e6f6e00 +348a334,2 +348a33c,3f800000 +348a348,1 +348a34c,30006 +348a350,70009 +348a354,b000e +348a358,f0010 +348a35c,110019 +348a360,1a002b +348a364,2c002e +348a368,300032 +348a36c,35003c +348a370,400041 +348a374,460051 +348a378,540109 +348a37c,10b010c +348a380,10e010f +348a384,1100113 +348a38c,1 +348a390,1 +348a394,2 +348a398,1 +348a39c,2 +348a3a0,2 +348a3a4,3 +348a3a8,1 +348a3ac,2 +348a3b0,2 +348a3b4,3 +348a3b8,2 +348a3bc,3 +348a3c0,3 +348a3c4,4 +348a3cc,100010 348a3d0,a0301 348a3d4,1000000 348a3dc,100010 -348a3e0,30301 -348a3e4,1000000 -348a3ec,100018 -348a3f0,10301 +348a3e0,20002 +348a3e4,2000000 +348a3ec,80008 +348a3f0,a0301 348a3f4,1000000 348a3fc,100010 -348a400,100301 +348a400,30301 348a404,1000000 -348a40c,200020 -348a410,10302 -348a414,2000000 -348a41c,8000e -348a420,5f0301 +348a40c,100018 +348a410,10301 +348a414,1000000 +348a41c,100010 +348a420,100301 348a424,1000000 -348a42c,180018 -348a430,140003 -348a434,4000000 -348a43c,200020 -348a440,5a0003 -348a444,4000000 -348a44c,100010 -348a450,60301 -348a454,1000000 -348a45c,100010 -348a460,30003 +348a42c,200020 +348a430,10302 +348a434,2000000 +348a43c,8000e +348a440,5f0301 +348a444,1000000 +348a44c,180018 +348a450,140003 +348a454,4000000 +348a45c,200020 +348a460,5a0003 348a464,4000000 -348a468,e7000000 -348a470,d9000000 -348a478,ed000000 -348a47c,5003c0 -348a480,ef002cf0 -348a484,504244 -348a488,df000000 -348a4a4,4d8e0032 -348a4a8,ce2001 -348a4ac,80407de0 -348a4b0,80407870 -348a4b4,ffffffff -348a4b8,4d8c0034 -348a4bc,bb1201 -348a4c0,80407c18 -348a4c4,80407870 -348a4c8,ffffffff -348a4cc,4d090033 -348a4d0,d92801 -348a4d4,80407c18 -348a4d8,80407870 -348a4dc,ffffffff -348a4e0,53030031 -348a4e4,e93500 -348a4e8,80407c18 -348a4ec,80407870 -348a4f0,ffffffff -348a4f4,53060030 -348a4f8,e73300 -348a4fc,80407c18 -348a500,80407870 -348a504,ffffffff -348a508,530e0035 -348a50c,e83400 -348a510,80407c18 -348a514,80407870 -348a518,ffffffff -348a51c,4d000037 -348a520,c71b01 -348a524,80407c18 -348a528,80407870 -348a52c,ffffffff -348a530,530a0036 -348a534,dd2d00 -348a538,80407c18 -348a53c,80407870 -348a540,ffffffff -348a544,530b004f -348a548,dd2e00 -348a54c,80407c18 -348a550,80407870 -348a554,ffffffff -348a558,530f0039 -348a55c,ea3600 -348a560,80407c18 -348a564,80407870 -348a568,ffffffff -348a56c,53230069 -348a570,ef3b00 -348a574,80407c18 -348a578,80407ad4 -348a57c,ffffffff -348a580,5308003a -348a584,de2f00 -348a588,80407c18 -348a58c,80407870 -348a590,ffffffff -348a594,53110038 -348a598,f64100 -348a59c,80407c18 -348a5a0,80407870 -348a5a4,ffffffff -348a5a8,532f0002 -348a5ac,1095e00 -348a5b0,80407c18 -348a5b4,80407870 -348a5b8,ffffffff -348a5bc,53140042 -348a5c0,c60100 -348a5c4,80407c18 -348a5c8,80407870 -348a5cc,ffffffff -348a5d0,53150043 -348a5d4,eb3800 -348a5d8,80407c18 -348a5dc,80407870 -348a5e0,ffffffff -348a5e4,53160044 -348a5e8,eb3700 -348a5ec,80407c18 -348a5f0,80407870 -348a5f4,ffffffff -348a5f8,53170045 -348a5fc,eb3900 -348a600,80407c18 -348a604,80407870 -348a608,ffffffff -348a60c,53180046 -348a610,c60100 -348a614,80407c18 -348a618,80407870 -348a61c,ffffffff -348a620,531a0098 -348a624,df3000 -348a628,80407c18 -348a62c,80407870 -348a630,ffffffff -348a634,531b0099 -348a638,10b4500 -348a63c,80407e20 -348a640,80407870 -348a644,ffffffff -348a648,53100048 -348a64c,f33e01 -348a650,80407c18 -348a654,80407870 -348a658,ffffffff -348a65c,53250010 -348a660,1364f00 -348a664,80407c18 -348a668,80407870 -348a66c,ffffffff -348a670,53260011 -348a674,1353200 -348a678,80407c18 -348a67c,80407870 -348a680,ffffffff -348a684,5322000b -348a688,1094400 -348a68c,80407c18 -348a690,80407870 -348a694,ffffffff -348a698,53240012 -348a69c,1343100 -348a6a0,80407c18 -348a6a4,80407870 -348a6a8,ffffffff -348a6ac,53270013 -348a6b0,1375000 -348a6b4,80407c18 -348a6b8,80407870 -348a6bc,ffffffff -348a6c0,532b0017 -348a6c4,1385100 -348a6c8,80407c18 -348a6cc,80407870 -348a6d0,ffffffff -348a6d4,532d9001 -348a6d8,da2900 -348a6dc,80407c18 -348a6e0,80407870 -348a6e4,ffffffff -348a6e8,532e000b -348a6ec,1094400 -348a6f0,80407c18 -348a6f4,80407870 -348a6f8,ffffffff -348a6fc,53300003 -348a700,1415400 -348a704,80407c18 -348a708,80407870 -348a70c,ffffffff -348a710,53310004 -348a714,1405300 -348a718,80407c18 -348a71c,80407870 -348a720,ffffffff -348a724,53320005 -348a728,f54000 -348a72c,80407c18 -348a730,80407870 -348a734,ffffffff -348a738,53330008 -348a73c,1435600 -348a740,80407c18 -348a744,80407870 -348a748,ffffffff -348a74c,53340009 -348a750,1465700 -348a754,80407c18 -348a758,80407870 -348a75c,ffffffff -348a760,5335000d -348a764,1495a00 -348a768,80407c18 -348a76c,80407870 -348a770,ffffffff -348a774,5336000e -348a778,13f5200 -348a77c,80407c18 -348a780,80407870 -348a784,ffffffff -348a788,5337000a -348a78c,1425500 -348a790,80407c18 -348a794,80407870 -348a798,ffffffff -348a79c,533b00a4 -348a7a0,18d7400 -348a7a4,80407c18 -348a7a8,80407870 -348a7ac,ffffffff -348a7b0,533d004b -348a7b4,f84300 -348a7b8,80407c18 -348a7bc,80407870 -348a7c0,ffffffff -348a7c4,533e004c -348a7c8,cb1d01 -348a7cc,80407c18 -348a7d0,80407870 -348a7d4,ffffffff -348a7d8,533f004d -348a7dc,dc2c01 -348a7e0,80407c18 -348a7e4,80407870 -348a7e8,ffffffff -348a7ec,5340004e -348a7f0,ee3a00 -348a7f4,80407c18 -348a7f8,80407870 -348a7fc,ffffffff -348a800,53420050 -348a804,f23c00 -348a808,80407c18 -348a80c,80407870 -348a810,ffffffff -348a814,53430051 -348a818,f23d00 -348a81c,80407c18 -348a820,80407870 -348a824,ffffffff -348a828,53450053 -348a82c,1184700 -348a830,80407c18 -348a834,80407870 -348a838,ffffffff -348a83c,53460054 -348a840,1575f00 -348a844,80407c18 -348a848,80407870 -348a84c,ffffffff -348a850,534b0056 -348a854,be1600 -348a858,80407c18 -348a85c,80407870 -348a860,ffffffff -348a864,534c0057 -348a868,be1700 -348a86c,80407c18 -348a870,80407870 -348a874,ffffffff -348a878,534d0058 -348a87c,bf1800 -348a880,80407c18 -348a884,80407870 -348a888,ffffffff -348a88c,534e0059 -348a890,bf1900 -348a894,80407c18 -348a898,80407870 -348a89c,ffffffff -348a8a0,534f005a -348a8a4,bf1a00 -348a8a8,80407c18 -348a8ac,80407870 -348a8b0,ffffffff -348a8b4,5351005b -348a8b8,12d4900 -348a8bc,80407c18 -348a8c0,80407870 -348a8c4,ffffffff -348a8c8,5352005c -348a8cc,12d4a00 -348a8d0,80407c18 -348a8d4,80407870 -348a8d8,ffffffff -348a8dc,535300cd -348a8e0,db2a00 -348a8e4,80407c18 -348a8e8,80407870 -348a8ec,ffffffff -348a8f0,535400ce -348a8f4,db2b00 -348a8f8,80407c18 -348a8fc,80407870 -348a900,ffffffff -348a904,536f0068 -348a908,c82100 -348a90c,80407c18 -348a910,80407870 -348a914,ffffffff -348a918,5370007b -348a91c,d72400 -348a920,80407c18 -348a924,80407870 -348a928,ffffffff -348a92c,5341004a -348a930,10e4600 -348a934,80407c18 -348a938,80407a50 -348a93c,ffffffff -348a940,4d5800dc -348a944,1194801 -348a948,80407dfc -348a94c,80407870 -348a950,ffffffff -348a954,3d7200c6 -348a958,bd1301 -348a95c,80407c18 -348a960,80407878 -348a964,ffffffff -348a968,3e7a00c2 -348a96c,bd1401 -348a970,80407c18 -348a974,80407878 -348a978,ffffffff -348a97c,537400c7 -348a980,b90a02 -348a984,80407c18 -348a988,80407870 -348a98c,ffffffff -348a990,53750067 -348a994,b80b01 -348a998,80407c18 -348a99c,80407870 -348a9a0,ffffffff -348a9a4,53760066 -348a9a8,c81c01 -348a9ac,80407c18 -348a9b0,80407870 -348a9b4,ffffffff -348a9b8,53770060 -348a9bc,aa0203 -348a9c0,80407c18 -348a9c4,80407870 -348a9c8,ffffffff -348a9cc,53780052 -348a9d0,cd1e01 -348a9d4,80407c18 -348a9d8,80407870 -348a9dc,ffffffff -348a9e0,53790052 -348a9e4,cd1f01 -348a9e8,80407c18 -348a9ec,80407870 -348a9f0,ffffffff -348a9f4,5356005e -348a9f8,d12200 -348a9fc,80407c18 -348aa00,80407aa8 -348aa04,1ffff -348aa08,5357005f -348aa0c,d12300 -348aa10,80407c18 -348aa14,80407aa8 -348aa18,2ffff -348aa1c,5321009a -348aa20,da2900 -348aa24,80407c18 -348aa28,80407870 -348aa2c,ffffffff -348aa30,4d830055 -348aa34,b70901 -348aa38,80407c18 -348aa3c,80407870 -348aa40,ffffffff -348aa44,4d9200e6 -348aa48,d82501 -348aa4c,80407dc4 -348aa50,80407870 -348aa54,ffffffff -348aa58,4d9300e6 -348aa5c,d82601 -348aa60,80407dc4 -348aa64,80407870 -348aa68,ffffffff -348aa6c,4d9400e6 -348aa70,d82701 -348aa74,80407dc4 -348aa78,80407870 -348aa7c,ffffffff -348aa80,4d84006f -348aa84,17f6d01 -348aa88,80407c18 -348aa8c,80407870 -348aa90,ffffffff -348aa94,4d8500cc -348aa98,17f6e01 -348aa9c,80407c18 -348aaa0,80407870 -348aaa4,ffffffff -348aaa8,4d8600f0 -348aaac,17f6f01 -348aab0,80407c18 -348aab4,80407870 -348aab8,ffffffff -348aabc,3d7200c6 -348aac0,bd1301 -348aac4,80407c18 -348aac8,80407878 -348aacc,ffffffff -348aad0,53820098 -348aad4,df3000 -348aad8,80407c18 -348aadc,80407870 -348aae0,ffffffff -348aae4,53280014 -348aae8,1505b00 -348aaec,80407c18 -348aaf0,80407870 -348aaf4,ffffffff -348aaf8,53290015 -348aafc,1515c00 -348ab00,80407c18 -348ab04,80407870 -348ab08,ffffffff -348ab0c,532a0016 -348ab10,1525d00 -348ab14,80407c18 -348ab18,80407870 -348ab1c,ffffffff -348ab20,53500079 -348ab24,1475800 -348ab28,80407c18 -348ab2c,80407870 -348ab30,ffffffff -348ab34,4d8700f1 -348ab38,17f7101 -348ab3c,80407c18 -348ab40,80407870 -348ab44,ffffffff -348ab48,4d8800f2 -348ab4c,17f7201 -348ab50,80407c18 -348ab54,80407870 -348ab58,ffffffff -348ab5c,533d000c -348ab60,f84300 -348ab64,80407c18 -348ab68,80407978 -348ab6c,ffffffff -348ab70,53040070 -348ab74,1586000 -348ab78,80407c18 -348ab7c,80407870 -348ab80,ffffffff -348ab84,530c0071 -348ab88,1586100 -348ab8c,80407c18 -348ab90,80407870 -348ab94,ffffffff -348ab98,53120072 -348ab9c,1586200 -348aba0,80407c18 -348aba4,80407870 -348aba8,ffffffff -348abac,5b7100b4 -348abb0,15c6301 -348abb4,80407c18 -348abb8,80407870 -348abbc,ffffffff -348abc0,530500ad -348abc4,15d6400 -348abc8,80407c18 -348abcc,80407870 -348abd0,ffffffff -348abd4,530d00ae -348abd8,15d6500 -348abdc,80407c18 -348abe0,80407870 -348abe4,ffffffff -348abe8,531300af -348abec,15d6600 -348abf0,80407c18 -348abf4,80407870 -348abf8,ffffffff -348abfc,53470007 -348ac00,17b6c00 -348ac04,80407c18 -348ac08,80407870 -348ac0c,ffffffff -348ac10,53480007 -348ac14,17b6c00 -348ac18,80407c18 -348ac1c,80407870 -348ac20,ffffffff -348ac24,4d8a0037 -348ac28,c71b01 -348ac2c,80407c18 -348ac30,80407870 -348ac34,ffffffff -348ac38,4d8b0037 -348ac3c,c71b01 -348ac40,80407c18 -348ac44,80407870 -348ac48,ffffffff -348ac4c,4d8c0034 -348ac50,bb1201 -348ac54,80407c18 -348ac58,80407870 -348ac5c,ffffffff -348ac60,4d8d0034 -348ac64,bb1201 -348ac68,80407c18 -348ac6c,80407870 -348ac70,ffffffff -348ac74,4d020032 -348ac78,ce2001 -348ac7c,80407de0 -348ac80,80407870 -348ac84,ffffffff -348ac88,4d8f0032 -348ac8c,ce2001 -348ac90,80407de0 -348ac94,80407870 -348ac98,ffffffff -348ac9c,4d900032 -348aca0,ce2001 -348aca4,80407de0 -348aca8,80407870 -348acac,ffffffff -348acb0,4d910032 -348acb4,ce2001 -348acb8,80407de0 -348acbc,80407870 -348acc0,ffffffff -348acc4,4d9500dc -348acc8,1194801 -348accc,80407dfc -348acd0,80407870 -348acd4,ffffffff -348acd8,4d960033 -348acdc,d92801 -348ace0,80407c18 -348ace4,80407870 -348ace8,ffffffff -348acec,4d970033 -348acf0,d92801 -348acf4,80407c18 -348acf8,80407870 -348acfc,ffffffff -348ad00,53190047 -348ad04,f43f00 -348ad08,80407c18 -348ad0c,80407870 -348ad10,ffffffff -348ad14,531d007a -348ad18,1746800 -348ad1c,80407c18 -348ad20,80407870 -348ad24,ffffffff -348ad28,531c005d -348ad2c,1736700 -348ad30,80407c18 -348ad34,80407870 -348ad38,ffffffff -348ad3c,53200097 -348ad40,1766a00 -348ad44,80407c18 -348ad48,80407870 -348ad4c,ffffffff -348ad50,531e00f9 -348ad54,1767000 -348ad58,80407c18 -348ad5c,80407870 -348ad60,ffffffff -348ad64,537700f3 -348ad68,aa0201 -348ad6c,80407c18 -348ad70,80407870 -348ad74,ffffffff -348ad78,4d8400f4 -348ad7c,17f6d01 -348ad80,80407c18 -348ad84,80407870 -348ad88,ffffffff -348ad8c,4d8500f5 -348ad90,17f6e01 -348ad94,80407c18 -348ad98,80407870 -348ad9c,ffffffff -348ada0,4d8600f6 -348ada4,17f6f01 -348ada8,80407c18 -348adac,80407870 -348adb0,ffffffff -348adb4,4d8700f7 -348adb8,17f7101 -348adbc,80407c18 -348adc0,80407870 -348adc4,ffffffff -348adc8,537a00fa -348adcc,bd1401 -348add0,80407c18 -348add4,80407878 -348add8,ffffffff -348addc,53980090 -348ade0,c71b01 -348ade4,80407c18 -348ade8,80407870 -348adec,ffffffff -348adf0,53990091 -348adf4,c71b01 -348adf8,80407c18 -348adfc,80407870 -348ae00,ffffffff -348ae04,539a00a7 -348ae08,bb1201 -348ae0c,80407c18 -348ae10,80407870 -348ae14,ffffffff -348ae18,539b00a8 -348ae1c,bb1201 -348ae20,80407c18 -348ae24,80407870 -348ae28,ffffffff -348ae2c,5349006c -348ae30,17b7300 -348ae34,80407c18 -348ae38,80407870 -348ae3c,ffffffff -348ae40,53419002 -348ae48,80407c18 -348ae4c,80407a74 -348ae50,ffffffff -348ae90,ffffffff -348ae94,dd2d00 -348ae98,80407c20 -348ae9c,80407870 -348aea0,ffffffff -348aea4,ffffffff -348aea8,1475800 -348aeac,80407c34 -348aeb0,80407870 -348aeb4,ffffffff -348aeb8,ffffffff -348aebc,bf1800 -348aec0,80407c60 -348aec4,80407870 -348aec8,ffffffff -348aecc,ffffffff -348aed0,e93500 -348aed4,80407c8c -348aed8,80407870 -348aedc,ffffffff -348aee0,ffffffff -348aee4,e73300 -348aee8,80407cb4 -348aeec,80407870 -348aef0,ffffffff -348aef4,ffffffff -348aef8,d12200 -348aefc,80407ce4 -348af00,80407870 -348af04,ffffffff -348af08,ffffffff -348af0c,db2a00 -348af10,80407d14 -348af14,80407870 -348af18,ffffffff -348af1c,ffffffff -348af20,bb1201 -348af24,80407d2c -348af28,80407870 -348af2c,ffffffff -348af30,ffffffff -348af34,c71b01 -348af38,80407d48 -348af3c,80407870 -348af40,ffffffff -348af44,ffffffff -348af48,d92800 -348af4c,80407d74 -348af50,80407870 -348af54,ffffffff -348af58,ffffffff -348af5c,cd1e00 -348af60,80407d64 -348af64,80407870 -348af68,ffffffff -348af6c,ffffffff -348af70,10e4600 -348af74,80407da4 -348af78,80407870 -348af7c,ffffffff -348af80,53410043 -348af84,c60100 -348af88,80407c18 -348af8c,80407984 -348af90,15ffff -348af94,53410044 -348af98,c60100 -348af9c,80407c18 -348afa0,80407984 -348afa4,16ffff -348afa8,53410045 -348afac,c60100 -348afb0,80407c18 -348afb4,80407984 -348afb8,17ffff -348afbc,53410046 -348afc0,1776b00 -348afc4,80407c18 -348afc8,80407984 -348afcc,18ffff -348afd0,53410047 -348afd4,f43f00 -348afd8,80407c18 -348afdc,80407984 -348afe0,19ffff -348afe4,5341005d -348afe8,1736700 -348afec,80407c18 -348aff0,80407984 -348aff4,1cffff -348aff8,5341007a -348affc,1746800 -348b000,80407c18 -348b004,80407984 -348b008,1dffff -348b00c,534100f9 -348b010,1767000 -348b014,80407c18 -348b018,80407984 -348b01c,1effff -348b020,53410097 -348b024,1766a00 -348b028,80407c18 -348b02c,80407984 -348b030,20ffff -348b034,53410006 -348b038,b90a02 -348b03c,80407c18 -348b040,804079bc -348b044,10003 -348b048,5341001c -348b04c,b90a02 -348b050,80407c18 -348b054,804079bc -348b058,10004 -348b05c,5341001d -348b060,b90a02 -348b064,80407c18 -348b068,804079bc -348b06c,10005 -348b070,5341001e -348b074,b90a02 -348b078,80407c18 -348b07c,804079bc -348b080,10006 -348b084,5341002a -348b088,b90a02 -348b08c,80407c18 -348b090,804079bc -348b094,10007 -348b098,53410061 -348b09c,b90a02 -348b0a0,80407c18 -348b0a4,804079bc -348b0a8,1000a -348b0ac,53410062 -348b0b0,b80b01 -348b0b4,80407c18 -348b0b8,804079bc -348b0bc,20000 -348b0c0,53410063 -348b0c4,b80b01 -348b0c8,80407c18 -348b0cc,804079bc -348b0d0,20001 -348b0d4,53410064 -348b0d8,b80b01 -348b0dc,80407c18 -348b0e0,804079bc -348b0e4,20002 -348b0e8,53410065 -348b0ec,b80b01 -348b0f0,80407c18 -348b0f4,804079bc -348b0f8,20003 -348b0fc,5341007c -348b100,b80b01 -348b104,80407c18 -348b108,804079bc -348b10c,20004 -348b110,5341007d -348b114,b80b01 -348b118,80407c18 -348b11c,804079bc -348b120,20005 -348b124,5341007e -348b128,b80b01 -348b12c,80407c18 -348b130,804079bc -348b134,20006 -348b138,5341007f -348b13c,b80b01 -348b140,80407c18 -348b144,804079bc -348b148,20007 -348b14c,534100a2 -348b150,b80b01 -348b154,80407c18 -348b158,804079bc -348b15c,20008 -348b160,53410087 -348b164,b80b01 -348b168,80407c18 -348b16c,804079bc -348b170,20009 -348b174,53410088 -348b178,c81c01 -348b17c,80407c18 -348b180,804079bc -348b184,40000 -348b188,53410089 -348b18c,c81c01 -348b190,80407c18 -348b194,804079bc -348b198,40001 -348b19c,5341008a -348b1a0,c81c01 -348b1a4,80407c18 -348b1a8,804079bc -348b1ac,40002 -348b1b0,5341008b -348b1b4,c81c01 -348b1b8,80407c18 -348b1bc,804079bc -348b1c0,40003 -348b1c4,5341008c -348b1c8,c81c01 -348b1cc,80407c18 -348b1d0,804079bc -348b1d4,40004 -348b1d8,5341008e -348b1dc,c81c01 -348b1e0,80407c18 -348b1e4,804079bc -348b1e8,40005 -348b1ec,5341008f -348b1f0,c81c01 -348b1f4,80407c18 -348b1f8,804079bc -348b1fc,40006 -348b200,534100a3 -348b204,c81c01 -348b208,80407c18 -348b20c,804079bc -348b210,40007 -348b214,534100a5 -348b218,c81c01 -348b21c,80407c18 -348b220,804079bc -348b224,40008 -348b228,53410092 -348b22c,c81c01 -348b230,80407c18 -348b234,804079bc -348b238,40009 -348b23c,53410093 -348b240,aa0203 -348b244,80407c18 -348b248,804079d0 -348b24c,3ffff -348b250,53410094 -348b254,aa0203 -348b258,80407c18 -348b25c,804079d0 -348b260,4ffff -348b264,53410095 -348b268,aa0203 -348b26c,80407c18 -348b270,804079d0 -348b274,5ffff -348b278,534100a6 -348b27c,aa0203 -348b280,80407c18 -348b284,804079d0 -348b288,6ffff -348b28c,534100a9 -348b290,aa0203 -348b294,80407c18 -348b298,804079d0 -348b29c,7ffff -348b2a0,5341009b -348b2a4,aa0203 -348b2a8,80407c18 -348b2ac,804079d0 -348b2b0,8ffff -348b2b4,5341009f -348b2b8,aa0203 -348b2bc,80407c18 -348b2c0,804079d0 -348b2c4,bffff -348b2c8,534100a0 -348b2cc,aa0203 -348b2d0,80407c18 -348b2d4,804079d0 -348b2d8,cffff -348b2dc,534100a1 -348b2e0,aa0203 -348b2e4,80407c18 -348b2e8,804079d0 -348b2ec,dffff -348b2f0,534100e9 -348b2f4,1941300 -348b2f8,80407c18 -348b2fc,804079f4 -348b300,ffffffff -348b304,534100e4 -348b308,cd1e00 -348b30c,80407c18 -348b310,80407a10 -348b314,ffffffff -348b318,534100e8 -348b31c,cd1f00 -348b320,80407c18 -348b324,80407a2c -348b328,ffffffff -348b32c,53410073 -348b330,b60300 -348b334,80407c18 -348b338,80407a5c -348b33c,6ffff -348b340,53410074 -348b344,b60400 -348b348,80407c18 -348b34c,80407a5c -348b350,7ffff -348b354,53410075 -348b358,b60500 -348b35c,80407c18 -348b360,80407a5c -348b364,8ffff -348b368,53410076 -348b36c,b60600 -348b370,80407c18 -348b374,80407a5c -348b378,9ffff -348b37c,53410077 -348b380,b60700 -348b384,80407c18 -348b388,80407a5c -348b38c,affff -348b390,53410078 -348b394,b60800 -348b398,80407c18 -348b39c,80407a5c -348b3a0,bffff -348b3a4,534100d4 -348b3a8,b60400 -348b3ac,80407c18 -348b3b0,80407a5c -348b3b4,cffff -348b3b8,534100d2 -348b3bc,b60600 -348b3c0,80407c18 -348b3c4,80407a5c -348b3c8,dffff -348b3cc,534100d1 -348b3d0,b60300 -348b3d4,80407c18 -348b3d8,80407a5c -348b3dc,effff -348b3e0,534100d3 -348b3e4,b60800 -348b3e8,80407c18 -348b3ec,80407a5c -348b3f0,fffff -348b3f4,534100d5 -348b3f8,b60500 -348b3fc,80407c18 -348b400,80407a5c -348b404,10ffff -348b408,534100d6 -348b40c,b60700 -348b410,80407c18 -348b414,80407a5c -348b418,11ffff -348b41c,534100f8 -348b420,d12300 -348b424,80407c18 -348b428,80407940 -348b42c,3ffff -348b430,53149099 -348b434,10b4500 -348b438,80407c18 -348b43c,80407870 -348b440,ffffffff -348b444,53419048 -348b448,f33e00 -348b44c,80407c18 -348b450,80407a90 -348b454,ffffffff -348b458,53419003 -348b45c,1933500 -348b460,80407c18 -348b464,80407884 -348b468,ffffffff -348b46c,53419097 -348b470,ef3b00 -348b474,80407c18 -348b478,80407870 -348b47c,ffffffff -348b480,4d419098 -348b484,ef3b01 -348b488,80407c18 -348b48c,80407870 -348b490,ffffffff -348b498,1 -348b49c,1 -348b4a0,d -348b4a4,41200000 -348b4a8,41200000 -348b4ac,8040a438 -348b4b0,8040a428 -348b4b8,df000000 -348b4c0,80112f1a -348b4c4,80112f14 -348b4c8,80112f0e -348b4cc,80112f08 -348b4d0,8011320a -348b4d4,80113204 -348b4d8,801131fe -348b4dc,801131f8 -348b4e0,801131f2 -348b4e4,801131ec -348b4e8,801131e6 -348b4ec,801131e0 -348b4f0,8012be1e -348b4f4,8012be20 -348b4f8,8012be1c -348b4fc,8012be12 -348b500,8012be14 -348b504,8012be10 -348b508,801c7672 -348b50c,801c767a -348b510,801c7950 -348b514,8011bd50 -348b518,8011bd38 -348b51c,801d8b9e -348b520,801d8b92 -348b524,c80000 -348b52c,ff0046 -348b530,32ffff -348c680,db000 -348c684,db000 -348c688,db000 -348c68c,cb000 -348c690,cb000 -348c694,ca000 -348c69c,db000 +348a46c,100010 +348a470,60301 +348a474,1000000 +348a47c,100010 +348a480,30003 +348a484,4000000 +348a488,e7000000 +348a490,d9000000 +348a498,ed000000 +348a49c,5003c0 +348a4a0,ef002cf0 +348a4a4,504244 +348a4a8,df000000 +348a4c4,4d8e0032 +348a4c8,ce2001 +348a4cc,80407e00 +348a4d0,80407890 +348a4d4,ffffffff +348a4d8,4d8c0034 +348a4dc,bb1201 +348a4e0,80407c38 +348a4e4,80407890 +348a4e8,ffffffff +348a4ec,4d090033 +348a4f0,d92801 +348a4f4,80407c38 +348a4f8,80407890 +348a4fc,ffffffff +348a500,53030031 +348a504,e93500 +348a508,80407c38 +348a50c,80407890 +348a510,ffffffff +348a514,53060030 +348a518,e73300 +348a51c,80407c38 +348a520,80407890 +348a524,ffffffff +348a528,530e0035 +348a52c,e83400 +348a530,80407c38 +348a534,80407890 +348a538,ffffffff +348a53c,4d000037 +348a540,c71b01 +348a544,80407c38 +348a548,80407890 +348a54c,ffffffff +348a550,530a0036 +348a554,dd2d00 +348a558,80407c38 +348a55c,80407890 +348a560,ffffffff +348a564,530b004f +348a568,dd2e00 +348a56c,80407c38 +348a570,80407890 +348a574,ffffffff +348a578,530f0039 +348a57c,ea3600 +348a580,80407c38 +348a584,80407890 +348a588,ffffffff +348a58c,53230069 +348a590,ef3b00 +348a594,80407c38 +348a598,80407af4 +348a59c,ffffffff +348a5a0,5308003a +348a5a4,de2f00 +348a5a8,80407c38 +348a5ac,80407890 +348a5b0,ffffffff +348a5b4,53110038 +348a5b8,f64100 +348a5bc,80407c38 +348a5c0,80407890 +348a5c4,ffffffff +348a5c8,532f0002 +348a5cc,1095e00 +348a5d0,80407c38 +348a5d4,80407890 +348a5d8,ffffffff +348a5dc,53140042 +348a5e0,c60100 +348a5e4,80407c38 +348a5e8,80407890 +348a5ec,ffffffff +348a5f0,53150043 +348a5f4,eb3800 +348a5f8,80407c38 +348a5fc,80407890 +348a600,ffffffff +348a604,53160044 +348a608,eb3700 +348a60c,80407c38 +348a610,80407890 +348a614,ffffffff +348a618,53170045 +348a61c,eb3900 +348a620,80407c38 +348a624,80407890 +348a628,ffffffff +348a62c,53180046 +348a630,c60100 +348a634,80407c38 +348a638,80407890 +348a63c,ffffffff +348a640,531a0098 +348a644,df3000 +348a648,80407c38 +348a64c,80407890 +348a650,ffffffff +348a654,531b0099 +348a658,10b4500 +348a65c,80407e40 +348a660,80407890 +348a664,ffffffff +348a668,53100048 +348a66c,f33e01 +348a670,80407c38 +348a674,80407890 +348a678,ffffffff +348a67c,53250010 +348a680,1364f00 +348a684,80407c38 +348a688,80407890 +348a68c,ffffffff +348a690,53260011 +348a694,1353200 +348a698,80407c38 +348a69c,80407890 +348a6a0,ffffffff +348a6a4,5322000b +348a6a8,1094400 +348a6ac,80407c38 +348a6b0,80407890 +348a6b4,ffffffff +348a6b8,53240012 +348a6bc,1343100 +348a6c0,80407c38 +348a6c4,80407890 +348a6c8,ffffffff +348a6cc,53270013 +348a6d0,1375000 +348a6d4,80407c38 +348a6d8,80407890 +348a6dc,ffffffff +348a6e0,532b0017 +348a6e4,1385100 +348a6e8,80407c38 +348a6ec,80407890 +348a6f0,ffffffff +348a6f4,532d9001 +348a6f8,da2900 +348a6fc,80407c38 +348a700,80407890 +348a704,ffffffff +348a708,532e000b +348a70c,1094400 +348a710,80407c38 +348a714,80407890 +348a718,ffffffff +348a71c,53300003 +348a720,1415400 +348a724,80407c38 +348a728,80407890 +348a72c,ffffffff +348a730,53310004 +348a734,1405300 +348a738,80407c38 +348a73c,80407890 +348a740,ffffffff +348a744,53320005 +348a748,f54000 +348a74c,80407c38 +348a750,80407890 +348a754,ffffffff +348a758,53330008 +348a75c,1435600 +348a760,80407c38 +348a764,80407890 +348a768,ffffffff +348a76c,53340009 +348a770,1465700 +348a774,80407c38 +348a778,80407890 +348a77c,ffffffff +348a780,5335000d +348a784,1495a00 +348a788,80407c38 +348a78c,80407890 +348a790,ffffffff +348a794,5336000e +348a798,13f5200 +348a79c,80407c38 +348a7a0,80407890 +348a7a4,ffffffff +348a7a8,5337000a +348a7ac,1425500 +348a7b0,80407c38 +348a7b4,80407890 +348a7b8,ffffffff +348a7bc,533b00a4 +348a7c0,18d7400 +348a7c4,80407c38 +348a7c8,80407890 +348a7cc,ffffffff +348a7d0,533d004b +348a7d4,f84300 +348a7d8,80407c38 +348a7dc,80407890 +348a7e0,ffffffff +348a7e4,533e004c +348a7e8,cb1d01 +348a7ec,80407c38 +348a7f0,80407890 +348a7f4,ffffffff +348a7f8,533f004d +348a7fc,dc2c01 +348a800,80407c38 +348a804,80407890 +348a808,ffffffff +348a80c,5340004e +348a810,ee3a00 +348a814,80407c38 +348a818,80407890 +348a81c,ffffffff +348a820,53420050 +348a824,f23c00 +348a828,80407c38 +348a82c,80407890 +348a830,ffffffff +348a834,53430051 +348a838,f23d00 +348a83c,80407c38 +348a840,80407890 +348a844,ffffffff +348a848,53450053 +348a84c,1184700 +348a850,80407c38 +348a854,80407890 +348a858,ffffffff +348a85c,53460054 +348a860,1575f00 +348a864,80407c38 +348a868,80407890 +348a86c,ffffffff +348a870,534b0056 +348a874,be1600 +348a878,80407c38 +348a87c,80407890 +348a880,ffffffff +348a884,534c0057 +348a888,be1700 +348a88c,80407c38 +348a890,80407890 +348a894,ffffffff +348a898,534d0058 +348a89c,bf1800 +348a8a0,80407c38 +348a8a4,80407890 +348a8a8,ffffffff +348a8ac,534e0059 +348a8b0,bf1900 +348a8b4,80407c38 +348a8b8,80407890 +348a8bc,ffffffff +348a8c0,534f005a +348a8c4,bf1a00 +348a8c8,80407c38 +348a8cc,80407890 +348a8d0,ffffffff +348a8d4,5351005b +348a8d8,12d4900 +348a8dc,80407c38 +348a8e0,80407890 +348a8e4,ffffffff +348a8e8,5352005c +348a8ec,12d4a00 +348a8f0,80407c38 +348a8f4,80407890 +348a8f8,ffffffff +348a8fc,535300cd +348a900,db2a00 +348a904,80407c38 +348a908,80407890 +348a90c,ffffffff +348a910,535400ce +348a914,db2b00 +348a918,80407c38 +348a91c,80407890 +348a920,ffffffff +348a924,536f0068 +348a928,c82100 +348a92c,80407c38 +348a930,80407890 +348a934,ffffffff +348a938,5370007b +348a93c,d72400 +348a940,80407c38 +348a944,80407890 +348a948,ffffffff +348a94c,5341004a +348a950,10e4600 +348a954,80407c38 +348a958,80407a70 +348a95c,ffffffff +348a960,4d5800dc +348a964,1194801 +348a968,80407e1c +348a96c,80407890 +348a970,ffffffff +348a974,3d7200c6 +348a978,bd1301 +348a97c,80407c38 +348a980,80407898 +348a984,ffffffff +348a988,3e7a00c2 +348a98c,bd1401 +348a990,80407c38 +348a994,80407898 +348a998,ffffffff +348a99c,537400c7 +348a9a0,b90a02 +348a9a4,80407c38 +348a9a8,80407890 +348a9ac,ffffffff +348a9b0,53750067 +348a9b4,b80b01 +348a9b8,80407c38 +348a9bc,80407890 +348a9c0,ffffffff +348a9c4,53760066 +348a9c8,c81c01 +348a9cc,80407c38 +348a9d0,80407890 +348a9d4,ffffffff +348a9d8,53770060 +348a9dc,aa0203 +348a9e0,80407c38 +348a9e4,80407890 +348a9e8,ffffffff +348a9ec,53780052 +348a9f0,cd1e01 +348a9f4,80407c38 +348a9f8,80407890 +348a9fc,ffffffff +348aa00,53790052 +348aa04,cd1f01 +348aa08,80407c38 +348aa0c,80407890 +348aa10,ffffffff +348aa14,5356005e +348aa18,d12200 +348aa1c,80407c38 +348aa20,80407ac8 +348aa24,1ffff +348aa28,5357005f +348aa2c,d12300 +348aa30,80407c38 +348aa34,80407ac8 +348aa38,2ffff +348aa3c,5321009a +348aa40,da2900 +348aa44,80407c38 +348aa48,80407890 +348aa4c,ffffffff +348aa50,4d830055 +348aa54,b70901 +348aa58,80407c38 +348aa5c,80407890 +348aa60,ffffffff +348aa64,4d9200e6 +348aa68,d82501 +348aa6c,80407de4 +348aa70,80407890 +348aa74,ffffffff +348aa78,4d9300e6 +348aa7c,d82601 +348aa80,80407de4 +348aa84,80407890 +348aa88,ffffffff +348aa8c,4d9400e6 +348aa90,d82701 +348aa94,80407de4 +348aa98,80407890 +348aa9c,ffffffff +348aaa0,4d84006f +348aaa4,17f6d01 +348aaa8,80407c38 +348aaac,80407890 +348aab0,ffffffff +348aab4,4d8500cc +348aab8,17f6e01 +348aabc,80407c38 +348aac0,80407890 +348aac4,ffffffff +348aac8,4d8600f0 +348aacc,17f6f01 +348aad0,80407c38 +348aad4,80407890 +348aad8,ffffffff +348aadc,3d7200c6 +348aae0,bd1301 +348aae4,80407c38 +348aae8,80407898 +348aaec,ffffffff +348aaf0,53820098 +348aaf4,df3000 +348aaf8,80407c38 +348aafc,80407890 +348ab00,ffffffff +348ab04,53280014 +348ab08,1505b00 +348ab0c,80407c38 +348ab10,80407890 +348ab14,ffffffff +348ab18,53290015 +348ab1c,1515c00 +348ab20,80407c38 +348ab24,80407890 +348ab28,ffffffff +348ab2c,532a0016 +348ab30,1525d00 +348ab34,80407c38 +348ab38,80407890 +348ab3c,ffffffff +348ab40,53500079 +348ab44,1475800 +348ab48,80407c38 +348ab4c,80407890 +348ab50,ffffffff +348ab54,4d8700f1 +348ab58,17f7101 +348ab5c,80407c38 +348ab60,80407890 +348ab64,ffffffff +348ab68,4d8800f2 +348ab6c,17f7201 +348ab70,80407c38 +348ab74,80407890 +348ab78,ffffffff +348ab7c,533d000c +348ab80,f84300 +348ab84,80407c38 +348ab88,80407998 +348ab8c,ffffffff +348ab90,53040070 +348ab94,1586000 +348ab98,80407c38 +348ab9c,80407890 +348aba0,ffffffff +348aba4,530c0071 +348aba8,1586100 +348abac,80407c38 +348abb0,80407890 +348abb4,ffffffff +348abb8,53120072 +348abbc,1586200 +348abc0,80407c38 +348abc4,80407890 +348abc8,ffffffff +348abcc,5b7100b4 +348abd0,15c6301 +348abd4,80407c38 +348abd8,80407890 +348abdc,ffffffff +348abe0,530500ad +348abe4,15d6400 +348abe8,80407c38 +348abec,80407890 +348abf0,ffffffff +348abf4,530d00ae +348abf8,15d6500 +348abfc,80407c38 +348ac00,80407890 +348ac04,ffffffff +348ac08,531300af +348ac0c,15d6600 +348ac10,80407c38 +348ac14,80407890 +348ac18,ffffffff +348ac1c,53470007 +348ac20,17b6c00 +348ac24,80407c38 +348ac28,80407890 +348ac2c,ffffffff +348ac30,53480007 +348ac34,17b6c00 +348ac38,80407c38 +348ac3c,80407890 +348ac40,ffffffff +348ac44,4d8a0037 +348ac48,c71b01 +348ac4c,80407c38 +348ac50,80407890 +348ac54,ffffffff +348ac58,4d8b0037 +348ac5c,c71b01 +348ac60,80407c38 +348ac64,80407890 +348ac68,ffffffff +348ac6c,4d8c0034 +348ac70,bb1201 +348ac74,80407c38 +348ac78,80407890 +348ac7c,ffffffff +348ac80,4d8d0034 +348ac84,bb1201 +348ac88,80407c38 +348ac8c,80407890 +348ac90,ffffffff +348ac94,4d020032 +348ac98,ce2001 +348ac9c,80407e00 +348aca0,80407890 +348aca4,ffffffff +348aca8,4d8f0032 +348acac,ce2001 +348acb0,80407e00 +348acb4,80407890 +348acb8,ffffffff +348acbc,4d900032 +348acc0,ce2001 +348acc4,80407e00 +348acc8,80407890 +348accc,ffffffff +348acd0,4d910032 +348acd4,ce2001 +348acd8,80407e00 +348acdc,80407890 +348ace0,ffffffff +348ace4,4d9500dc +348ace8,1194801 +348acec,80407e1c +348acf0,80407890 +348acf4,ffffffff +348acf8,4d960033 +348acfc,d92801 +348ad00,80407c38 +348ad04,80407890 +348ad08,ffffffff +348ad0c,4d970033 +348ad10,d92801 +348ad14,80407c38 +348ad18,80407890 +348ad1c,ffffffff +348ad20,53190047 +348ad24,f43f00 +348ad28,80407c38 +348ad2c,80407890 +348ad30,ffffffff +348ad34,531d007a +348ad38,1746800 +348ad3c,80407c38 +348ad40,80407890 +348ad44,ffffffff +348ad48,531c005d +348ad4c,1736700 +348ad50,80407c38 +348ad54,80407890 +348ad58,ffffffff +348ad5c,53200097 +348ad60,1766a00 +348ad64,80407c38 +348ad68,80407890 +348ad6c,ffffffff +348ad70,531e00f9 +348ad74,1767000 +348ad78,80407c38 +348ad7c,80407890 +348ad80,ffffffff +348ad84,537700f3 +348ad88,aa0201 +348ad8c,80407c38 +348ad90,80407890 +348ad94,ffffffff +348ad98,4d8400f4 +348ad9c,17f6d01 +348ada0,80407c38 +348ada4,80407890 +348ada8,ffffffff +348adac,4d8500f5 +348adb0,17f6e01 +348adb4,80407c38 +348adb8,80407890 +348adbc,ffffffff +348adc0,4d8600f6 +348adc4,17f6f01 +348adc8,80407c38 +348adcc,80407890 +348add0,ffffffff +348add4,4d8700f7 +348add8,17f7101 +348addc,80407c38 +348ade0,80407890 +348ade4,ffffffff +348ade8,537a00fa +348adec,bd1401 +348adf0,80407c38 +348adf4,80407898 +348adf8,ffffffff +348adfc,53980090 +348ae00,c71b01 +348ae04,80407c38 +348ae08,80407890 +348ae0c,ffffffff +348ae10,53990091 +348ae14,c71b01 +348ae18,80407c38 +348ae1c,80407890 +348ae20,ffffffff +348ae24,539a00a7 +348ae28,bb1201 +348ae2c,80407c38 +348ae30,80407890 +348ae34,ffffffff +348ae38,539b00a8 +348ae3c,bb1201 +348ae40,80407c38 +348ae44,80407890 +348ae48,ffffffff +348ae4c,5349006c +348ae50,17b7300 +348ae54,80407c38 +348ae58,80407890 +348ae5c,ffffffff +348ae60,53419002 +348ae68,80407c38 +348ae6c,80407a94 +348ae70,ffffffff +348aeb0,ffffffff +348aeb4,dd2d00 +348aeb8,80407c40 +348aebc,80407890 +348aec0,ffffffff +348aec4,ffffffff +348aec8,1475800 +348aecc,80407c54 +348aed0,80407890 +348aed4,ffffffff +348aed8,ffffffff +348aedc,bf1800 +348aee0,80407c80 +348aee4,80407890 +348aee8,ffffffff +348aeec,ffffffff +348aef0,e93500 +348aef4,80407cac +348aef8,80407890 +348aefc,ffffffff +348af00,ffffffff +348af04,e73300 +348af08,80407cd4 +348af0c,80407890 +348af10,ffffffff +348af14,ffffffff +348af18,d12200 +348af1c,80407d04 +348af20,80407890 +348af24,ffffffff +348af28,ffffffff +348af2c,db2a00 +348af30,80407d34 +348af34,80407890 +348af38,ffffffff +348af3c,ffffffff +348af40,bb1201 +348af44,80407d4c +348af48,80407890 +348af4c,ffffffff +348af50,ffffffff +348af54,c71b01 +348af58,80407d68 +348af5c,80407890 +348af60,ffffffff +348af64,ffffffff +348af68,d92800 +348af6c,80407d94 +348af70,80407890 +348af74,ffffffff +348af78,ffffffff +348af7c,cd1e00 +348af80,80407d84 +348af84,80407890 +348af88,ffffffff +348af8c,ffffffff +348af90,10e4600 +348af94,80407dc4 +348af98,80407890 +348af9c,ffffffff +348afa0,53410043 +348afa4,c60100 +348afa8,80407c38 +348afac,804079a4 +348afb0,15ffff +348afb4,53410044 +348afb8,c60100 +348afbc,80407c38 +348afc0,804079a4 +348afc4,16ffff +348afc8,53410045 +348afcc,c60100 +348afd0,80407c38 +348afd4,804079a4 +348afd8,17ffff +348afdc,53410046 +348afe0,1776b00 +348afe4,80407c38 +348afe8,804079a4 +348afec,18ffff +348aff0,53410047 +348aff4,f43f00 +348aff8,80407c38 +348affc,804079a4 +348b000,19ffff +348b004,5341005d +348b008,1736700 +348b00c,80407c38 +348b010,804079a4 +348b014,1cffff +348b018,5341007a +348b01c,1746800 +348b020,80407c38 +348b024,804079a4 +348b028,1dffff +348b02c,534100f9 +348b030,1767000 +348b034,80407c38 +348b038,804079a4 +348b03c,1effff +348b040,53410097 +348b044,1766a00 +348b048,80407c38 +348b04c,804079a4 +348b050,20ffff +348b054,53410006 +348b058,b90a02 +348b05c,80407c38 +348b060,804079dc +348b064,10003 +348b068,5341001c +348b06c,b90a02 +348b070,80407c38 +348b074,804079dc +348b078,10004 +348b07c,5341001d +348b080,b90a02 +348b084,80407c38 +348b088,804079dc +348b08c,10005 +348b090,5341001e +348b094,b90a02 +348b098,80407c38 +348b09c,804079dc +348b0a0,10006 +348b0a4,5341002a +348b0a8,b90a02 +348b0ac,80407c38 +348b0b0,804079dc +348b0b4,10007 +348b0b8,53410061 +348b0bc,b90a02 +348b0c0,80407c38 +348b0c4,804079dc +348b0c8,1000a +348b0cc,53410062 +348b0d0,b80b01 +348b0d4,80407c38 +348b0d8,804079dc +348b0dc,20000 +348b0e0,53410063 +348b0e4,b80b01 +348b0e8,80407c38 +348b0ec,804079dc +348b0f0,20001 +348b0f4,53410064 +348b0f8,b80b01 +348b0fc,80407c38 +348b100,804079dc +348b104,20002 +348b108,53410065 +348b10c,b80b01 +348b110,80407c38 +348b114,804079dc +348b118,20003 +348b11c,5341007c +348b120,b80b01 +348b124,80407c38 +348b128,804079dc +348b12c,20004 +348b130,5341007d +348b134,b80b01 +348b138,80407c38 +348b13c,804079dc +348b140,20005 +348b144,5341007e +348b148,b80b01 +348b14c,80407c38 +348b150,804079dc +348b154,20006 +348b158,5341007f +348b15c,b80b01 +348b160,80407c38 +348b164,804079dc +348b168,20007 +348b16c,534100a2 +348b170,b80b01 +348b174,80407c38 +348b178,804079dc +348b17c,20008 +348b180,53410087 +348b184,b80b01 +348b188,80407c38 +348b18c,804079dc +348b190,20009 +348b194,53410088 +348b198,c81c01 +348b19c,80407c38 +348b1a0,804079dc +348b1a4,40000 +348b1a8,53410089 +348b1ac,c81c01 +348b1b0,80407c38 +348b1b4,804079dc +348b1b8,40001 +348b1bc,5341008a +348b1c0,c81c01 +348b1c4,80407c38 +348b1c8,804079dc +348b1cc,40002 +348b1d0,5341008b +348b1d4,c81c01 +348b1d8,80407c38 +348b1dc,804079dc +348b1e0,40003 +348b1e4,5341008c +348b1e8,c81c01 +348b1ec,80407c38 +348b1f0,804079dc +348b1f4,40004 +348b1f8,5341008e +348b1fc,c81c01 +348b200,80407c38 +348b204,804079dc +348b208,40005 +348b20c,5341008f +348b210,c81c01 +348b214,80407c38 +348b218,804079dc +348b21c,40006 +348b220,534100a3 +348b224,c81c01 +348b228,80407c38 +348b22c,804079dc +348b230,40007 +348b234,534100a5 +348b238,c81c01 +348b23c,80407c38 +348b240,804079dc +348b244,40008 +348b248,53410092 +348b24c,c81c01 +348b250,80407c38 +348b254,804079dc +348b258,40009 +348b25c,53410093 +348b260,aa0203 +348b264,80407c38 +348b268,804079f0 +348b26c,3ffff +348b270,53410094 +348b274,aa0203 +348b278,80407c38 +348b27c,804079f0 +348b280,4ffff +348b284,53410095 +348b288,aa0203 +348b28c,80407c38 +348b290,804079f0 +348b294,5ffff +348b298,534100a6 +348b29c,aa0203 +348b2a0,80407c38 +348b2a4,804079f0 +348b2a8,6ffff +348b2ac,534100a9 +348b2b0,aa0203 +348b2b4,80407c38 +348b2b8,804079f0 +348b2bc,7ffff +348b2c0,5341009b +348b2c4,aa0203 +348b2c8,80407c38 +348b2cc,804079f0 +348b2d0,8ffff +348b2d4,5341009f +348b2d8,aa0203 +348b2dc,80407c38 +348b2e0,804079f0 +348b2e4,bffff +348b2e8,534100a0 +348b2ec,aa0203 +348b2f0,80407c38 +348b2f4,804079f0 +348b2f8,cffff +348b2fc,534100a1 +348b300,aa0203 +348b304,80407c38 +348b308,804079f0 +348b30c,dffff +348b310,534100e9 +348b314,1941300 +348b318,80407c38 +348b31c,80407a14 +348b320,ffffffff +348b324,534100e4 +348b328,cd1e00 +348b32c,80407c38 +348b330,80407a30 +348b334,ffffffff +348b338,534100e8 +348b33c,cd1f00 +348b340,80407c38 +348b344,80407a4c +348b348,ffffffff +348b34c,53410073 +348b350,b60300 +348b354,80407c38 +348b358,80407a7c +348b35c,6ffff +348b360,53410074 +348b364,b60400 +348b368,80407c38 +348b36c,80407a7c +348b370,7ffff +348b374,53410075 +348b378,b60500 +348b37c,80407c38 +348b380,80407a7c +348b384,8ffff +348b388,53410076 +348b38c,b60600 +348b390,80407c38 +348b394,80407a7c +348b398,9ffff +348b39c,53410077 +348b3a0,b60700 +348b3a4,80407c38 +348b3a8,80407a7c +348b3ac,affff +348b3b0,53410078 +348b3b4,b60800 +348b3b8,80407c38 +348b3bc,80407a7c +348b3c0,bffff +348b3c4,534100d4 +348b3c8,b60400 +348b3cc,80407c38 +348b3d0,80407a7c +348b3d4,cffff +348b3d8,534100d2 +348b3dc,b60600 +348b3e0,80407c38 +348b3e4,80407a7c +348b3e8,dffff +348b3ec,534100d1 +348b3f0,b60300 +348b3f4,80407c38 +348b3f8,80407a7c +348b3fc,effff +348b400,534100d3 +348b404,b60800 +348b408,80407c38 +348b40c,80407a7c +348b410,fffff +348b414,534100d5 +348b418,b60500 +348b41c,80407c38 +348b420,80407a7c +348b424,10ffff +348b428,534100d6 +348b42c,b60700 +348b430,80407c38 +348b434,80407a7c +348b438,11ffff +348b43c,534100f8 +348b440,d12300 +348b444,80407c38 +348b448,80407960 +348b44c,3ffff +348b450,53149099 +348b454,10b4500 +348b458,80407c38 +348b45c,80407890 +348b460,ffffffff +348b464,53419048 +348b468,f33e00 +348b46c,80407c38 +348b470,80407ab0 +348b474,ffffffff +348b478,53419003 +348b47c,1933500 +348b480,80407c38 +348b484,804078a4 +348b488,ffffffff +348b48c,53419097 +348b490,ef3b00 +348b494,80407c38 +348b498,80407890 +348b49c,ffffffff +348b4a0,4d419098 +348b4a4,ef3b01 +348b4a8,80407c38 +348b4ac,80407890 +348b4b0,ffffffff +348b4b8,1 +348b4bc,1 +348b4c0,d +348b4c4,41200000 +348b4c8,41200000 +348b4cc,8040a458 +348b4d0,8040a448 +348b4d8,df000000 +348b4e0,80112f1a +348b4e4,80112f14 +348b4e8,80112f0e +348b4ec,80112f08 +348b4f0,8011320a +348b4f4,80113204 +348b4f8,801131fe +348b4fc,801131f8 +348b500,801131f2 +348b504,801131ec +348b508,801131e6 +348b50c,801131e0 +348b510,8012be1e +348b514,8012be20 +348b518,8012be1c +348b51c,8012be12 +348b520,8012be14 +348b524,8012be10 +348b528,801c7672 +348b52c,801c767a +348b530,801c7950 +348b534,8011bd50 +348b538,8011bd38 +348b53c,801d8b9e +348b540,801d8b92 +348b544,c80000 +348b54c,ff0046 +348b550,32ffff 348c6a0,db000 -348c6b8,e8ac00 -348c6bc,e8ac00 -348c6c0,e8ac00 -348c6c4,e8ac00 -348c6ec,d77d0 -348c6f0,2e3ab0 -348c6f4,7d0c90 -348c6f8,8ffffffd -348c6fc,c96e00 -348c700,2e4ac00 -348c704,effffff4 -348c708,ab0e500 -348c70c,c95e000 -348c710,e59c000 -348c728,79000 -348c72c,5ceeb40 -348c730,cc8a990 -348c734,da79000 -348c738,8ecb400 -348c73c,4adda0 -348c740,797e2 -348c744,c88aae0 -348c748,6ceed70 -348c74c,79000 -348c750,79000 -348c760,6dea0000 -348c764,c94d6000 -348c768,c94d6033 -348c76c,6deb6bc6 -348c770,8cb600 -348c774,7ca4cec4 -348c778,3109c3bb -348c77c,9c3bb -348c780,2ced4 -348c798,4cefb00 -348c79c,ad50000 -348c7a0,8e30000 -348c7a4,9ec0000 -348c7a8,7e4db0ab -348c7ac,bb05e8aa -348c7b0,bc008ed6 -348c7b4,7e936ed0 -348c7b8,8ded9ea -348c7d0,ca000 -348c7d4,ca000 -348c7d8,ca000 -348c7dc,ca000 -348c800,c900 -348c804,7e200 -348c808,cb000 -348c80c,e8000 -348c810,6f3000 -348c814,8e0000 -348c818,8e0000 -348c81c,6f4000 -348c820,e8000 -348c824,cb000 -348c828,7e200 -348c82c,c900 -348c838,bb0000 -348c83c,5e4000 -348c840,ca000 -348c844,ad000 -348c848,7e100 -348c84c,6f400 -348c850,6f400 -348c854,7e100 -348c858,ad000 -348c85c,ca000 -348c860,5e4000 -348c864,bb0000 -348c878,a8000 -348c87c,c8a8ab0 -348c880,3beda10 -348c884,3beda10 -348c888,c8a8ab0 -348c88c,a8000 -348c8b4,ca000 -348c8b8,ca000 -348c8bc,ca000 -348c8c0,affffff8 -348c8c4,ca000 -348c8c8,ca000 -348c8cc,ca000 -348c904,dd000 -348c908,ec000 -348c90c,4f8000 -348c910,9d0000 -348c934,dffb00 -348c974,ec000 -348c978,ec000 -348c990,bc0 -348c994,4e60 -348c998,bc00 -348c99c,3e800 -348c9a0,ad000 -348c9a4,1e9000 -348c9a8,9e2000 -348c9ac,da0000 -348c9b0,7e30000 -348c9b4,cb00000 -348c9b8,6e500000 -348c9c8,3ceeb00 -348c9cc,bd57e90 -348c9d0,e900bd0 -348c9d4,5f7009e0 -348c9d8,6f6cb9e0 -348c9dc,5f7009e0 -348c9e0,e900bd0 -348c9e4,bd57e90 +348c6a4,db000 +348c6a8,db000 +348c6ac,cb000 +348c6b0,cb000 +348c6b4,ca000 +348c6bc,db000 +348c6c0,db000 +348c6d8,e8ac00 +348c6dc,e8ac00 +348c6e0,e8ac00 +348c6e4,e8ac00 +348c70c,d77d0 +348c710,2e3ab0 +348c714,7d0c90 +348c718,8ffffffd +348c71c,c96e00 +348c720,2e4ac00 +348c724,effffff4 +348c728,ab0e500 +348c72c,c95e000 +348c730,e59c000 +348c748,79000 +348c74c,5ceeb40 +348c750,cc8a990 +348c754,da79000 +348c758,8ecb400 +348c75c,4adda0 +348c760,797e2 +348c764,c88aae0 +348c768,6ceed70 +348c76c,79000 +348c770,79000 +348c780,6dea0000 +348c784,c94d6000 +348c788,c94d6033 +348c78c,6deb6bc6 +348c790,8cb600 +348c794,7ca4cec4 +348c798,3109c3bb +348c79c,9c3bb +348c7a0,2ced4 +348c7b8,4cefb00 +348c7bc,ad50000 +348c7c0,8e30000 +348c7c4,9ec0000 +348c7c8,7e4db0ab +348c7cc,bb05e8aa +348c7d0,bc008ed6 +348c7d4,7e936ed0 +348c7d8,8ded9ea +348c7f0,ca000 +348c7f4,ca000 +348c7f8,ca000 +348c7fc,ca000 +348c820,c900 +348c824,7e200 +348c828,cb000 +348c82c,e8000 +348c830,6f3000 +348c834,8e0000 +348c838,8e0000 +348c83c,6f4000 +348c840,e8000 +348c844,cb000 +348c848,7e200 +348c84c,c900 +348c858,bb0000 +348c85c,5e4000 +348c860,ca000 +348c864,ad000 +348c868,7e100 +348c86c,6f400 +348c870,6f400 +348c874,7e100 +348c878,ad000 +348c87c,ca000 +348c880,5e4000 +348c884,bb0000 +348c898,a8000 +348c89c,c8a8ab0 +348c8a0,3beda10 +348c8a4,3beda10 +348c8a8,c8a8ab0 +348c8ac,a8000 +348c8d4,ca000 +348c8d8,ca000 +348c8dc,ca000 +348c8e0,affffff8 +348c8e4,ca000 +348c8e8,ca000 +348c8ec,ca000 +348c924,dd000 +348c928,ec000 +348c92c,4f8000 +348c930,9d0000 +348c954,dffb00 +348c994,ec000 +348c998,ec000 +348c9b0,bc0 +348c9b4,4e60 +348c9b8,bc00 +348c9bc,3e800 +348c9c0,ad000 +348c9c4,1e9000 +348c9c8,9e2000 +348c9cc,da0000 +348c9d0,7e30000 +348c9d4,cb00000 +348c9d8,6e500000 348c9e8,3ceeb00 -348ca00,affe000 -348ca04,8e000 -348ca08,8e000 -348ca0c,8e000 -348ca10,8e000 -348ca14,8e000 -348ca18,8e000 -348ca1c,8e000 -348ca20,8ffffe0 -348ca38,8deea00 -348ca3c,c837e90 -348ca40,cc0 -348ca44,2ea0 -348ca48,bd20 -348ca4c,bd400 -348ca50,bd4000 -348ca54,bd40000 -348ca58,2fffffd0 -348ca70,7ceea00 -348ca74,c837e90 -348ca78,cb0 -348ca7c,27e90 -348ca80,bffb00 -348ca84,27da0 -348ca88,ad0 -348ca8c,5c627db0 -348ca90,9deeb30 -348caa8,2de00 -348caac,bde00 -348cab0,7d9e00 -348cab4,2d79e00 -348cab8,bb09e00 -348cabc,6e409e00 -348cac0,9ffffff7 -348cac4,9e00 -348cac8,9e00 -348cae0,cffff50 -348cae4,ca00000 -348cae8,ca00000 -348caec,ceeea00 -348caf0,38e90 -348caf4,bc0 -348caf8,bc0 -348cafc,5c638e90 -348cb00,9deda00 -348cb18,aeec30 -348cb1c,ae83980 -348cb20,e900000 -348cb24,4faeec40 -348cb28,6fd55dc0 -348cb2c,5f9009e0 -348cb30,e9009e0 -348cb34,cd55dc0 -348cb38,3ceec40 -348cb50,5fffffd0 -348cb54,da0 -348cb58,7e40 -348cb5c,cc00 -348cb60,4e800 -348cb64,ad000 -348cb68,da000 -348cb6c,8e4000 -348cb70,cc0000 -348cb88,5ceec30 -348cb8c,dc45db0 -348cb90,e900bd0 -348cb94,bc45d90 -348cb98,4dffc20 -348cb9c,1db45cc0 -348cba0,5f6009e0 -348cba4,2eb35cd0 -348cba8,7deec50 -348cbc0,6deeb00 -348cbc4,db37e90 -348cbc8,5f500bd0 -348cbcc,5f500be0 -348cbd0,db37ee0 -348cbd4,6dedbe0 -348cbd8,bc0 -348cbdc,9749e70 -348cbe0,5ded800 -348cc00,ec000 -348cc04,ec000 -348cc14,ec000 -348cc18,ec000 +348c9ec,bd57e90 +348c9f0,e900bd0 +348c9f4,5f7009e0 +348c9f8,6f6cb9e0 +348c9fc,5f7009e0 +348ca00,e900bd0 +348ca04,bd57e90 +348ca08,3ceeb00 +348ca20,affe000 +348ca24,8e000 +348ca28,8e000 +348ca2c,8e000 +348ca30,8e000 +348ca34,8e000 +348ca38,8e000 +348ca3c,8e000 +348ca40,8ffffe0 +348ca58,8deea00 +348ca5c,c837e90 +348ca60,cc0 +348ca64,2ea0 +348ca68,bd20 +348ca6c,bd400 +348ca70,bd4000 +348ca74,bd40000 +348ca78,2fffffd0 +348ca90,7ceea00 +348ca94,c837e90 +348ca98,cb0 +348ca9c,27e90 +348caa0,bffb00 +348caa4,27da0 +348caa8,ad0 +348caac,5c627db0 +348cab0,9deeb30 +348cac8,2de00 +348cacc,bde00 +348cad0,7d9e00 +348cad4,2d79e00 +348cad8,bb09e00 +348cadc,6e409e00 +348cae0,9ffffff7 +348cae4,9e00 +348cae8,9e00 +348cb00,cffff50 +348cb04,ca00000 +348cb08,ca00000 +348cb0c,ceeea00 +348cb10,38e90 +348cb14,bc0 +348cb18,bc0 +348cb1c,5c638e90 +348cb20,9deda00 +348cb38,aeec30 +348cb3c,ae83980 +348cb40,e900000 +348cb44,4faeec40 +348cb48,6fd55dc0 +348cb4c,5f9009e0 +348cb50,e9009e0 +348cb54,cd55dc0 +348cb58,3ceec40 +348cb70,5fffffd0 +348cb74,da0 +348cb78,7e40 +348cb7c,cc00 +348cb80,4e800 +348cb84,ad000 +348cb88,da000 +348cb8c,8e4000 +348cb90,cc0000 +348cba8,5ceec30 +348cbac,dc45db0 +348cbb0,e900bd0 +348cbb4,bc45d90 +348cbb8,4dffc20 +348cbbc,1db45cc0 +348cbc0,5f6009e0 +348cbc4,2eb35cd0 +348cbc8,7deec50 +348cbe0,6deeb00 +348cbe4,db37e90 +348cbe8,5f500bd0 +348cbec,5f500be0 +348cbf0,db37ee0 +348cbf4,6dedbe0 +348cbf8,bc0 +348cbfc,9749e70 +348cc00,5ded800 +348cc20,ec000 +348cc24,ec000 +348cc34,ec000 348cc38,ec000 -348cc3c,ec000 -348cc4c,dd000 -348cc50,ec000 -348cc54,4f8000 -348cc58,9d0000 -348cc70,29c8 -348cc74,7bed93 -348cc78,8dda4000 -348cc7c,8dda4000 -348cc80,7bec93 -348cc84,29c8 -348ccac,affffff8 -348ccb8,affffff8 -348cce0,ac810000 -348cce4,4adeb600 -348cce8,6add6 -348ccec,6add6 -348ccf0,4adeb600 -348ccf4,ac810000 -348cd10,4beec30 -348cd14,9a46ea0 -348cd18,1da0 -348cd1c,2cd30 -348cd20,cc100 -348cd24,e9000 -348cd2c,e9000 -348cd30,e9000 -348cd48,1aeed70 -348cd4c,cd739e4 -348cd50,7e2000c9 -348cd54,ba0aeeca -348cd58,d76e64da -348cd5c,d69c00aa -348cd60,d76e64da -348cd64,ba0aeeca -348cd68,6e400000 -348cd6c,ad83000 -348cd70,8dee90 -348cd80,3ed000 -348cd84,9de600 -348cd88,cbcb00 -348cd8c,3e8ad00 -348cd90,8e26f60 -348cd94,cc00ea0 -348cd98,2effffd0 -348cd9c,8e5008f5 -348cda0,cd0001ea -348cdb8,effec40 -348cdbc,e905dc0 -348cdc0,e900ae0 -348cdc4,e905dc0 -348cdc8,efffd50 -348cdcc,e904bd2 -348cdd0,e9005f6 -348cdd4,e904be3 -348cdd8,effed80 -348cdf0,9ded80 -348cdf4,8e936b0 -348cdf8,db00000 -348cdfc,3f900000 -348ce00,5f700000 -348ce04,1e900000 -348ce08,db00000 -348ce0c,8e947b0 +348cc58,ec000 +348cc5c,ec000 +348cc6c,dd000 +348cc70,ec000 +348cc74,4f8000 +348cc78,9d0000 +348cc90,29c8 +348cc94,7bed93 +348cc98,8dda4000 +348cc9c,8dda4000 +348cca0,7bec93 +348cca4,29c8 +348cccc,affffff8 +348ccd8,affffff8 +348cd00,ac810000 +348cd04,4adeb600 +348cd08,6add6 +348cd0c,6add6 +348cd10,4adeb600 +348cd14,ac810000 +348cd30,4beec30 +348cd34,9a46ea0 +348cd38,1da0 +348cd3c,2cd30 +348cd40,cc100 +348cd44,e9000 +348cd4c,e9000 +348cd50,e9000 +348cd68,1aeed70 +348cd6c,cd739e4 +348cd70,7e2000c9 +348cd74,ba0aeeca +348cd78,d76e64da +348cd7c,d69c00aa +348cd80,d76e64da +348cd84,ba0aeeca +348cd88,6e400000 +348cd8c,ad83000 +348cd90,8dee90 +348cda0,3ed000 +348cda4,9de600 +348cda8,cbcb00 +348cdac,3e8ad00 +348cdb0,8e26f60 +348cdb4,cc00ea0 +348cdb8,2effffd0 +348cdbc,8e5008f5 +348cdc0,cd0001ea +348cdd8,effec40 +348cddc,e905dc0 +348cde0,e900ae0 +348cde4,e905dc0 +348cde8,efffd50 +348cdec,e904bd2 +348cdf0,e9005f6 +348cdf4,e904be3 +348cdf8,effed80 348ce10,9ded80 -348ce28,5ffed800 -348ce2c,5f65ae80 -348ce30,5f600cd0 -348ce34,5f6009e0 -348ce38,5f6009f0 -348ce3c,5f6009e0 -348ce40,5f600cd0 -348ce44,5f65ae80 +348ce14,8e936b0 +348ce18,db00000 +348ce1c,3f900000 +348ce20,5f700000 +348ce24,1e900000 +348ce28,db00000 +348ce2c,8e947b0 +348ce30,9ded80 348ce48,5ffed800 -348ce60,dffffe0 -348ce64,db00000 -348ce68,db00000 -348ce6c,db00000 -348ce70,dffffc0 -348ce74,db00000 -348ce78,db00000 -348ce7c,db00000 -348ce80,dfffff0 -348ce98,bfffff4 -348ce9c,bd00000 -348cea0,bd00000 -348cea4,bd00000 -348cea8,bffffc0 -348ceac,bd00000 -348ceb0,bd00000 -348ceb4,bd00000 -348ceb8,bd00000 -348ced0,1aeed60 -348ced4,be738a0 -348ced8,4e900000 -348cedc,8f400000 -348cee0,9f10bff2 -348cee4,7f4007f2 -348cee8,4e9007f2 -348ceec,be739f2 -348cef0,1beed90 -348cf08,5f6009e0 -348cf0c,5f6009e0 -348cf10,5f6009e0 -348cf14,5f6009e0 -348cf18,5fffffe0 -348cf1c,5f6009e0 -348cf20,5f6009e0 -348cf24,5f6009e0 +348ce4c,5f65ae80 +348ce50,5f600cd0 +348ce54,5f6009e0 +348ce58,5f6009f0 +348ce5c,5f6009e0 +348ce60,5f600cd0 +348ce64,5f65ae80 +348ce68,5ffed800 +348ce80,dffffe0 +348ce84,db00000 +348ce88,db00000 +348ce8c,db00000 +348ce90,dffffc0 +348ce94,db00000 +348ce98,db00000 +348ce9c,db00000 +348cea0,dfffff0 +348ceb8,bfffff4 +348cebc,bd00000 +348cec0,bd00000 +348cec4,bd00000 +348cec8,bffffc0 +348cecc,bd00000 +348ced0,bd00000 +348ced4,bd00000 +348ced8,bd00000 +348cef0,1aeed60 +348cef4,be738a0 +348cef8,4e900000 +348cefc,8f400000 +348cf00,9f10bff2 +348cf04,7f4007f2 +348cf08,4e9007f2 +348cf0c,be739f2 +348cf10,1beed90 348cf28,5f6009e0 -348cf40,dffffb0 -348cf44,db000 -348cf48,db000 -348cf4c,db000 -348cf50,db000 -348cf54,db000 -348cf58,db000 -348cf5c,db000 +348cf2c,5f6009e0 +348cf30,5f6009e0 +348cf34,5f6009e0 +348cf38,5fffffe0 +348cf3c,5f6009e0 +348cf40,5f6009e0 +348cf44,5f6009e0 +348cf48,5f6009e0 348cf60,dffffb0 -348cf78,cfff40 -348cf7c,7f40 -348cf80,7f40 -348cf84,7f40 -348cf88,7f40 -348cf8c,7f30 -348cf90,75009e00 -348cf94,8d64dc00 -348cf98,2beec500 -348cfb0,5f6009e7 -348cfb4,5f609e70 -348cfb8,5f69e700 -348cfbc,5fbe8000 -348cfc0,5fedb000 -348cfc4,5f87e800 -348cfc8,5f60ae40 -348cfcc,5f601dc0 -348cfd0,5f6006ea -348cfe8,cc00000 -348cfec,cc00000 -348cff0,cc00000 -348cff4,cc00000 -348cff8,cc00000 -348cffc,cc00000 -348d000,cc00000 -348d004,cc00000 -348d008,cfffff7 -348d020,afa00cf8 -348d024,aed02ee8 -348d028,add59be8 -348d02c,adaac8e8 -348d030,ad5de1e8 -348d034,ad0db0e8 -348d038,ad0000e8 -348d03c,ad0000e8 -348d040,ad0000e8 -348d058,5fc008e0 -348d05c,5fe608e0 -348d060,5fcb08e0 -348d064,5f7e48e0 -348d068,5f5ca8e0 -348d06c,5f57e8e0 -348d070,5f50dce0 -348d074,5f509ee0 -348d078,5f502ee0 -348d090,4ceeb20 -348d094,cd56ea0 -348d098,3e800ae0 -348d09c,7f5008f2 -348d0a0,7f4008f4 -348d0a4,7f5008f2 -348d0a8,3e800ae0 -348d0ac,cd56eb0 +348cf64,db000 +348cf68,db000 +348cf6c,db000 +348cf70,db000 +348cf74,db000 +348cf78,db000 +348cf7c,db000 +348cf80,dffffb0 +348cf98,cfff40 +348cf9c,7f40 +348cfa0,7f40 +348cfa4,7f40 +348cfa8,7f40 +348cfac,7f30 +348cfb0,75009e00 +348cfb4,8d64dc00 +348cfb8,2beec500 +348cfd0,5f6009e7 +348cfd4,5f609e70 +348cfd8,5f69e700 +348cfdc,5fbe8000 +348cfe0,5fedb000 +348cfe4,5f87e800 +348cfe8,5f60ae40 +348cfec,5f601dc0 +348cff0,5f6006ea +348d008,cc00000 +348d00c,cc00000 +348d010,cc00000 +348d014,cc00000 +348d018,cc00000 +348d01c,cc00000 +348d020,cc00000 +348d024,cc00000 +348d028,cfffff7 +348d040,afa00cf8 +348d044,aed02ee8 +348d048,add59be8 +348d04c,adaac8e8 +348d050,ad5de1e8 +348d054,ad0db0e8 +348d058,ad0000e8 +348d05c,ad0000e8 +348d060,ad0000e8 +348d078,5fc008e0 +348d07c,5fe608e0 +348d080,5fcb08e0 +348d084,5f7e48e0 +348d088,5f5ca8e0 +348d08c,5f57e8e0 +348d090,5f50dce0 +348d094,5f509ee0 +348d098,5f502ee0 348d0b0,4ceeb20 -348d0c8,dffed60 -348d0cc,db05ce2 -348d0d0,db006f6 -348d0d4,db006f6 -348d0d8,db05ce2 -348d0dc,dffed60 -348d0e0,db00000 -348d0e4,db00000 -348d0e8,db00000 -348d100,4ceeb20 -348d104,cd56ea0 -348d108,3e800ae0 -348d10c,7f5008f2 -348d110,7f4008f4 -348d114,7f5008f1 -348d118,3e800ad0 -348d11c,cd56ea0 -348d120,4cefc20 -348d124,ae50 -348d128,c80 -348d138,5ffeeb20 -348d13c,5f717eb0 -348d140,5f700cd0 -348d144,5f716ea0 -348d148,5fffea00 -348d14c,5f72ae40 -348d150,5f700db0 -348d154,5f7008e5 -348d158,5f7000db -348d170,6ceeb30 -348d174,dc45a90 -348d178,4f600000 -348d17c,ec60000 -348d180,5ceeb40 -348d184,6cc0 -348d188,8e0 -348d18c,c735cd0 -348d190,8deec50 -348d1a8,cffffffb -348d1ac,db000 -348d1b0,db000 -348d1b4,db000 -348d1b8,db000 -348d1bc,db000 -348d1c0,db000 -348d1c4,db000 -348d1c8,db000 -348d1e0,4f7009e0 -348d1e4,4f7009e0 -348d1e8,4f7009e0 -348d1ec,4f7009e0 -348d1f0,4f7009e0 -348d1f4,3f7009e0 -348d1f8,2e700ad0 -348d1fc,dc45dc0 -348d200,5ceec40 -348d218,ad0003e8 -348d21c,6f5008e3 -348d220,e900bc0 -348d224,bc00d90 -348d228,8e15e40 -348d22c,2e7ad00 -348d230,cbca00 -348d234,9de600 -348d238,3ed000 -348d250,e80000ad -348d254,da0000cb -348d258,cb0000da -348d25c,ac0ec0e8 -348d260,8d6de1e5 -348d264,6e9bd8e0 -348d268,1ec8acd0 -348d26c,de37ec0 -348d270,cd00ea0 -348d288,6e7007e7 -348d28c,ad21db0 -348d290,2daad20 -348d294,7ee700 -348d298,3ee200 -348d29c,bdda00 -348d2a0,7e67e60 -348d2a4,3ea00bd0 -348d2a8,bd2004e9 -348d2c0,ae2005e8 -348d2c4,2da00cc0 -348d2c8,7e57e50 -348d2cc,ccda00 -348d2d0,4ed200 -348d2d4,db000 -348d2d8,db000 -348d2dc,db000 -348d2e0,db000 -348d2f8,efffff8 -348d2fc,bd3 -348d300,7e70 -348d304,3ea00 -348d308,bd100 -348d30c,8e5000 -348d310,4e90000 -348d314,cc00000 -348d318,1ffffffa -348d328,4ffc00 -348d32c,4f5000 -348d330,4f5000 -348d334,4f5000 -348d338,4f5000 -348d33c,4f5000 -348d340,4f5000 -348d344,4f5000 -348d348,4f5000 +348d0b4,cd56ea0 +348d0b8,3e800ae0 +348d0bc,7f5008f2 +348d0c0,7f4008f4 +348d0c4,7f5008f2 +348d0c8,3e800ae0 +348d0cc,cd56eb0 +348d0d0,4ceeb20 +348d0e8,dffed60 +348d0ec,db05ce2 +348d0f0,db006f6 +348d0f4,db006f6 +348d0f8,db05ce2 +348d0fc,dffed60 +348d100,db00000 +348d104,db00000 +348d108,db00000 +348d120,4ceeb20 +348d124,cd56ea0 +348d128,3e800ae0 +348d12c,7f5008f2 +348d130,7f4008f4 +348d134,7f5008f1 +348d138,3e800ad0 +348d13c,cd56ea0 +348d140,4cefc20 +348d144,ae50 +348d148,c80 +348d158,5ffeeb20 +348d15c,5f717eb0 +348d160,5f700cd0 +348d164,5f716ea0 +348d168,5fffea00 +348d16c,5f72ae40 +348d170,5f700db0 +348d174,5f7008e5 +348d178,5f7000db +348d190,6ceeb30 +348d194,dc45a90 +348d198,4f600000 +348d19c,ec60000 +348d1a0,5ceeb40 +348d1a4,6cc0 +348d1a8,8e0 +348d1ac,c735cd0 +348d1b0,8deec50 +348d1c8,cffffffb +348d1cc,db000 +348d1d0,db000 +348d1d4,db000 +348d1d8,db000 +348d1dc,db000 +348d1e0,db000 +348d1e4,db000 +348d1e8,db000 +348d200,4f7009e0 +348d204,4f7009e0 +348d208,4f7009e0 +348d20c,4f7009e0 +348d210,4f7009e0 +348d214,3f7009e0 +348d218,2e700ad0 +348d21c,dc45dc0 +348d220,5ceec40 +348d238,ad0003e8 +348d23c,6f5008e3 +348d240,e900bc0 +348d244,bc00d90 +348d248,8e15e40 +348d24c,2e7ad00 +348d250,cbca00 +348d254,9de600 +348d258,3ed000 +348d270,e80000ad +348d274,da0000cb +348d278,cb0000da +348d27c,ac0ec0e8 +348d280,8d6de1e5 +348d284,6e9bd8e0 +348d288,1ec8acd0 +348d28c,de37ec0 +348d290,cd00ea0 +348d2a8,6e7007e7 +348d2ac,ad21db0 +348d2b0,2daad20 +348d2b4,7ee700 +348d2b8,3ee200 +348d2bc,bdda00 +348d2c0,7e67e60 +348d2c4,3ea00bd0 +348d2c8,bd2004e9 +348d2e0,ae2005e8 +348d2e4,2da00cc0 +348d2e8,7e57e50 +348d2ec,ccda00 +348d2f0,4ed200 +348d2f4,db000 +348d2f8,db000 +348d2fc,db000 +348d300,db000 +348d318,efffff8 +348d31c,bd3 +348d320,7e70 +348d324,3ea00 +348d328,bd100 +348d32c,8e5000 +348d330,4e90000 +348d334,cc00000 +348d338,1ffffffa +348d348,4ffc00 348d34c,4f5000 348d350,4f5000 -348d354,4ffc00 -348d368,6e500000 -348d36c,cb00000 -348d370,7e30000 -348d374,da0000 -348d378,9e2000 -348d37c,1e9000 -348d380,ad000 -348d384,3e800 -348d388,bc00 -348d38c,4e60 -348d390,bc0 -348d398,dfe000 -348d39c,8e000 -348d3a0,8e000 -348d3a4,8e000 -348d3a8,8e000 -348d3ac,8e000 -348d3b0,8e000 -348d3b4,8e000 -348d3b8,8e000 +348d354,4f5000 +348d358,4f5000 +348d35c,4f5000 +348d360,4f5000 +348d364,4f5000 +348d368,4f5000 +348d36c,4f5000 +348d370,4f5000 +348d374,4ffc00 +348d388,6e500000 +348d38c,cb00000 +348d390,7e30000 +348d394,da0000 +348d398,9e2000 +348d39c,1e9000 +348d3a0,ad000 +348d3a4,3e800 +348d3a8,bc00 +348d3ac,4e60 +348d3b0,bc0 +348d3b8,dfe000 348d3bc,8e000 348d3c0,8e000 -348d3c4,dfe000 -348d3d8,5ed200 -348d3dc,dcdb00 -348d3e0,ad25e80 -348d3e4,7e5007e5 -348d43c,fffffffd -348d444,2ca0000 -348d448,2c9000 -348d488,5ceeb10 -348d48c,b936da0 -348d490,bc0 -348d494,8deffc0 -348d498,3e930bd0 -348d49c,4f827ed0 -348d4a0,aeedbd0 -348d4b0,d900000 -348d4b4,d900000 -348d4b8,d900000 -348d4bc,d900000 -348d4c0,dbdec40 -348d4c4,de65dc0 -348d4c8,db008e0 -348d4cc,da007f2 -348d4d0,db008e0 -348d4d4,de64db0 -348d4d8,dbdec40 -348d4f8,8ded70 -348d4fc,7e936a0 -348d500,cc00000 -348d504,db00000 -348d508,cc00000 -348d50c,7e936a0 -348d510,8ded70 -348d520,bc0 -348d524,bc0 -348d528,bc0 -348d52c,bc0 -348d530,5dedcc0 -348d534,dc48ec0 -348d538,5f600cc0 -348d53c,7f300bc0 -348d540,5f600cc0 -348d544,dc48ec0 -348d548,5dedcc0 -348d568,3beec30 -348d56c,cd54cc0 -348d570,4f6007e0 -348d574,6ffffff3 -348d578,4f500000 -348d57c,cc538c0 -348d580,3beec60 -348d590,5ded0 -348d594,cb200 -348d598,d9000 -348d59c,e8000 -348d5a0,dffffd0 -348d5a4,e8000 -348d5a8,e8000 -348d5ac,e8000 -348d5b0,e8000 -348d5b4,e8000 -348d5b8,e8000 -348d5d8,5dedcc0 -348d5dc,dc48ec0 -348d5e0,5f600cc0 -348d5e4,7f300bc0 -348d5e8,5f600cc0 -348d5ec,dc48ec0 -348d5f0,5dedcb0 -348d5f4,ca0 -348d5f8,9947e60 -348d5fc,4cee900 -348d600,da00000 -348d604,da00000 -348d608,da00000 -348d60c,da00000 -348d610,dbded40 -348d614,de65da0 -348d618,db00bc0 -348d61c,da00bc0 -348d620,da00bc0 -348d624,da00bc0 -348d628,da00bc0 -348d638,bc000 -348d648,9ffc000 -348d64c,bc000 -348d650,bc000 -348d654,bc000 +348d3c4,8e000 +348d3c8,8e000 +348d3cc,8e000 +348d3d0,8e000 +348d3d4,8e000 +348d3d8,8e000 +348d3dc,8e000 +348d3e0,8e000 +348d3e4,dfe000 +348d3f8,5ed200 +348d3fc,dcdb00 +348d400,ad25e80 +348d404,7e5007e5 +348d45c,fffffffd +348d464,2ca0000 +348d468,2c9000 +348d4a8,5ceeb10 +348d4ac,b936da0 +348d4b0,bc0 +348d4b4,8deffc0 +348d4b8,3e930bd0 +348d4bc,4f827ed0 +348d4c0,aeedbd0 +348d4d0,d900000 +348d4d4,d900000 +348d4d8,d900000 +348d4dc,d900000 +348d4e0,dbdec40 +348d4e4,de65dc0 +348d4e8,db008e0 +348d4ec,da007f2 +348d4f0,db008e0 +348d4f4,de64db0 +348d4f8,dbdec40 +348d518,8ded70 +348d51c,7e936a0 +348d520,cc00000 +348d524,db00000 +348d528,cc00000 +348d52c,7e936a0 +348d530,8ded70 +348d540,bc0 +348d544,bc0 +348d548,bc0 +348d54c,bc0 +348d550,5dedcc0 +348d554,dc48ec0 +348d558,5f600cc0 +348d55c,7f300bc0 +348d560,5f600cc0 +348d564,dc48ec0 +348d568,5dedcc0 +348d588,3beec30 +348d58c,cd54cc0 +348d590,4f6007e0 +348d594,6ffffff3 +348d598,4f500000 +348d59c,cc538c0 +348d5a0,3beec60 +348d5b0,5ded0 +348d5b4,cb200 +348d5b8,d9000 +348d5bc,e8000 +348d5c0,dffffd0 +348d5c4,e8000 +348d5c8,e8000 +348d5cc,e8000 +348d5d0,e8000 +348d5d4,e8000 +348d5d8,e8000 +348d5f8,5dedcc0 +348d5fc,dc48ec0 +348d600,5f600cc0 +348d604,7f300bc0 +348d608,5f600cc0 +348d60c,dc48ec0 +348d610,5dedcb0 +348d614,ca0 +348d618,9947e60 +348d61c,4cee900 +348d620,da00000 +348d624,da00000 +348d628,da00000 +348d62c,da00000 +348d630,dbded40 +348d634,de65da0 +348d638,db00bc0 +348d63c,da00bc0 +348d640,da00bc0 +348d644,da00bc0 +348d648,da00bc0 348d658,bc000 -348d65c,bc000 -348d660,effffe0 -348d670,7e000 -348d680,7ffe000 -348d684,7e000 -348d688,7e000 -348d68c,7e000 +348d668,9ffc000 +348d66c,bc000 +348d670,bc000 +348d674,bc000 +348d678,bc000 +348d67c,bc000 +348d680,effffe0 348d690,7e000 -348d694,7e000 -348d698,7e000 -348d69c,7e000 -348d6a0,1bd000 -348d6a4,dfe7000 -348d6a8,bc00000 -348d6ac,bc00000 -348d6b0,bc00000 -348d6b4,bc00000 -348d6b8,bc03dc2 -348d6bc,bc3db00 -348d6c0,bddc000 -348d6c4,bfce500 -348d6c8,bd0cd10 -348d6cc,bc03db0 -348d6d0,bc007e8 -348d6e0,eff4000 -348d6e4,5f4000 -348d6e8,5f4000 -348d6ec,5f4000 -348d6f0,5f4000 -348d6f4,5f4000 -348d6f8,5f4000 -348d6fc,5f4000 -348d700,4f5000 -348d704,ea000 -348d708,8efb0 -348d728,8dddaec0 -348d72c,8e4dc5e4 -348d730,8d0cb0e6 -348d734,8d0ba0e7 -348d738,8d0ba0e7 -348d73c,8d0ba0e7 -348d740,8d0ba0e7 -348d760,dbded40 -348d764,de65da0 -348d768,db00bc0 -348d76c,da00bc0 -348d770,da00bc0 -348d774,da00bc0 -348d778,da00bc0 -348d798,4ceeb20 -348d79c,cd56da0 -348d7a0,1e700ad0 -348d7a4,5f6008e0 -348d7a8,1e700ad0 -348d7ac,cd46db0 -348d7b0,4ceeb20 -348d7d0,dbdec30 -348d7d4,de65db0 -348d7d8,db009e0 -348d7dc,da007e0 -348d7e0,db008e0 -348d7e4,de65db0 -348d7e8,dbeec40 -348d7ec,d900000 -348d7f0,d900000 -348d7f4,d900000 -348d808,4cedcc0 -348d80c,cc47ec0 -348d810,1e700cc0 -348d814,5f600bc0 -348d818,2e700cc0 -348d81c,cc47ec0 -348d820,5cedbc0 -348d824,ac0 -348d828,ac0 -348d82c,ac0 -348d840,ccdef9 -348d844,ce8300 -348d848,cb0000 -348d84c,ca0000 -348d850,ca0000 -348d854,ca0000 -348d858,ca0000 -348d878,4ceea10 -348d87c,bd45b60 -348d880,bd40000 -348d884,3bddb20 -348d888,4da0 -348d88c,b945ea0 -348d890,5ceeb20 -348d8a8,8e0000 -348d8ac,8e0000 -348d8b0,6fffffb0 -348d8b4,8e0000 -348d8b8,8e0000 -348d8bc,8e0000 -348d8c0,8e0000 -348d8c4,6e7000 -348d8c8,befb0 -348d8e8,da00bc0 -348d8ec,da00bc0 -348d8f0,da00bc0 -348d8f4,da00bc0 -348d8f8,da00bc0 -348d8fc,bd47ec0 -348d900,5dedbc0 -348d920,6e3007e3 -348d924,d900bc0 -348d928,ad01e80 -348d92c,5e48e20 -348d930,dacb00 -348d934,9de700 -348d938,3ee000 -348d958,e80000ac -348d95c,ca0000ca -348d960,ac0db0e7 -348d964,6e3dd5e2 -348d968,eabcad0 -348d96c,ce79eb0 -348d970,ae15f80 -348d990,3da00bc0 -348d994,6e69e40 -348d998,9ee700 -348d99c,2ed000 -348d9a0,ccda00 -348d9a4,9e46e70 -348d9a8,6e7009e4 -348d9c8,6e5005e5 -348d9cc,da00bd0 -348d9d0,9e00e90 -348d9d4,3e78e30 -348d9d8,cccc00 -348d9dc,7ee700 -348d9e0,de000 -348d9e4,da000 -348d9e8,8e5000 -348d9ec,dea0000 -348da00,bffffc0 -348da04,5e70 -348da08,3d900 -348da0c,cb000 -348da10,bd2000 -348da14,9e40000 -348da18,dffffc0 -348da28,6dea0 -348da2c,bd300 -348da30,cb000 -348da34,cb000 -348da38,5ea000 -348da3c,bfd2000 -348da40,7e9000 -348da44,db000 -348da48,cb000 -348da4c,cb000 -348da50,bd400 -348da54,5dea0 -348da60,ca000 -348da64,ca000 -348da68,ca000 -348da6c,ca000 -348da70,ca000 -348da74,ca000 -348da78,ca000 -348da7c,ca000 +348d6a0,7ffe000 +348d6a4,7e000 +348d6a8,7e000 +348d6ac,7e000 +348d6b0,7e000 +348d6b4,7e000 +348d6b8,7e000 +348d6bc,7e000 +348d6c0,1bd000 +348d6c4,dfe7000 +348d6c8,bc00000 +348d6cc,bc00000 +348d6d0,bc00000 +348d6d4,bc00000 +348d6d8,bc03dc2 +348d6dc,bc3db00 +348d6e0,bddc000 +348d6e4,bfce500 +348d6e8,bd0cd10 +348d6ec,bc03db0 +348d6f0,bc007e8 +348d700,eff4000 +348d704,5f4000 +348d708,5f4000 +348d70c,5f4000 +348d710,5f4000 +348d714,5f4000 +348d718,5f4000 +348d71c,5f4000 +348d720,4f5000 +348d724,ea000 +348d728,8efb0 +348d748,8dddaec0 +348d74c,8e4dc5e4 +348d750,8d0cb0e6 +348d754,8d0ba0e7 +348d758,8d0ba0e7 +348d75c,8d0ba0e7 +348d760,8d0ba0e7 +348d780,dbded40 +348d784,de65da0 +348d788,db00bc0 +348d78c,da00bc0 +348d790,da00bc0 +348d794,da00bc0 +348d798,da00bc0 +348d7b8,4ceeb20 +348d7bc,cd56da0 +348d7c0,1e700ad0 +348d7c4,5f6008e0 +348d7c8,1e700ad0 +348d7cc,cd46db0 +348d7d0,4ceeb20 +348d7f0,dbdec30 +348d7f4,de65db0 +348d7f8,db009e0 +348d7fc,da007e0 +348d800,db008e0 +348d804,de65db0 +348d808,dbeec40 +348d80c,d900000 +348d810,d900000 +348d814,d900000 +348d828,4cedcc0 +348d82c,cc47ec0 +348d830,1e700cc0 +348d834,5f600bc0 +348d838,2e700cc0 +348d83c,cc47ec0 +348d840,5cedbc0 +348d844,ac0 +348d848,ac0 +348d84c,ac0 +348d860,ccdef9 +348d864,ce8300 +348d868,cb0000 +348d86c,ca0000 +348d870,ca0000 +348d874,ca0000 +348d878,ca0000 +348d898,4ceea10 +348d89c,bd45b60 +348d8a0,bd40000 +348d8a4,3bddb20 +348d8a8,4da0 +348d8ac,b945ea0 +348d8b0,5ceeb20 +348d8c8,8e0000 +348d8cc,8e0000 +348d8d0,6fffffb0 +348d8d4,8e0000 +348d8d8,8e0000 +348d8dc,8e0000 +348d8e0,8e0000 +348d8e4,6e7000 +348d8e8,befb0 +348d908,da00bc0 +348d90c,da00bc0 +348d910,da00bc0 +348d914,da00bc0 +348d918,da00bc0 +348d91c,bd47ec0 +348d920,5dedbc0 +348d940,6e3007e3 +348d944,d900bc0 +348d948,ad01e80 +348d94c,5e48e20 +348d950,dacb00 +348d954,9de700 +348d958,3ee000 +348d978,e80000ac +348d97c,ca0000ca +348d980,ac0db0e7 +348d984,6e3dd5e2 +348d988,eabcad0 +348d98c,ce79eb0 +348d990,ae15f80 +348d9b0,3da00bc0 +348d9b4,6e69e40 +348d9b8,9ee700 +348d9bc,2ed000 +348d9c0,ccda00 +348d9c4,9e46e70 +348d9c8,6e7009e4 +348d9e8,6e5005e5 +348d9ec,da00bd0 +348d9f0,9e00e90 +348d9f4,3e78e30 +348d9f8,cccc00 +348d9fc,7ee700 +348da00,de000 +348da04,da000 +348da08,8e5000 +348da0c,dea0000 +348da20,bffffc0 +348da24,5e70 +348da28,3d900 +348da2c,cb000 +348da30,bd2000 +348da34,9e40000 +348da38,dffffc0 +348da48,6dea0 +348da4c,bd300 +348da50,cb000 +348da54,cb000 +348da58,5ea000 +348da5c,bfd2000 +348da60,7e9000 +348da64,db000 +348da68,cb000 +348da6c,cb000 +348da70,bd400 +348da74,5dea0 348da80,ca000 348da84,ca000 348da88,ca000 348da8c,ca000 348da90,ca000 -348da98,bed3000 -348da9c,4e9000 -348daa0,da000 +348da94,ca000 +348da98,ca000 +348da9c,ca000 +348daa0,ca000 348daa4,ca000 -348daa8,bc400 -348daac,5efa0 -348dab0,bd500 -348dab4,cb000 -348dab8,da000 -348dabc,da000 -348dac0,5e8000 -348dac4,bec2000 -348dae8,5ded83a7 -348daec,9838dec3 -348db60,7f024429 -348db64,3c334133 -348db68,41334633 -348db6c,44297f02 -348db9c,5409 -348dba0,4dc548ff -348dba4,41ff43ff -348dba8,47ff49ff -348dbac,43ff20c5 -348dbb0,c0000 -348dbdc,3f75 -348dbe0,49ff33ff -348dbe4,28ff2dff -348dbe8,33ff39ff -348dbec,3cff00ff -348dbf0,770000 -348dc1c,329d -348dc20,37ff1bff -348dc24,21ff28ff -348dc28,2fff35ff -348dc2c,3cff00ff -348dc30,9d0000 -348dc5c,329e -348dc60,35ff21ff -348dc64,28ff06ff -348dc68,9ff3cff -348dc6c,42ff00ff -348dc70,9e0000 -348dc9c,359e -348dca0,39ff27ff -348dca4,2eff00ff -348dca8,2ff42ff -348dcac,48ff00ff -348dcb0,9e0000 -348dcdc,3a9e -348dce0,3eff2eff -348dce4,35ff00ff -348dce8,dff48ff -348dcec,4dff00ff -348dcf0,9e0000 -348dd1c,3e9e -348dd20,42ff35ff -348dd24,3bff1bff -348dd28,27ff4dff -348dd2c,53ff00ff -348dd30,9e0000 -348dd5c,439e -348dd60,47ff3bff -348dd64,41ff47ff -348dd68,4dff52ff -348dd6c,58ff00ff -348dd70,9e0000 -348dd9c,4d9e -348dda0,4dff41ff -348dda4,47ff4dff -348dda8,52ff57ff -348ddac,5cff00ff -348ddb0,9e0000 -348ddcc,3f04474f -348ddd0,3e663e66 -348ddd4,43664666 -348ddd8,48664d66 -348dddc,57665bc5 -348dde0,53ff47ff -348dde4,4dff52ff -348dde8,57ff5cff -348ddec,60ff0eff -348ddf0,19c56666 -348ddf4,66666466 -348ddf8,61665f66 -348ddfc,5c665a66 -348de00,504f3f04 -348de08,6605 -348de0c,4ec34bff -348de10,41ff41ff -348de14,45ff48ff -348de18,4cff4fff -348de1c,55ff59ff -348de20,4fff4dff -348de24,52ff57ff -348de28,5cff60ff -348de2c,64ff61ff -348de30,67ff66ff -348de34,64ff62ff -348de38,60ff5dff -348de3c,5bff57ff -348de40,49ff0ec3 -348de44,50000 -348de48,3958 -348de4c,44ff31ff -348de50,20ff25ff -348de54,2bff31ff -348de58,38ff3eff -348de5c,44ff49ff -348de60,4dff52ff -348de64,57ff5cff -348de68,60ff64ff -348de6c,68ff67ff -348de70,64ff60ff -348de74,5cff58ff -348de78,53ff4eff -348de7c,48ff43ff -348de80,32ff00ff -348de84,580000 -348de88,2f71 -348de8c,36ff1dff -348de90,1fff26ff -348de94,2dff34ff -348de98,3aff41ff -348de9c,47ff4cff -348dea0,52ff57ff -348dea4,5cff60ff -348dea8,64ff68ff -348deac,67ff64ff -348deb0,60ff5bff -348deb4,57ff51ff -348deb8,4cff46ff -348debc,40ff3aff -348dec0,27ff00ff -348dec4,710000 -348dec8,2f71 -348decc,36ff21ff -348ded0,16ff00ff -348ded4,ff00ff -348ded8,2cff47ff -348dedc,4cff52ff -348dee0,57ff5cff -348dee4,60ff64ff -348dee8,67ff67ff -348deec,64ff60ff -348def0,5bff57ff -348def4,52ff0dff -348def8,ff00ff -348defc,aff33ff -348df00,21ff00ff -348df04,710000 -348df08,3371 -348df0c,3aff28ff -348df10,22ff0fff -348df14,13ff19ff -348df18,39ff4cff -348df1c,52ff57ff -348df20,5bff60ff -348df24,64ff67ff -348df28,67ff64ff -348df2c,60ff5cff -348df30,57ff52ff -348df34,4cff1dff -348df38,12ff14ff -348df3c,19ff2dff -348df40,1bff00ff -348df44,710000 -348df48,3871 -348df4c,3dff2fff -348df50,33ff3aff -348df54,40ff46ff -348df58,4cff51ff -348df5c,57ff5bff -348df60,60ff64ff -348df64,67ff68ff -348df68,64ff60ff -348df6c,5cff57ff -348df70,52ff4cff -348df74,47ff41ff -348df78,3aff34ff -348df7c,2dff26ff -348df80,12ff00ff -348df84,710000 -348df88,3569 -348df8c,37ff33ff -348df90,3aff40ff -348df94,46ff4cff -348df98,51ff57ff -348df9c,5bff60ff -348dfa0,64ff67ff -348dfa4,68ff64ff -348dfa8,60ff5cff -348dfac,57ff52ff -348dfb0,4dff47ff -348dfb4,41ff3aff -348dfb8,34ff2dff -348dfbc,26ff1fff -348dfc0,6ff00ff -348dfc4,690000 -348dfc8,1e21 -348dfcc,2f600ff -348dfd0,ff00ff -348dfd4,ff00ff -348dfd8,ff00ff -348dfdc,2ff1eff -348dfe0,60ff68ff -348dfe4,64ff60ff -348dfe8,5cff57ff -348dfec,52ff2cff -348dff0,6ff00ff +348daa8,ca000 +348daac,ca000 +348dab0,ca000 +348dab8,bed3000 +348dabc,4e9000 +348dac0,da000 +348dac4,ca000 +348dac8,bc400 +348dacc,5efa0 +348dad0,bd500 +348dad4,cb000 +348dad8,da000 +348dadc,da000 +348dae0,5e8000 +348dae4,bec2000 +348db08,5ded83a7 +348db0c,9838dec3 +348db80,7f024429 +348db84,3c334133 +348db88,41334633 +348db8c,44297f02 +348dbbc,5409 +348dbc0,4dc548ff +348dbc4,41ff43ff +348dbc8,47ff49ff +348dbcc,43ff20c5 +348dbd0,c0000 +348dbfc,3f75 +348dc00,49ff33ff +348dc04,28ff2dff +348dc08,33ff39ff +348dc0c,3cff00ff +348dc10,770000 +348dc3c,329d +348dc40,37ff1bff +348dc44,21ff28ff +348dc48,2fff35ff +348dc4c,3cff00ff +348dc50,9d0000 +348dc7c,329e +348dc80,35ff21ff +348dc84,28ff06ff +348dc88,9ff3cff +348dc8c,42ff00ff +348dc90,9e0000 +348dcbc,359e +348dcc0,39ff27ff +348dcc4,2eff00ff +348dcc8,2ff42ff +348dccc,48ff00ff +348dcd0,9e0000 +348dcfc,3a9e +348dd00,3eff2eff +348dd04,35ff00ff +348dd08,dff48ff +348dd0c,4dff00ff +348dd10,9e0000 +348dd3c,3e9e +348dd40,42ff35ff +348dd44,3bff1bff +348dd48,27ff4dff +348dd4c,53ff00ff +348dd50,9e0000 +348dd7c,439e +348dd80,47ff3bff +348dd84,41ff47ff +348dd88,4dff52ff +348dd8c,58ff00ff +348dd90,9e0000 +348ddbc,4d9e +348ddc0,4dff41ff +348ddc4,47ff4dff +348ddc8,52ff57ff +348ddcc,5cff00ff +348ddd0,9e0000 +348ddec,3f04474f +348ddf0,3e663e66 +348ddf4,43664666 +348ddf8,48664d66 +348ddfc,57665bc5 +348de00,53ff47ff +348de04,4dff52ff +348de08,57ff5cff +348de0c,60ff0eff +348de10,19c56666 +348de14,66666466 +348de18,61665f66 +348de1c,5c665a66 +348de20,504f3f04 +348de28,6605 +348de2c,4ec34bff +348de30,41ff41ff +348de34,45ff48ff +348de38,4cff4fff +348de3c,55ff59ff +348de40,4fff4dff +348de44,52ff57ff +348de48,5cff60ff +348de4c,64ff61ff +348de50,67ff66ff +348de54,64ff62ff +348de58,60ff5dff +348de5c,5bff57ff +348de60,49ff0ec3 +348de64,50000 +348de68,3958 +348de6c,44ff31ff +348de70,20ff25ff +348de74,2bff31ff +348de78,38ff3eff +348de7c,44ff49ff +348de80,4dff52ff +348de84,57ff5cff +348de88,60ff64ff +348de8c,68ff67ff +348de90,64ff60ff +348de94,5cff58ff +348de98,53ff4eff +348de9c,48ff43ff +348dea0,32ff00ff +348dea4,580000 +348dea8,2f71 +348deac,36ff1dff +348deb0,1fff26ff +348deb4,2dff34ff +348deb8,3aff41ff +348debc,47ff4cff +348dec0,52ff57ff +348dec4,5cff60ff +348dec8,64ff68ff +348decc,67ff64ff +348ded0,60ff5bff +348ded4,57ff51ff +348ded8,4cff46ff +348dedc,40ff3aff +348dee0,27ff00ff +348dee4,710000 +348dee8,2f71 +348deec,36ff21ff +348def0,16ff00ff +348def4,ff00ff +348def8,2cff47ff +348defc,4cff52ff +348df00,57ff5cff +348df04,60ff64ff +348df08,67ff67ff +348df0c,64ff60ff +348df10,5bff57ff +348df14,52ff0dff +348df18,ff00ff +348df1c,aff33ff +348df20,21ff00ff +348df24,710000 +348df28,3371 +348df2c,3aff28ff +348df30,22ff0fff +348df34,13ff19ff +348df38,39ff4cff +348df3c,52ff57ff +348df40,5bff60ff +348df44,64ff67ff +348df48,67ff64ff +348df4c,60ff5cff +348df50,57ff52ff +348df54,4cff1dff +348df58,12ff14ff +348df5c,19ff2dff +348df60,1bff00ff +348df64,710000 +348df68,3871 +348df6c,3dff2fff +348df70,33ff3aff +348df74,40ff46ff +348df78,4cff51ff +348df7c,57ff5bff +348df80,60ff64ff +348df84,67ff68ff +348df88,64ff60ff +348df8c,5cff57ff +348df90,52ff4cff +348df94,47ff41ff +348df98,3aff34ff +348df9c,2dff26ff +348dfa0,12ff00ff +348dfa4,710000 +348dfa8,3569 +348dfac,37ff33ff +348dfb0,3aff40ff +348dfb4,46ff4cff +348dfb8,51ff57ff +348dfbc,5bff60ff +348dfc0,64ff67ff +348dfc4,68ff64ff +348dfc8,60ff5cff +348dfcc,57ff52ff +348dfd0,4dff47ff +348dfd4,41ff3aff +348dfd8,34ff2dff +348dfdc,26ff1fff +348dfe0,6ff00ff +348dfe4,690000 +348dfe8,1e21 +348dfec,2f600ff +348dff0,ff00ff 348dff4,ff00ff 348dff8,ff00ff -348dffc,ff00ff -348e000,ff00f6 -348e004,210000 -348e00c,3b00ae -348e010,cc00cc -348e014,cc00cc -348e018,cc00cc -348e01c,cc03ec -348e020,62ff64ff -348e024,60ff5cff -348e028,57ff52ff -348e02c,4dff00ff -348e030,ec00cc +348dffc,2ff1eff +348e000,60ff68ff +348e004,64ff60ff +348e008,5cff57ff +348e00c,52ff2cff +348e010,6ff00ff +348e014,ff00ff +348e018,ff00ff +348e01c,ff00ff +348e020,ff00f6 +348e024,210000 +348e02c,3b00ae +348e030,cc00cc 348e034,cc00cc 348e038,cc00cc -348e03c,cc00cc -348e040,ae003b -348e05c,5f9e -348e060,65ff60ff -348e064,5cff57ff -348e068,52ff4dff -348e06c,47ff00ff -348e070,9e0000 -348e09c,659e -348e0a0,63ff5cff -348e0a4,57ff52ff -348e0a8,4dff47ff -348e0ac,41ff00ff -348e0b0,9e0000 -348e0dc,649e -348e0e0,61ff58ff -348e0e4,53ff35ff -348e0e8,31ff41ff -348e0ec,3bff00ff -348e0f0,9e0000 -348e11c,609e -348e120,5eff53ff -348e124,4dff00ff -348e128,ff3bff -348e12c,35ff00ff -348e130,9e0000 -348e15c,5d9e -348e160,5bff4dff -348e164,48ff00ff -348e168,6ff35ff -348e16c,2eff00ff -348e170,9e0000 -348e19c,5a9e -348e1a0,57ff48ff -348e1a4,42ff03ff -348e1a8,cff2eff -348e1ac,28ff00ff -348e1b0,9e0000 -348e1dc,559e -348e1e0,53ff42ff -348e1e4,3cff2dff -348e1e8,28ff28ff -348e1ec,1fff00ff -348e1f0,9e0000 -348e21c,4b91 -348e220,44ff33ff -348e224,35ff2fff -348e228,28ff1fff -348e22c,7ff00ff -348e230,900000 -348e25c,1229 -348e260,f700ff -348e264,ff00ff -348e268,ff00ff -348e26c,ff00f8 -348e270,2e0000 -348e2a0,30008c -348e2a4,990099 -348e2a8,990099 -348e2ac,8c0030 -348e308,f0f0f0f0 -348e30c,f0f0f0f0 -348e310,f0f0f0f0 -348e314,f0f0f0f0 -348e318,f0f0f0f0 -348e31c,f0f0f0f0 -348e320,dff0f0f0 -348e324,f0f0f0f0 +348e03c,cc03ec +348e040,62ff64ff +348e044,60ff5cff +348e048,57ff52ff +348e04c,4dff00ff +348e050,ec00cc +348e054,cc00cc +348e058,cc00cc +348e05c,cc00cc +348e060,ae003b +348e07c,5f9e +348e080,65ff60ff +348e084,5cff57ff +348e088,52ff4dff +348e08c,47ff00ff +348e090,9e0000 +348e0bc,659e +348e0c0,63ff5cff +348e0c4,57ff52ff +348e0c8,4dff47ff +348e0cc,41ff00ff +348e0d0,9e0000 +348e0fc,649e +348e100,61ff58ff +348e104,53ff35ff +348e108,31ff41ff +348e10c,3bff00ff +348e110,9e0000 +348e13c,609e +348e140,5eff53ff +348e144,4dff00ff +348e148,ff3bff +348e14c,35ff00ff +348e150,9e0000 +348e17c,5d9e +348e180,5bff4dff +348e184,48ff00ff +348e188,6ff35ff +348e18c,2eff00ff +348e190,9e0000 +348e1bc,5a9e +348e1c0,57ff48ff +348e1c4,42ff03ff +348e1c8,cff2eff +348e1cc,28ff00ff +348e1d0,9e0000 +348e1fc,559e +348e200,53ff42ff +348e204,3cff2dff +348e208,28ff28ff +348e20c,1fff00ff +348e210,9e0000 +348e23c,4b91 +348e240,44ff33ff +348e244,35ff2fff +348e248,28ff1fff +348e24c,7ff00ff +348e250,900000 +348e27c,1229 +348e280,f700ff +348e284,ff00ff +348e288,ff00ff +348e28c,ff00f8 +348e290,2e0000 +348e2c0,30008c +348e2c4,990099 +348e2c8,990099 +348e2cc,8c0030 348e328,f0f0f0f0 -348e32c,f0f0f0df -348e330,dff0f0f0 +348e32c,f0f0f0f0 +348e330,f0f0f0f0 348e334,f0f0f0f0 348e338,f0f0f0f0 -348e33c,f0f0f0df -348e340,dfcff0f0 +348e33c,f0f0f0f0 +348e340,dff0f0f0 348e344,f0f0f0f0 348e348,f0f0f0f0 -348e34c,f0f0cfcf -348e350,cfcff0f0 +348e34c,f0f0f0df +348e350,dff0f0f0 348e354,f0f0f0f0 348e358,f0f0f0f0 -348e35c,f0f0cfcf -348e360,cfcfcff0 +348e35c,f0f0f0df +348e360,dfcff0f0 348e364,f0f0f0f0 348e368,f0f0f0f0 -348e36c,f0cfcfcf -348e370,cfcfcff0 +348e36c,f0f0cfcf +348e370,cfcff0f0 348e374,f0f0f0f0 348e378,f0f0f0f0 -348e37c,f0cfcfcf -348e380,cfcfcfcf +348e37c,f0f0cfcf +348e380,cfcfcff0 348e384,f0f0f0f0 348e388,f0f0f0f0 -348e38c,cfcfcfcf -348e390,cfbfbfbf +348e38c,f0cfcfcf +348e390,cfcfcff0 348e394,f0f0f0f0 348e398,f0f0f0f0 -348e39c,bfbfbfbf -348e3a0,bfbfbfbf +348e39c,f0cfcfcf +348e3a0,cfcfcfcf 348e3a4,f0f0f0f0 -348e3a8,f0f0f0bf -348e3ac,bfbfbfbf -348e3b0,bfbfbfbf -348e3b4,bff0f0f0 -348e3b8,f0f0f0bf -348e3bc,bfbff0f0 -348e3c0,f0f0f0f0 +348e3a8,f0f0f0f0 +348e3ac,cfcfcfcf +348e3b0,cfbfbfbf +348e3b4,f0f0f0f0 +348e3b8,f0f0f0f0 +348e3bc,bfbfbfbf +348e3c0,bfbfbfbf 348e3c4,f0f0f0f0 -348e3c8,f0f0f0f0 -348e3cc,f0f0f0f0 -348e3d0,f0f0f0f0 -348e3d4,f0f0f0f0 -348e3d8,f0f0f0f0 -348e3dc,f0f0f0f0 +348e3c8,f0f0f0bf +348e3cc,bfbfbfbf +348e3d0,bfbfbfbf +348e3d4,bff0f0f0 +348e3d8,f0f0f0bf +348e3dc,bfbff0f0 348e3e0,f0f0f0f0 348e3e4,f0f0f0f0 348e3e8,f0f0f0f0 @@ -12888,55 +12881,55 @@ ef4f9c,0 348e410,f0f0f0f0 348e414,f0f0f0f0 348e418,f0f0f0f0 -348e41c,f0f0f0cf -348e420,cff0f0f0 +348e41c,f0f0f0f0 +348e420,f0f0f0f0 348e424,f0f0f0f0 348e428,f0f0f0f0 -348e42c,f0f0f0cf -348e430,cfcff0f0 +348e42c,f0f0f0f0 +348e430,f0f0f0f0 348e434,f0f0f0f0 348e438,f0f0f0f0 -348e43c,f0f0bfcf -348e440,cfcff0f0 +348e43c,f0f0f0cf +348e440,cff0f0f0 348e444,f0f0f0f0 348e448,f0f0f0f0 -348e44c,f0f0bfcf +348e44c,f0f0f0cf 348e450,cfcff0f0 348e454,f0f0f0f0 348e458,f0f0f0f0 -348e45c,f0bfcfbf -348e460,bfbfbff0 +348e45c,f0f0bfcf +348e460,cfcff0f0 348e464,f0f0f0f0 348e468,f0f0f0f0 -348e46c,f0bfbfbf -348e470,bfbfbff0 +348e46c,f0f0bfcf +348e470,cfcff0f0 348e474,f0f0f0f0 348e478,f0f0f0f0 -348e47c,bfbfbfbf -348e480,bfbfbfbf +348e47c,f0bfcfbf +348e480,bfbfbff0 348e484,f0f0f0f0 348e488,f0f0f0f0 -348e48c,bfbfbfbf -348e490,bfbfbfbf +348e48c,f0bfbfbf +348e490,bfbfbff0 348e494,f0f0f0f0 348e498,f0f0f0f0 348e49c,bfbfbfbf -348e4a0,bfbfbfaf +348e4a0,bfbfbfbf 348e4a4,f0f0f0f0 -348e4a8,f0f0f0af +348e4a8,f0f0f0f0 348e4ac,bfbfbfbf -348e4b0,afafaff0 +348e4b0,bfbfbfbf 348e4b4,f0f0f0f0 -348e4b8,f0f0f0bf -348e4bc,bfbfaff0 -348e4c0,f0f0f0f0 +348e4b8,f0f0f0f0 +348e4bc,bfbfbfbf +348e4c0,bfbfbfaf 348e4c4,f0f0f0f0 -348e4c8,f0f0f0f0 -348e4cc,f0f0f0f0 -348e4d0,f0f0f0f0 +348e4c8,f0f0f0af +348e4cc,bfbfbfbf +348e4d0,afafaff0 348e4d4,f0f0f0f0 -348e4d8,f0f0f0f0 -348e4dc,f0f0f0f0 +348e4d8,f0f0f0bf +348e4dc,bfbfaff0 348e4e0,f0f0f0f0 348e4e4,f0f0f0f0 348e4e8,f0f0f0f0 @@ -12952,59 +12945,59 @@ ef4f9c,0 348e510,f0f0f0f0 348e514,f0f0f0f0 348e518,f0f0f0f0 -348e51c,f0f0f0ef -348e520,eff0f0f0 +348e51c,f0f0f0f0 +348e520,f0f0f0f0 348e524,f0f0f0f0 348e528,f0f0f0f0 -348e52c,f0f0f0ef -348e530,bfbff0f0 +348e52c,f0f0f0f0 +348e530,f0f0f0f0 348e534,f0f0f0f0 348e538,f0f0f0f0 -348e53c,f0f0dfdf -348e540,bfbff0f0 +348e53c,f0f0f0ef +348e540,eff0f0f0 348e544,f0f0f0f0 348e548,f0f0f0f0 -348e54c,f0f0dfbf -348e550,afaff0f0 +348e54c,f0f0f0ef +348e550,bfbff0f0 348e554,f0f0f0f0 348e558,f0f0f0f0 -348e55c,f0dfdfaf -348e560,afafaff0 +348e55c,f0f0dfdf +348e560,bfbff0f0 348e564,f0f0f0f0 348e568,f0f0f0f0 -348e56c,f0dfafaf -348e570,afafaff0 +348e56c,f0f0dfbf +348e570,afaff0f0 348e574,f0f0f0f0 348e578,f0f0f0f0 -348e57c,dfdfafaf +348e57c,f0dfdfaf 348e580,afafaff0 348e584,f0f0f0f0 348e588,f0f0f0f0 -348e58c,dfdfafaf -348e590,afafaf9f +348e58c,f0dfafaf +348e590,afafaff0 348e594,f0f0f0f0 348e598,f0f0f0f0 -348e59c,cfafafaf -348e5a0,afaf9f9f +348e59c,dfdfafaf +348e5a0,afafaff0 348e5a4,f0f0f0f0 -348e5a8,f0f0f0cf -348e5ac,cfafafaf -348e5b0,9f9ff0f0 +348e5a8,f0f0f0f0 +348e5ac,dfdfafaf +348e5b0,afafaf9f 348e5b4,f0f0f0f0 -348e5b8,f0f0f0cf -348e5bc,afafaf9f -348e5c0,f0f0f0f0 +348e5b8,f0f0f0f0 +348e5bc,cfafafaf +348e5c0,afaf9f9f 348e5c4,f0f0f0f0 348e5c8,f0f0f0cf -348e5cc,aff0f0f0 -348e5d0,f0f0f0f0 +348e5cc,cfafafaf +348e5d0,9f9ff0f0 348e5d4,f0f0f0f0 -348e5d8,f0f0f0f0 -348e5dc,f0f0f0f0 +348e5d8,f0f0f0cf +348e5dc,afafaf9f 348e5e0,f0f0f0f0 348e5e4,f0f0f0f0 -348e5e8,f0f0f0f0 -348e5ec,f0f0f0f0 +348e5e8,f0f0f0cf +348e5ec,aff0f0f0 348e5f0,f0f0f0f0 348e5f4,f0f0f0f0 348e5f8,f0f0f0f0 @@ -13016,63 +13009,63 @@ ef4f9c,0 348e610,f0f0f0f0 348e614,f0f0f0f0 348e618,f0f0f0f0 -348e61c,f0f0f0ff -348e620,ff9ff0f0 +348e61c,f0f0f0f0 +348e620,f0f0f0f0 348e624,f0f0f0f0 348e628,f0f0f0f0 -348e62c,f0f0ffff -348e630,ff9ff0f0 +348e62c,f0f0f0f0 +348e630,f0f0f0f0 348e634,f0f0f0f0 348e638,f0f0f0f0 -348e63c,f0f0ffff -348e640,9f9ff0f0 +348e63c,f0f0f0ff +348e640,ff9ff0f0 348e644,f0f0f0f0 348e648,f0f0f0f0 348e64c,f0f0ffff -348e650,9f9ff0f0 +348e650,ff9ff0f0 348e654,f0f0f0f0 348e658,f0f0f0f0 -348e65c,f0efef9f -348e660,9f9f9ff0 +348e65c,f0f0ffff +348e660,9f9ff0f0 348e664,f0f0f0f0 348e668,f0f0f0f0 -348e66c,f0efef9f -348e670,9f9f8ff0 +348e66c,f0f0ffff +348e670,9f9ff0f0 348e674,f0f0f0f0 348e678,f0f0f0f0 348e67c,f0efef9f -348e680,9f8f8ff0 +348e680,9f9f9ff0 348e684,f0f0f0f0 348e688,f0f0f0f0 -348e68c,efef9f9f -348e690,8f8f8ff0 +348e68c,f0efef9f +348e690,9f9f8ff0 348e694,f0f0f0f0 348e698,f0f0f0f0 -348e69c,efef9f8f -348e6a0,8f8f8ff0 +348e69c,f0efef9f +348e6a0,9f8f8ff0 348e6a4,f0f0f0f0 -348e6a8,f0f0f0ef -348e6ac,efef8f8f -348e6b0,8f8ff0f0 +348e6a8,f0f0f0f0 +348e6ac,efef9f9f +348e6b0,8f8f8ff0 348e6b4,f0f0f0f0 -348e6b8,f0f0f0ef -348e6bc,ef8f8f8f -348e6c0,f0f0f0f0 +348e6b8,f0f0f0f0 +348e6bc,efef9f8f +348e6c0,8f8f8ff0 348e6c4,f0f0f0f0 348e6c8,f0f0f0ef -348e6cc,ef8f8ff0 -348e6d0,f0f0f0f0 +348e6cc,efef8f8f +348e6d0,8f8ff0f0 348e6d4,f0f0f0f0 -348e6d8,f0f0f0f0 -348e6dc,8ff0f0f0 +348e6d8,f0f0f0ef +348e6dc,ef8f8f8f 348e6e0,f0f0f0f0 348e6e4,f0f0f0f0 -348e6e8,f0f0f0f0 -348e6ec,f0f0f0f0 +348e6e8,f0f0f0ef +348e6ec,ef8f8ff0 348e6f0,f0f0f0f0 348e6f4,f0f0f0f0 348e6f8,f0f0f0f0 -348e6fc,f0f0f0f0 +348e6fc,8ff0f0f0 348e700,f0f0f0f0 348e704,f0f0f0f0 348e708,f0f0f0f0 @@ -13080,63 +13073,63 @@ ef4f9c,0 348e710,f0f0f0f0 348e714,f0f0f0f0 348e718,f0f0f0f0 -348e71c,f0f0f0ff -348e720,ff7ff0f0 +348e71c,f0f0f0f0 +348e720,f0f0f0f0 348e724,f0f0f0f0 348e728,f0f0f0f0 -348e72c,f0f0ffff -348e730,ff7ff0f0 +348e72c,f0f0f0f0 +348e730,f0f0f0f0 348e734,f0f0f0f0 348e738,f0f0f0f0 -348e73c,f0f0ffff +348e73c,f0f0f0ff 348e740,ff7ff0f0 348e744,f0f0f0f0 348e748,f0f0f0f0 348e74c,f0f0ffff -348e750,7f7ff0f0 +348e750,ff7ff0f0 348e754,f0f0f0f0 348e758,f0f0f0f0 -348e75c,f0ffffff -348e760,7f7ff0f0 +348e75c,f0f0ffff +348e760,ff7ff0f0 348e764,f0f0f0f0 348e768,f0f0f0f0 -348e76c,f0ffffff +348e76c,f0f0ffff 348e770,7f7ff0f0 348e774,f0f0f0f0 348e778,f0f0f0f0 -348e77c,f0ffff7f -348e780,7f7f7ff0 +348e77c,f0ffffff +348e780,7f7ff0f0 348e784,f0f0f0f0 348e788,f0f0f0f0 -348e78c,ffffff7f -348e790,7f7f6ff0 +348e78c,f0ffffff +348e790,7f7ff0f0 348e794,f0f0f0f0 348e798,f0f0f0f0 -348e79c,ffffff7f -348e7a0,7f6f6ff0 +348e79c,f0ffff7f +348e7a0,7f7f7ff0 348e7a4,f0f0f0f0 348e7a8,f0f0f0f0 348e7ac,ffffff7f -348e7b0,7f6ff0f0 +348e7b0,7f7f6ff0 348e7b4,f0f0f0f0 348e7b8,f0f0f0f0 -348e7bc,ffff7f7f -348e7c0,f0f0f0f0 +348e7bc,ffffff7f +348e7c0,7f6f6ff0 348e7c4,f0f0f0f0 -348e7c8,f0f0f0ff -348e7cc,ffff7ff0 -348e7d0,f0f0f0f0 +348e7c8,f0f0f0f0 +348e7cc,ffffff7f +348e7d0,7f6ff0f0 348e7d4,f0f0f0f0 348e7d8,f0f0f0f0 -348e7dc,fffff0f0 +348e7dc,ffff7f7f 348e7e0,f0f0f0f0 348e7e4,f0f0f0f0 -348e7e8,f0f0f0f0 -348e7ec,f0f0f0f0 +348e7e8,f0f0f0ff +348e7ec,ffff7ff0 348e7f0,f0f0f0f0 348e7f4,f0f0f0f0 348e7f8,f0f0f0f0 -348e7fc,f0f0f0f0 +348e7fc,fffff0f0 348e800,f0f0f0f0 348e804,f0f0f0f0 348e808,f0f0f0f0 @@ -13144,12 +13137,12 @@ ef4f9c,0 348e810,f0f0f0f0 348e814,f0f0f0f0 348e818,f0f0f0f0 -348e81c,f0f0ffff -348e820,ff5ff0f0 +348e81c,f0f0f0f0 +348e820,f0f0f0f0 348e824,f0f0f0f0 348e828,f0f0f0f0 -348e82c,f0f0ffff -348e830,ff5ff0f0 +348e82c,f0f0f0f0 +348e830,f0f0f0f0 348e834,f0f0f0f0 348e838,f0f0f0f0 348e83c,f0f0ffff @@ -13164,12 +13157,12 @@ ef4f9c,0 348e860,ff5ff0f0 348e864,f0f0f0f0 348e868,f0f0f0f0 -348e86c,f0ffffff -348e870,5f5ff0f0 +348e86c,f0f0ffff +348e870,ff5ff0f0 348e874,f0f0f0f0 348e878,f0f0f0f0 -348e87c,f0ffffff -348e880,5f5ff0f0 +348e87c,f0f0ffff +348e880,ff5ff0f0 348e884,f0f0f0f0 348e888,f0f0f0f0 348e88c,f0ffffff @@ -13180,48 +13173,48 @@ ef4f9c,0 348e8a0,5f5ff0f0 348e8a4,f0f0f0f0 348e8a8,f0f0f0f0 -348e8ac,ffffffff -348e8b0,5ff0f0f0 +348e8ac,f0ffffff +348e8b0,5f5ff0f0 348e8b4,f0f0f0f0 348e8b8,f0f0f0f0 -348e8bc,ffffff5f -348e8c0,5ff0f0f0 +348e8bc,f0ffffff +348e8c0,5f5ff0f0 348e8c4,f0f0f0f0 348e8c8,f0f0f0f0 -348e8cc,ffffff5f -348e8d0,f0f0f0f0 +348e8cc,ffffffff +348e8d0,5ff0f0f0 348e8d4,f0f0f0f0 348e8d8,f0f0f0f0 348e8dc,ffffff5f -348e8e0,f0f0f0f0 +348e8e0,5ff0f0f0 348e8e4,f0f0f0f0 348e8e8,f0f0f0f0 -348e8ec,f0f0fff0 +348e8ec,ffffff5f 348e8f0,f0f0f0f0 348e8f4,f0f0f0f0 348e8f8,f0f0f0f0 -348e8fc,f0f0f0f0 +348e8fc,ffffff5f 348e900,f0f0f0f0 348e904,f0f0f0f0 348e908,f0f0f0f0 -348e90c,f0f0f0f0 +348e90c,f0f0fff0 348e910,f0f0f0f0 348e914,f0f0f0f0 348e918,f0f0f0f0 -348e91c,f0f0ffff -348e920,fffff0f0 +348e91c,f0f0f0f0 +348e920,f0f0f0f0 348e924,f0f0f0f0 348e928,f0f0f0f0 -348e92c,f0f0ffff -348e930,fffff0f0 +348e92c,f0f0f0f0 +348e930,f0f0f0f0 348e934,f0f0f0f0 348e938,f0f0f0f0 348e93c,f0f0ffff -348e940,ff3ff0f0 +348e940,fffff0f0 348e944,f0f0f0f0 348e948,f0f0f0f0 348e94c,f0f0ffff -348e950,ff3ff0f0 +348e950,fffff0f0 348e954,f0f0f0f0 348e958,f0f0f0f0 348e95c,f0f0ffff @@ -13236,16 +13229,16 @@ ef4f9c,0 348e980,ff3ff0f0 348e984,f0f0f0f0 348e988,f0f0f0f0 -348e98c,f0ffffff +348e98c,f0f0ffff 348e990,ff3ff0f0 348e994,f0f0f0f0 348e998,f0f0f0f0 -348e99c,f0ffffff -348e9a0,fff0f0f0 +348e99c,f0f0ffff +348e9a0,ff3ff0f0 348e9a4,f0f0f0f0 348e9a8,f0f0f0f0 348e9ac,f0ffffff -348e9b0,fff0f0f0 +348e9b0,ff3ff0f0 348e9b4,f0f0f0f0 348e9b8,f0f0f0f0 348e9bc,f0ffffff @@ -13260,24 +13253,24 @@ ef4f9c,0 348e9e0,fff0f0f0 348e9e4,f0f0f0f0 348e9e8,f0f0f0f0 -348e9ec,f0f0f0ff -348e9f0,f0f0f0f0 +348e9ec,f0ffffff +348e9f0,fff0f0f0 348e9f4,f0f0f0f0 348e9f8,f0f0f0f0 -348e9fc,f0f0f0f0 -348ea00,f0f0f0f0 +348e9fc,f0ffffff +348ea00,fff0f0f0 348ea04,f0f0f0f0 348ea08,f0f0f0f0 -348ea0c,f0f0f0f0 +348ea0c,f0f0f0ff 348ea10,f0f0f0f0 348ea14,f0f0f0f0 348ea18,f0f0f0f0 -348ea1c,f0f0ffff -348ea20,fffff0f0 +348ea1c,f0f0f0f0 +348ea20,f0f0f0f0 348ea24,f0f0f0f0 348ea28,f0f0f0f0 -348ea2c,f0f0ffff -348ea30,fffff0f0 +348ea2c,f0f0f0f0 +348ea30,f0f0f0f0 348ea34,f0f0f0f0 348ea38,f0f0f0f0 348ea3c,f0f0ffff @@ -13328,27 +13321,27 @@ ef4f9c,0 348eaf0,fffff0f0 348eaf4,f0f0f0f0 348eaf8,f0f0f0f0 -348eafc,f0f0f0f0 -348eb00,f0f0f0f0 +348eafc,f0f0ffff +348eb00,fffff0f0 348eb04,f0f0f0f0 348eb08,f0f0f0f0 -348eb0c,f0f0f0f0 -348eb10,f0f0f0f0 +348eb0c,f0f0ffff +348eb10,fffff0f0 348eb14,f0f0f0f0 348eb18,f0f0f0f0 -348eb1c,f0f0ffff -348eb20,fffff0f0 +348eb1c,f0f0f0f0 +348eb20,f0f0f0f0 348eb24,f0f0f0f0 348eb28,f0f0f0f0 -348eb2c,f0f0ffff -348eb30,fffff0f0 +348eb2c,f0f0f0f0 +348eb30,f0f0f0f0 348eb34,f0f0f0f0 348eb38,f0f0f0f0 -348eb3c,f0f03fff +348eb3c,f0f0ffff 348eb40,fffff0f0 348eb44,f0f0f0f0 348eb48,f0f0f0f0 -348eb4c,f0f03fff +348eb4c,f0f0ffff 348eb50,fffff0f0 348eb54,f0f0f0f0 348eb58,f0f0f0f0 @@ -13365,14 +13358,14 @@ ef4f9c,0 348eb84,f0f0f0f0 348eb88,f0f0f0f0 348eb8c,f0f03fff -348eb90,fffffff0 +348eb90,fffff0f0 348eb94,f0f0f0f0 348eb98,f0f0f0f0 -348eb9c,f0f0f0ff -348eba0,fffffff0 +348eb9c,f0f03fff +348eba0,fffff0f0 348eba4,f0f0f0f0 348eba8,f0f0f0f0 -348ebac,f0f0f0ff +348ebac,f0f03fff 348ebb0,fffffff0 348ebb4,f0f0f0f0 348ebb8,f0f0f0f0 @@ -13388,24 +13381,24 @@ ef4f9c,0 348ebe0,fffffff0 348ebe4,f0f0f0f0 348ebe8,f0f0f0f0 -348ebec,f0f0f0f0 -348ebf0,fff0f0f0 +348ebec,f0f0f0ff +348ebf0,fffffff0 348ebf4,f0f0f0f0 348ebf8,f0f0f0f0 -348ebfc,f0f0f0f0 -348ec00,f0f0f0f0 +348ebfc,f0f0f0ff +348ec00,fffffff0 348ec04,f0f0f0f0 348ec08,f0f0f0f0 348ec0c,f0f0f0f0 -348ec10,f0f0f0f0 +348ec10,fff0f0f0 348ec14,f0f0f0f0 348ec18,f0f0f0f0 -348ec1c,f0f05fff -348ec20,fffff0f0 +348ec1c,f0f0f0f0 +348ec20,f0f0f0f0 348ec24,f0f0f0f0 348ec28,f0f0f0f0 -348ec2c,f0f05fff -348ec30,fffff0f0 +348ec2c,f0f0f0f0 +348ec30,f0f0f0f0 348ec34,f0f0f0f0 348ec38,f0f0f0f0 348ec3c,f0f05fff @@ -13420,12 +13413,12 @@ ef4f9c,0 348ec60,fffff0f0 348ec64,f0f0f0f0 348ec68,f0f0f0f0 -348ec6c,f0f05f5f -348ec70,fffffff0 +348ec6c,f0f05fff +348ec70,fffff0f0 348ec74,f0f0f0f0 348ec78,f0f0f0f0 -348ec7c,f0f05f5f -348ec80,fffffff0 +348ec7c,f0f05fff +348ec80,fffff0f0 348ec84,f0f0f0f0 348ec88,f0f0f0f0 348ec8c,f0f05f5f @@ -13436,217 +13429,217 @@ ef4f9c,0 348eca0,fffffff0 348eca4,f0f0f0f0 348eca8,f0f0f0f0 -348ecac,f0f0f05f -348ecb0,ffffffff +348ecac,f0f05f5f +348ecb0,fffffff0 348ecb4,f0f0f0f0 348ecb8,f0f0f0f0 -348ecbc,f0f0f05f -348ecc0,5fffffff +348ecbc,f0f05f5f +348ecc0,fffffff0 348ecc4,f0f0f0f0 348ecc8,f0f0f0f0 -348eccc,f0f0f0f0 -348ecd0,5fffffff +348eccc,f0f0f05f +348ecd0,ffffffff 348ecd4,f0f0f0f0 348ecd8,f0f0f0f0 -348ecdc,f0f0f0f0 +348ecdc,f0f0f05f 348ece0,5fffffff 348ece4,f0f0f0f0 348ece8,f0f0f0f0 348ecec,f0f0f0f0 -348ecf0,f0fff0f0 +348ecf0,5fffffff 348ecf4,f0f0f0f0 348ecf8,f0f0f0f0 348ecfc,f0f0f0f0 -348ed00,f0f0f0f0 +348ed00,5fffffff 348ed04,f0f0f0f0 348ed08,f0f0f0f0 348ed0c,f0f0f0f0 -348ed10,f0f0f0f0 +348ed10,f0fff0f0 348ed14,f0f0f0f0 348ed18,f0f0f0f0 -348ed1c,f0f07fff -348ed20,fff0f0f0 +348ed1c,f0f0f0f0 +348ed20,f0f0f0f0 348ed24,f0f0f0f0 348ed28,f0f0f0f0 -348ed2c,f0f07fff -348ed30,fffff0f0 +348ed2c,f0f0f0f0 +348ed30,f0f0f0f0 348ed34,f0f0f0f0 348ed38,f0f0f0f0 348ed3c,f0f07fff -348ed40,fffff0f0 +348ed40,fff0f0f0 348ed44,f0f0f0f0 348ed48,f0f0f0f0 -348ed4c,f0f07f7f +348ed4c,f0f07fff 348ed50,fffff0f0 348ed54,f0f0f0f0 348ed58,f0f0f0f0 -348ed5c,f0f07f7f -348ed60,fffffff0 +348ed5c,f0f07fff +348ed60,fffff0f0 348ed64,f0f0f0f0 348ed68,f0f0f0f0 348ed6c,f0f07f7f -348ed70,fffffff0 +348ed70,fffff0f0 348ed74,f0f0f0f0 348ed78,f0f0f0f0 -348ed7c,f07f7f7f -348ed80,7ffffff0 +348ed7c,f0f07f7f +348ed80,fffffff0 348ed84,f0f0f0f0 348ed88,f0f0f0f0 -348ed8c,f06f7f7f -348ed90,7fffffff +348ed8c,f0f07f7f +348ed90,fffffff0 348ed94,f0f0f0f0 348ed98,f0f0f0f0 -348ed9c,f06f6f7f -348eda0,7fffffff +348ed9c,f07f7f7f +348eda0,7ffffff0 348eda4,f0f0f0f0 348eda8,f0f0f0f0 -348edac,f0f06f7f +348edac,f06f7f7f 348edb0,7fffffff 348edb4,f0f0f0f0 348edb8,f0f0f0f0 -348edbc,f0f0f0f0 -348edc0,7f7fffff +348edbc,f06f6f7f +348edc0,7fffffff 348edc4,f0f0f0f0 348edc8,f0f0f0f0 -348edcc,f0f0f0f0 -348edd0,f07fffff -348edd4,fff0f0f0 +348edcc,f0f06f7f +348edd0,7fffffff +348edd4,f0f0f0f0 348edd8,f0f0f0f0 348eddc,f0f0f0f0 -348ede0,f0f0ffff +348ede0,7f7fffff 348ede4,f0f0f0f0 348ede8,f0f0f0f0 348edec,f0f0f0f0 -348edf0,f0f0f0f0 -348edf4,f0f0f0f0 +348edf0,f07fffff +348edf4,fff0f0f0 348edf8,f0f0f0f0 348edfc,f0f0f0f0 -348ee00,f0f0f0f0 +348ee00,f0f0ffff 348ee04,f0f0f0f0 348ee08,f0f0f0f0 348ee0c,f0f0f0f0 348ee10,f0f0f0f0 348ee14,f0f0f0f0 348ee18,f0f0f0f0 -348ee1c,f0f09fff -348ee20,fff0f0f0 +348ee1c,f0f0f0f0 +348ee20,f0f0f0f0 348ee24,f0f0f0f0 348ee28,f0f0f0f0 -348ee2c,f0f09fff -348ee30,fffff0f0 +348ee2c,f0f0f0f0 +348ee30,f0f0f0f0 348ee34,f0f0f0f0 348ee38,f0f0f0f0 -348ee3c,f0f09f9f -348ee40,fffff0f0 +348ee3c,f0f09fff +348ee40,fff0f0f0 348ee44,f0f0f0f0 348ee48,f0f0f0f0 -348ee4c,f0f09f9f +348ee4c,f0f09fff 348ee50,fffff0f0 348ee54,f0f0f0f0 348ee58,f0f0f0f0 -348ee5c,f09f9f9f -348ee60,9fffeff0 +348ee5c,f0f09f9f +348ee60,fffff0f0 348ee64,f0f0f0f0 348ee68,f0f0f0f0 -348ee6c,f08f9f9f -348ee70,9fefeff0 +348ee6c,f0f09f9f +348ee70,fffff0f0 348ee74,f0f0f0f0 348ee78,f0f0f0f0 -348ee7c,f08f8f9f -348ee80,9fefeff0 +348ee7c,f09f9f9f +348ee80,9fffeff0 348ee84,f0f0f0f0 348ee88,f0f0f0f0 -348ee8c,f08f8f8f -348ee90,9f9fefef +348ee8c,f08f9f9f +348ee90,9fefeff0 348ee94,f0f0f0f0 348ee98,f0f0f0f0 -348ee9c,f08f8f8f -348eea0,8f9fefef +348ee9c,f08f8f9f +348eea0,9fefeff0 348eea4,f0f0f0f0 348eea8,f0f0f0f0 -348eeac,f0f08f8f -348eeb0,8f8fefef -348eeb4,eff0f0f0 +348eeac,f08f8f8f +348eeb0,9f9fefef +348eeb4,f0f0f0f0 348eeb8,f0f0f0f0 -348eebc,f0f0f0f0 -348eec0,8f8f8fef -348eec4,eff0f0f0 +348eebc,f08f8f8f +348eec0,8f9fefef +348eec4,f0f0f0f0 348eec8,f0f0f0f0 -348eecc,f0f0f0f0 -348eed0,f08f8fef +348eecc,f0f08f8f +348eed0,8f8fefef 348eed4,eff0f0f0 348eed8,f0f0f0f0 348eedc,f0f0f0f0 -348eee0,f0f0f08f -348eee4,f0f0f0f0 +348eee0,8f8f8fef +348eee4,eff0f0f0 348eee8,f0f0f0f0 348eeec,f0f0f0f0 -348eef0,f0f0f0f0 -348eef4,f0f0f0f0 +348eef0,f08f8fef +348eef4,eff0f0f0 348eef8,f0f0f0f0 348eefc,f0f0f0f0 -348ef00,f0f0f0f0 +348ef00,f0f0f08f 348ef04,f0f0f0f0 348ef08,f0f0f0f0 348ef0c,f0f0f0f0 348ef10,f0f0f0f0 348ef14,f0f0f0f0 348ef18,f0f0f0f0 -348ef1c,f0f0f0ef -348ef20,eff0f0f0 +348ef1c,f0f0f0f0 +348ef20,f0f0f0f0 348ef24,f0f0f0f0 348ef28,f0f0f0f0 -348ef2c,f0f0bfbf -348ef30,eff0f0f0 +348ef2c,f0f0f0f0 +348ef30,f0f0f0f0 348ef34,f0f0f0f0 348ef38,f0f0f0f0 -348ef3c,f0f0bfbf -348ef40,dfdff0f0 +348ef3c,f0f0f0ef +348ef40,eff0f0f0 348ef44,f0f0f0f0 348ef48,f0f0f0f0 -348ef4c,f0f0afbf -348ef50,bfdff0f0 +348ef4c,f0f0bfbf +348ef50,eff0f0f0 348ef54,f0f0f0f0 348ef58,f0f0f0f0 -348ef5c,f0afafaf -348ef60,afdfdff0 +348ef5c,f0f0bfbf +348ef60,dfdff0f0 348ef64,f0f0f0f0 348ef68,f0f0f0f0 -348ef6c,f0afafaf -348ef70,afafdff0 +348ef6c,f0f0afbf +348ef70,bfdff0f0 348ef74,f0f0f0f0 348ef78,f0f0f0f0 348ef7c,f0afafaf -348ef80,afafdfdf +348ef80,afdfdff0 348ef84,f0f0f0f0 348ef88,f0f0f0f0 -348ef8c,9fafafaf -348ef90,afafdfdf +348ef8c,f0afafaf +348ef90,afafdff0 348ef94,f0f0f0f0 348ef98,f0f0f0f0 -348ef9c,9f9fafaf -348efa0,afafafcf +348ef9c,f0afafaf +348efa0,afafdfdf 348efa4,f0f0f0f0 348efa8,f0f0f0f0 -348efac,f0f09f9f -348efb0,afafafcf -348efb4,cff0f0f0 +348efac,9fafafaf +348efb0,afafdfdf +348efb4,f0f0f0f0 348efb8,f0f0f0f0 -348efbc,f0f0f0f0 -348efc0,9fafafaf -348efc4,cff0f0f0 +348efbc,9f9fafaf +348efc0,afafafcf +348efc4,f0f0f0f0 348efc8,f0f0f0f0 -348efcc,f0f0f0f0 -348efd0,f0f0f0af +348efcc,f0f09f9f +348efd0,afafafcf 348efd4,cff0f0f0 348efd8,f0f0f0f0 348efdc,f0f0f0f0 -348efe0,f0f0f0f0 -348efe4,f0f0f0f0 +348efe0,9fafafaf +348efe4,cff0f0f0 348efe8,f0f0f0f0 348efec,f0f0f0f0 -348eff0,f0f0f0f0 -348eff4,f0f0f0f0 +348eff0,f0f0f0af +348eff4,cff0f0f0 348eff8,f0f0f0f0 348effc,f0f0f0f0 348f000,f0f0f0f0 @@ -13656,57 +13649,57 @@ ef4f9c,0 348f010,f0f0f0f0 348f014,f0f0f0f0 348f018,f0f0f0f0 -348f01c,f0f0f0cf -348f020,cff0f0f0 +348f01c,f0f0f0f0 +348f020,f0f0f0f0 348f024,f0f0f0f0 348f028,f0f0f0f0 -348f02c,f0f0cfcf -348f030,cff0f0f0 +348f02c,f0f0f0f0 +348f030,f0f0f0f0 348f034,f0f0f0f0 348f038,f0f0f0f0 -348f03c,f0f0cfcf -348f040,cfbff0f0 +348f03c,f0f0f0cf +348f040,cff0f0f0 348f044,f0f0f0f0 348f048,f0f0f0f0 348f04c,f0f0cfcf -348f050,cfbff0f0 +348f050,cff0f0f0 348f054,f0f0f0f0 348f058,f0f0f0f0 -348f05c,f0bfbfbf -348f060,cfcfbff0 +348f05c,f0f0cfcf +348f060,cfbff0f0 348f064,f0f0f0f0 348f068,f0f0f0f0 -348f06c,f0bfbfbf -348f070,bfbfbff0 +348f06c,f0f0cfcf +348f070,cfbff0f0 348f074,f0f0f0f0 348f078,f0f0f0f0 -348f07c,bfbfbfbf -348f080,bfbfbfbf +348f07c,f0bfbfbf +348f080,cfcfbff0 348f084,f0f0f0f0 348f088,f0f0f0f0 -348f08c,bfbfbfbf -348f090,bfbfbfbf +348f08c,f0bfbfbf +348f090,bfbfbff0 348f094,f0f0f0f0 348f098,f0f0f0f0 -348f09c,afafbfbf +348f09c,bfbfbfbf 348f0a0,bfbfbfbf 348f0a4,f0f0f0f0 348f0a8,f0f0f0f0 -348f0ac,f0afafaf +348f0ac,bfbfbfbf 348f0b0,bfbfbfbf -348f0b4,aff0f0f0 +348f0b4,f0f0f0f0 348f0b8,f0f0f0f0 -348f0bc,f0f0f0f0 -348f0c0,f0afbfbf -348f0c4,bff0f0f0 +348f0bc,afafbfbf +348f0c0,bfbfbfbf +348f0c4,f0f0f0f0 348f0c8,f0f0f0f0 -348f0cc,f0f0f0f0 -348f0d0,f0f0f0f0 -348f0d4,f0f0f0f0 +348f0cc,f0afafaf +348f0d0,bfbfbfbf +348f0d4,aff0f0f0 348f0d8,f0f0f0f0 348f0dc,f0f0f0f0 -348f0e0,f0f0f0f0 -348f0e4,f0f0f0f0 +348f0e0,f0afbfbf +348f0e4,bff0f0f0 348f0e8,f0f0f0f0 348f0ec,f0f0f0f0 348f0f0,f0f0f0f0 @@ -13720,57 +13713,57 @@ ef4f9c,0 348f110,f0f0f0f0 348f114,f0f0f0f0 348f118,f0f0f0f0 -348f11c,f0f0f0df +348f11c,f0f0f0f0 348f120,f0f0f0f0 348f124,f0f0f0f0 348f128,f0f0f0f0 -348f12c,f0f0f0df -348f130,dff0f0f0 +348f12c,f0f0f0f0 +348f130,f0f0f0f0 348f134,f0f0f0f0 348f138,f0f0f0f0 -348f13c,f0f0cfdf -348f140,dff0f0f0 +348f13c,f0f0f0df +348f140,f0f0f0f0 348f144,f0f0f0f0 348f148,f0f0f0f0 -348f14c,f0f0cfcf -348f150,cfcff0f0 +348f14c,f0f0f0df +348f150,dff0f0f0 348f154,f0f0f0f0 348f158,f0f0f0f0 -348f15c,f0cfcfcf -348f160,cfcff0f0 +348f15c,f0f0cfdf +348f160,dff0f0f0 348f164,f0f0f0f0 348f168,f0f0f0f0 -348f16c,f0cfcfcf -348f170,cfcfcff0 +348f16c,f0f0cfcf +348f170,cfcff0f0 348f174,f0f0f0f0 348f178,f0f0f0f0 -348f17c,cfcfcfcf -348f180,cfcfcff0 +348f17c,f0cfcfcf +348f180,cfcff0f0 348f184,f0f0f0f0 348f188,f0f0f0f0 -348f18c,bfbfcfcf -348f190,cfcfcfcf +348f18c,f0cfcfcf +348f190,cfcfcff0 348f194,f0f0f0f0 348f198,f0f0f0f0 -348f19c,bfbfbfbf -348f1a0,bfbfbfbf +348f19c,cfcfcfcf +348f1a0,cfcfcff0 348f1a4,f0f0f0f0 -348f1a8,f0f0f0bf -348f1ac,bfbfbfbf -348f1b0,bfbfbfbf -348f1b4,bff0f0f0 +348f1a8,f0f0f0f0 +348f1ac,bfbfcfcf +348f1b0,cfcfcfcf +348f1b4,f0f0f0f0 348f1b8,f0f0f0f0 -348f1bc,f0f0f0f0 -348f1c0,f0f0bfbf -348f1c4,bff0f0f0 -348f1c8,f0f0f0f0 -348f1cc,f0f0f0f0 -348f1d0,f0f0f0f0 -348f1d4,f0f0f0f0 +348f1bc,bfbfbfbf +348f1c0,bfbfbfbf +348f1c4,f0f0f0f0 +348f1c8,f0f0f0bf +348f1cc,bfbfbfbf +348f1d0,bfbfbfbf +348f1d4,bff0f0f0 348f1d8,f0f0f0f0 348f1dc,f0f0f0f0 -348f1e0,f0f0f0f0 -348f1e4,f0f0f0f0 +348f1e0,f0f0bfbf +348f1e4,bff0f0f0 348f1e8,f0f0f0f0 348f1ec,f0f0f0f0 348f1f0,f0f0f0f0 @@ -13784,53 +13777,53 @@ ef4f9c,0 348f210,f0f0f0f0 348f214,f0f0f0f0 348f218,f0f0f0f0 -348f21c,f0f0f0df -348f220,dff0f0f0 +348f21c,f0f0f0f0 +348f220,f0f0f0f0 348f224,f0f0f0f0 348f228,f0f0f0f0 -348f22c,f0f0f0df -348f230,dff0f0f0 +348f22c,f0f0f0f0 +348f230,f0f0f0f0 348f234,f0f0f0f0 348f238,f0f0f0f0 -348f23c,f0f0dfdf -348f240,dfdff0f0 +348f23c,f0f0f0df +348f240,dff0f0f0 348f244,f0f0f0f0 348f248,f0f0f0f0 -348f24c,f0f0dfdf -348f250,dfdff0f0 +348f24c,f0f0f0df +348f250,dff0f0f0 348f254,f0f0f0f0 348f258,f0f0f0f0 -348f25c,f0f0cfcf -348f260,cfcff0f0 +348f25c,f0f0dfdf +348f260,dfdff0f0 348f264,f0f0f0f0 348f268,f0f0f0f0 -348f26c,f0cfcfcf -348f270,cfcfcff0 +348f26c,f0f0dfdf +348f270,dfdff0f0 348f274,f0f0f0f0 348f278,f0f0f0f0 -348f27c,f0cfcfcf -348f280,cfcfcff0 +348f27c,f0f0cfcf +348f280,cfcff0f0 348f284,f0f0f0f0 348f288,f0f0f0f0 -348f28c,cfcfcfcf -348f290,cfcfcfcf +348f28c,f0cfcfcf +348f290,cfcfcff0 348f294,f0f0f0f0 348f298,f0f0f0f0 -348f29c,cfcfcfcf -348f2a0,cfcfcfcf +348f29c,f0cfcfcf +348f2a0,cfcfcff0 348f2a4,f0f0f0f0 -348f2a8,f0f0f0bf -348f2ac,bfbfbfbf -348f2b0,bfbfbfbf -348f2b4,bff0f0f0 +348f2a8,f0f0f0f0 +348f2ac,cfcfcfcf +348f2b0,cfcfcfcf +348f2b4,f0f0f0f0 348f2b8,f0f0f0f0 -348f2bc,f0f0f0f0 -348f2c0,f0f0f0f0 +348f2bc,cfcfcfcf +348f2c0,cfcfcfcf 348f2c4,f0f0f0f0 -348f2c8,f0f0f0f0 -348f2cc,f0f0f0f0 -348f2d0,f0f0f0f0 -348f2d4,f0f0f0f0 +348f2c8,f0f0f0bf +348f2cc,bfbfbfbf +348f2d0,bfbfbfbf +348f2d4,bff0f0f0 348f2d8,f0f0f0f0 348f2dc,f0f0f0f0 348f2e0,f0f0f0f0 @@ -13843,3 +13836,11 @@ ef4f9c,0 348f2fc,f0f0f0f0 348f300,f0f0f0f0 348f304,f0f0f0f0 +348f308,f0f0f0f0 +348f30c,f0f0f0f0 +348f310,f0f0f0f0 +348f314,f0f0f0f0 +348f318,f0f0f0f0 +348f31c,f0f0f0f0 +348f320,f0f0f0f0 +348f324,f0f0f0f0 diff --git a/worlds/oot/data/generated/symbols.json b/worlds/oot/data/generated/symbols.json index 2b84bcfa04..c5c0d5c0fb 100644 --- a/worlds/oot/data/generated/symbols.json +++ b/worlds/oot/data/generated/symbols.json @@ -1,11 +1,12 @@ { - "ADULT_INIT_ITEMS": "03481D3C", - "ADULT_VALID_ITEMS": "03481D44", + "ADULT_INIT_ITEMS": "03481D54", + "ADULT_VALID_ITEMS": "03481D5C", "AP_PLAYER_NAME": "03480834", - "AUDIO_THREAD_INFO": "03482F98", - "AUDIO_THREAD_INFO_MEM_SIZE": "03482FB4", - "AUDIO_THREAD_INFO_MEM_START": "03482FB0", - "AUDIO_THREAD_MEM_START": "0348F310", + "AUDIO_THREAD_INFO": "03482FB0", + "AUDIO_THREAD_INFO_MEM_SIZE": "03482FCC", + "AUDIO_THREAD_INFO_MEM_START": "03482FC8", + "AUDIO_THREAD_MEM_START": "0348F330", + "BIG_POE_COUNT": "03480CEE", "BOMBCHUS_IN_LOGIC": "03480CBC", "CFG_A_BUTTON_COLOR": "03480854", "CFG_A_NOTE_COLOR": "03480872", @@ -16,7 +17,7 @@ "CFG_B_BUTTON_COLOR": "0348085A", "CFG_C_BUTTON_COLOR": "03480860", "CFG_C_NOTE_COLOR": "03480878", - "CFG_DAMAGE_MULTIPLYER": "03482C88", + "CFG_DAMAGE_MULTIPLYER": "03482CA0", "CFG_DISPLAY_DPAD": "0348088A", "CFG_HEART_COLOR": "0348084E", "CFG_MAGIC_COLOR": "03480848", @@ -36,151 +37,160 @@ "CFG_RAINBOW_SWORD_OUTER_ENABLED": "0348088C", "CFG_SHOP_CURSOR_COLOR": "0348086C", "CFG_TEXT_CURSOR_COLOR": "03480866", - "CHAIN_HBA_REWARDS": "03483928", - "CHEST_SIZE_MATCH_CONTENTS": "034826EC", - "COMPLETE_MASK_QUEST": "0348B585", + "CHAIN_HBA_REWARDS": "03483940", + "CHEST_SIZE_MATCH_CONTENTS": "03482704", + "COMPLETE_MASK_QUEST": "0348B5A5", "COOP_CONTEXT": "03480020", "COOP_VERSION": "03480020", "COSMETIC_CONTEXT": "03480844", "COSMETIC_FORMAT_VERSION": "03480844", - "CURRENT_GROTTO_ID": "03482E5A", + "CURRENT_GROTTO_ID": "03482E72", "DEATH_LINK": "0348002A", - "DEBUG_OFFSET": "03482878", + "DEBUG_OFFSET": "03482890", "DISABLE_TIMERS": "03480CDC", - "DPAD_TEXTURE": "0348DB08", + "DPAD_TEXTURE": "0348DB28", "DUNGEONS_SHUFFLED": "03480CDD", + "DUNGEON_IS_MQ_ADDRESS": "03480CE0", + "DUNGEON_REWARDS_ADDRESS": "03480CE4", + "ENHANCE_MAP_COMPASS": "03480CE8", "EXTENDED_OBJECT_TABLE": "03480C9C", - "EXTERN_DAMAGE_MULTIPLYER": "03482C89", + "EXTERN_DAMAGE_MULTIPLYER": "03482CA1", "FAST_BUNNY_HOOD_ENABLED": "03480CDF", "FAST_CHESTS": "03480CD6", - "FONT_TEXTURE": "0348C640", + "FONT_TEXTURE": "0348C660", "FREE_SCARECROW_ENABLED": "03480CCC", - "GANON_BOSS_KEY_CONDITION": "0348B550", - "GANON_BOSS_KEY_CONDITION_COUNT": "0348B54E", - "GET_CHEST_OVERRIDE_WRAPPER": "034826F0", - "GET_ITEM_TRIGGERED": "03481408", + "GANON_BOSS_KEY_CONDITION": "0348B570", + "GANON_BOSS_KEY_CONDITION_COUNT": "0348B56E", + "GET_CHEST_OVERRIDE_WRAPPER": "03482708", + "GET_ITEM_TRIGGERED": "03481420", "GOSSIP_HINT_CONDITION": "03480CC8", - "GROTTO_EXIT_LIST": "03482E18", - "GROTTO_LOAD_TABLE": "03482D94", + "GROTTO_EXIT_LIST": "03482E30", + "GROTTO_LOAD_TABLE": "03482DAC", "INCOMING_ITEM": "03480028", "INCOMING_PLAYER": "03480026", "INITIAL_SAVE_DATA": "0348089C", "JABU_ELEVATOR_ENABLE": "03480CD4", - "KAKARIKO_WEATHER_FORECAST": "0348B5A4", + "KAKARIKO_WEATHER_FORECAST": "0348B5C4", "LACS_CONDITION": "03480CC4", "LACS_CONDITION_COUNT": "03480CD2", - "MALON_GAVE_ICETRAP": "03483664", + "MALON_GAVE_ICETRAP": "0348367C", "MALON_TEXT_ID": "03480CDB", - "MAX_RUPEES": "0348B587", - "MOVED_ADULT_KING_ZORA": "03482FD4", - "NO_ESCAPE_SEQUENCE": "0348B54C", + "MAX_RUPEES": "0348B5A7", + "MOVED_ADULT_KING_ZORA": "03482FEC", + "NO_ESCAPE_SEQUENCE": "0348B56C", "OCARINAS_SHUFFLED": "03480CD5", - "OPEN_KAKARIKO": "0348B586", + "OPEN_FOREST": "03480CEC", + "OPEN_FOUNTAIN": "03480CED", + "OPEN_KAKARIKO": "0348B5A6", "OUTGOING_ITEM": "03480030", "OUTGOING_KEY": "0348002C", "OUTGOING_PLAYER": "03480032", "OVERWORLD_SHUFFLED": "03480CDE", - "PAYLOAD_END": "0348F310", + "PAYLOAD_END": "0348F330", "PAYLOAD_START": "03480000", - "PLAYED_WARP_SONG": "0348120C", + "PLAYED_WARP_SONG": "03481224", "PLAYER_ID": "03480024", "PLAYER_NAMES": "03480034", "PLAYER_NAME_ID": "03480025", "RAINBOW_BRIDGE_CONDITION": "03480CC0", "RAINBOW_BRIDGE_COUNT": "03480CD0", "RANDO_CONTEXT": "03480000", - "SHUFFLE_BEANS": "03482CF0", - "SHUFFLE_CARPET_SALESMAN": "034839E0", + "SHOP_SLOTS": "03480CEF", + "SHOW_DUNGEON_REWARDS": "03480CE9", + "SHUFFLE_BEANS": "03482D08", + "SHUFFLE_CARPET_SALESMAN": "034839F8", "SHUFFLE_COWS": "03480CD7", - "SHUFFLE_MEDIGORON": "03483A3C", + "SHUFFLE_MEDIGORON": "03483A54", + "SHUFFLE_SCRUBS": "03480CEB", + "SMALL_KEY_SHUFFLE": "03480CEA", "SONGS_AS_ITEMS": "03480CD8", - "SOS_ITEM_GIVEN": "034814D4", - "SPEED_MULTIPLIER": "03482738", - "START_TWINROVA_FIGHT": "03483054", - "TIME_TRAVEL_SAVED_EQUIPS": "03481A60", - "TRIFORCE_ICON_TEXTURE": "0348E308", - "TWINROVA_ACTION_TIMER": "03483058", + "SOS_ITEM_GIVEN": "034814EC", + "SPEED_MULTIPLIER": "03482750", + "START_TWINROVA_FIGHT": "0348306C", + "TIME_TRAVEL_SAVED_EQUIPS": "03481A78", + "TRIFORCE_ICON_TEXTURE": "0348E328", + "TWINROVA_ACTION_TIMER": "03483070", "WINDMILL_SONG_ID": "03480CD9", "WINDMILL_TEXT_ID": "03480CDA", - "a_button": "0348B510", - "a_note_b": "0348B4FC", - "a_note_font_glow_base": "0348B4E4", - "a_note_font_glow_max": "0348B4E0", - "a_note_g": "0348B500", - "a_note_glow_base": "0348B4EC", - "a_note_glow_max": "0348B4E8", - "a_note_r": "0348B504", - "active_item_action_id": "0348B568", - "active_item_fast_chest": "0348B558", - "active_item_graphic_id": "0348B55C", - "active_item_object_id": "0348B560", - "active_item_row": "0348B56C", - "active_item_text_id": "0348B564", - "active_override": "0348B574", - "active_override_is_outgoing": "0348B570", - "b_button": "0348B50C", - "beating_dd": "0348B518", - "beating_no_dd": "0348B520", - "c_button": "0348B508", - "c_note_b": "0348B4F0", - "c_note_font_glow_base": "0348B4D4", - "c_note_font_glow_max": "0348B4D0", - "c_note_g": "0348B4F4", - "c_note_glow_base": "0348B4DC", - "c_note_glow_max": "0348B4D8", - "c_note_r": "0348B4F8", - "cfg_dungeon_info_enable": "0348B49C", - "cfg_dungeon_info_mq_enable": "0348B540", - "cfg_dungeon_info_mq_need_map": "0348B53C", - "cfg_dungeon_info_reward_enable": "0348B498", - "cfg_dungeon_info_reward_need_altar": "0348B534", - "cfg_dungeon_info_reward_need_compass": "0348B538", - "cfg_dungeon_is_mq": "0348B5A8", - "cfg_dungeon_rewards": "0348A254", - "cfg_file_select_hash": "0348B548", - "cfg_item_overrides": "0348B5FC", - "defaultDDHeart": "0348B524", - "defaultHeart": "0348B52C", - "dpad_sprite": "0348A408", - "dummy_actor": "0348B57C", - "dungeon_count": "0348B4A0", - "dungeons": "0348A278", - "empty_dlist": "0348B4B8", - "extern_ctxt": "0348A314", - "font_sprite": "0348A418", - "freecam_modes": "03489FD0", - "hash_sprites": "0348B4AC", - "hash_symbols": "0348A328", - "heap_next": "0348B5A0", - "heart_sprite": "0348A3A8", - "icon_sprites": "0348A194", - "item_digit_sprite": "0348A3C8", - "item_overrides_count": "0348B580", - "item_table": "0348A490", - "items_sprite": "0348A438", - "key_rupee_clock_sprite": "0348A3D8", - "last_fog_distance": "0348B4A4", - "linkhead_skull_sprite": "0348A3B8", - "medal_colors": "0348A264", - "medals_sprite": "0348A448", - "normal_dd": "0348B514", - "normal_no_dd": "0348B51C", - "num_to_bits": "0348A368", - "object_slots": "0348C5FC", - "pending_freezes": "0348B584", - "pending_item_queue": "0348B5E4", - "quest_items_sprite": "0348A428", - "rupee_colors": "0348A1A0", - "satisified_pending_frames": "0348B554", - "scene_fog_distance": "0348B4A8", - "setup_db": "0348A468", - "song_note_sprite": "0348A3E8", - "stones_sprite": "0348A458", - "text_cursor_border_base": "0348B4C4", - "text_cursor_border_max": "0348B4C0", - "text_cursor_inner_base": "0348B4CC", - "text_cursor_inner_max": "0348B4C8", - "triforce_hunt_enabled": "0348B594", - "triforce_pieces_requied": "0348B532", - "triforce_sprite": "0348A3F8" + "a_button": "0348B530", + "a_note_b": "0348B51C", + "a_note_font_glow_base": "0348B504", + "a_note_font_glow_max": "0348B500", + "a_note_g": "0348B520", + "a_note_glow_base": "0348B50C", + "a_note_glow_max": "0348B508", + "a_note_r": "0348B524", + "active_item_action_id": "0348B588", + "active_item_fast_chest": "0348B578", + "active_item_graphic_id": "0348B57C", + "active_item_object_id": "0348B580", + "active_item_row": "0348B58C", + "active_item_text_id": "0348B584", + "active_override": "0348B594", + "active_override_is_outgoing": "0348B590", + "b_button": "0348B52C", + "beating_dd": "0348B538", + "beating_no_dd": "0348B540", + "c_button": "0348B528", + "c_note_b": "0348B510", + "c_note_font_glow_base": "0348B4F4", + "c_note_font_glow_max": "0348B4F0", + "c_note_g": "0348B514", + "c_note_glow_base": "0348B4FC", + "c_note_glow_max": "0348B4F8", + "c_note_r": "0348B518", + "cfg_dungeon_info_enable": "0348B4BC", + "cfg_dungeon_info_mq_enable": "0348B560", + "cfg_dungeon_info_mq_need_map": "0348B55C", + "cfg_dungeon_info_reward_enable": "0348B4B8", + "cfg_dungeon_info_reward_need_altar": "0348B554", + "cfg_dungeon_info_reward_need_compass": "0348B558", + "cfg_dungeon_is_mq": "0348B5C8", + "cfg_dungeon_rewards": "0348A274", + "cfg_file_select_hash": "0348B568", + "cfg_item_overrides": "0348B61C", + "defaultDDHeart": "0348B544", + "defaultHeart": "0348B54C", + "dpad_sprite": "0348A428", + "dummy_actor": "0348B59C", + "dungeon_count": "0348B4C0", + "dungeons": "0348A298", + "empty_dlist": "0348B4D8", + "extern_ctxt": "0348A334", + "font_sprite": "0348A438", + "freecam_modes": "03489FF0", + "hash_sprites": "0348B4CC", + "hash_symbols": "0348A348", + "heap_next": "0348B5C0", + "heart_sprite": "0348A3C8", + "icon_sprites": "0348A1B4", + "item_digit_sprite": "0348A3E8", + "item_overrides_count": "0348B5A0", + "item_table": "0348A4B0", + "items_sprite": "0348A458", + "key_rupee_clock_sprite": "0348A3F8", + "last_fog_distance": "0348B4C4", + "linkhead_skull_sprite": "0348A3D8", + "medal_colors": "0348A284", + "medals_sprite": "0348A468", + "normal_dd": "0348B534", + "normal_no_dd": "0348B53C", + "num_to_bits": "0348A388", + "object_slots": "0348C61C", + "pending_freezes": "0348B5A4", + "pending_item_queue": "0348B604", + "quest_items_sprite": "0348A448", + "rupee_colors": "0348A1C0", + "satisified_pending_frames": "0348B574", + "scene_fog_distance": "0348B4C8", + "setup_db": "0348A488", + "song_note_sprite": "0348A408", + "stones_sprite": "0348A478", + "text_cursor_border_base": "0348B4E4", + "text_cursor_border_max": "0348B4E0", + "text_cursor_inner_base": "0348B4EC", + "text_cursor_inner_max": "0348B4E8", + "triforce_hunt_enabled": "0348B5B4", + "triforce_pieces_requied": "0348B552", + "triforce_sprite": "0348A418" } \ No newline at end of file From 8184e9940989be08961cf8aedd248af0efb28976 Mon Sep 17 00:00:00 2001 From: espeon65536 Date: Wed, 25 May 2022 23:10:51 -0500 Subject: [PATCH 130/149] OoT: add version check to lua script + client --- OoTClient.py | 35 ++++++++++++++++++++++------------ data/lua/OOT/oot_connector.lua | 4 +++- 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/OoTClient.py b/OoTClient.py index ca758c7bb6..95d315f910 100644 --- a/OoTClient.py +++ b/OoTClient.py @@ -48,6 +48,7 @@ deathlink_sent_this_death: we interacted with the multiworld on this death, wait oot_loc_name_to_id = network_data_package["games"]["Ocarina of Time"]["location_name_to_id"] +script_version: int = 1 def get_item_value(ap_id): return ap_id - 66000 @@ -78,6 +79,7 @@ class OoTContext(CommonContext): self.deathlink_enabled = False self.deathlink_pending = False self.deathlink_sent_this_death = False + self.version_warning = False async def server_auth(self, password_requested: bool = False): if password_requested and not self.password: @@ -166,21 +168,30 @@ async def n64_sync_task(ctx: OoTContext): try: await asyncio.wait_for(writer.drain(), timeout=1.5) try: - # Data will return a dict with up to five fields: + # Data will return a dict with up to six fields: # 1. str: player name (always) - # 2. bool: deathlink active (always) - # 3. dict[str, bool]: checked locations - # 4. bool: whether Link is currently at 0 HP - # 5. bool: whether the game currently registers as complete + # 2. int: script version (always) + # 3. bool: deathlink active (always) + # 4. dict[str, bool]: checked locations + # 5. bool: whether Link is currently at 0 HP + # 6. bool: whether the game currently registers as complete data = await asyncio.wait_for(reader.readline(), timeout=10) data_decoded = json.loads(data.decode()) - if ctx.game is not None and 'locations' in data_decoded: - # Not just a keep alive ping, parse - asyncio.create_task(parse_payload(data_decoded, ctx, False)) - if not ctx.auth: - ctx.auth = data_decoded['playerName'] - if ctx.awaiting_rom: - await ctx.server_auth(False) + reported_version = data_decoded.get('scriptVersion', 0) + if reported_version == script_version: + if ctx.game is not None and 'locations' in data_decoded: + # Not just a keep alive ping, parse + asyncio.create_task(parse_payload(data_decoded, ctx, False)) + if not ctx.auth: + ctx.auth = data_decoded['playerName'] + if ctx.awaiting_rom: + await ctx.server_auth(False) + else: + if not ctx.version_warning: + logger.warning(f"Your Lua script is version {reported_version}, expected {script_version}. " + "Please update to the latest version. " + "Your connection to the Archipelago server will not be accepted.") + ctx.version_warning = True except asyncio.TimeoutError: logger.debug("Read Timed Out, Reconnecting") error_status = CONNECTION_TIMING_OUT_STATUS diff --git a/data/lua/OOT/oot_connector.lua b/data/lua/OOT/oot_connector.lua index bfb41ed006..97171814ab 100644 --- a/data/lua/OOT/oot_connector.lua +++ b/data/lua/OOT/oot_connector.lua @@ -2,7 +2,8 @@ local socket = require("socket") local json = require('json') local math = require('math') -local script_version = '2022-03-22' -- Should be the last modified date +local last_modified_date = '2022-05-25' -- Should be the last modified date +local script_version = 1 -------------------------------------------------- -- Heavily modified form of RiptideSage's tracker @@ -1781,6 +1782,7 @@ function receive() -- Determine message to send back local retTable = {} retTable["playerName"] = get_player_name() + retTable["scriptVersion"] = script_version retTable["deathlinkActive"] = deathlink_enabled() if InSafeState() then retTable["locations"] = check_all_locations(master_quest_table_address) From dc558f906c59cc99296dd92532806cb814d80dcf Mon Sep 17 00:00:00 2001 From: espeon65536 Date: Wed, 25 May 2022 23:21:37 -0500 Subject: [PATCH 131/149] OoT: lua script reads MQ dungeon address dynamically from autotracker context finally I can stop updating this every version --- data/lua/OOT/oot_connector.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/lua/OOT/oot_connector.lua b/data/lua/OOT/oot_connector.lua index 97171814ab..eebc12b6a9 100644 --- a/data/lua/OOT/oot_connector.lua +++ b/data/lua/OOT/oot_connector.lua @@ -1547,7 +1547,7 @@ local player_names_address = coop_context + 20 local player_name_length = 8 -- 8 bytes local rom_name_location = player_names_address + 0x800 -local master_quest_table_address = rando_context + 0xB5A8 +local master_quest_table_address = rando_context + (mainmemory.read_u32_be(rando_context + 0x0CE0) - 0x03480000) local save_context_addr = 0x11A5D0 local internal_count_addr = save_context_addr + 0x90 From dadd7d469375e8e31dec4f3005802f1046050911 Mon Sep 17 00:00:00 2001 From: espeon65536 Date: Wed, 25 May 2022 23:52:04 -0500 Subject: [PATCH 132/149] OoT: big poe count option returns --- data/lua/OOT/oot_connector.lua | 5 +++-- worlds/oot/Options.py | 10 +++++++++- worlds/oot/__init__.py | 1 - 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/data/lua/OOT/oot_connector.lua b/data/lua/OOT/oot_connector.lua index eebc12b6a9..96eee4f78f 100644 --- a/data/lua/OOT/oot_connector.lua +++ b/data/lua/OOT/oot_connector.lua @@ -9,8 +9,7 @@ local script_version = 1 -- Heavily modified form of RiptideSage's tracker -------------------------------------------------- --- TODO: read this from the ROM -local NUM_BIG_POES_REQUIRED = 1 +local NUM_BIG_POES_REQUIRED = 10 -- The offset constants are all from N64 RAM start. Offsets in the check statements are relative. local save_context_offset = 0x11A5D0 @@ -1556,6 +1555,8 @@ local item_queue = {} local first_connect = true local game_complete = false +NUM_BIG_POES_REQUIRED = mainmemory.read_u8(rando_context + 0x0CEE) + local bytes_to_string = function(bytes) local string = '' for i=0,#(bytes) do diff --git a/worlds/oot/Options.py b/worlds/oot/Options.py index beac763932..50b6c26c86 100644 --- a/worlds/oot/Options.py +++ b/worlds/oot/Options.py @@ -532,6 +532,14 @@ class ChickenCount(Range): default = 7 +class BigPoeCount(Range): + """Number of Big Poes required for the Poe Collector's item.""" + display_name = "Big Poe Count" + range_start = 1 + range_end = 10 + default = 1 + + timesavers_options: typing.Dict[str, type(Option)] = { "skip_child_zelda": SkipChildZelda, "no_escape_sequence": SkipEscape, @@ -544,7 +552,7 @@ timesavers_options: typing.Dict[str, type(Option)] = { "free_scarecrow": FreeScarecrow, "fast_bunny_hood": FastBunny, "chicken_count": ChickenCount, - # "big_poe_count": make_range(1, 10, 1), + "big_poe_count": BigPoeCount, } diff --git a/worlds/oot/__init__.py b/worlds/oot/__init__.py index 43120b696a..c134eba672 100644 --- a/worlds/oot/__init__.py +++ b/worlds/oot/__init__.py @@ -208,7 +208,6 @@ class OOTWorld(World): # Not implemented for now, but needed to placate the generator. Remove as they are implemented self.mq_dungeons_random = False # this will be a deprecated option later self.ocarina_songs = False # just need to pull in the OcarinaSongs module - self.big_poe_count = 1 # disabled due to client-side issues for now self.mix_entrance_pools = False self.decouple_entrances = False From cec0e2cbfb2d3501348269baf2ac1eb25d3e906e Mon Sep 17 00:00:00 2001 From: espeon65536 Date: Thu, 26 May 2022 01:50:49 -0500 Subject: [PATCH 133/149] OoT Client: deathlink toggle --- OoTClient.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/OoTClient.py b/OoTClient.py index 95d315f910..e455efdcd3 100644 --- a/OoTClient.py +++ b/OoTClient.py @@ -63,6 +63,13 @@ class OoTCommandProcessor(ClientCommandProcessor): if isinstance(self.ctx, OoTContext): logger.info(f"N64 Status: {self.ctx.n64_status}") + def _cmd_deathlink(self): + """Toggle deathlink from client. Overrides default setting.""" + if isinstance(self.ctx, OoTContext): + self.ctx.deathlink_client_override = True + self.ctx.deathlink_enabled = not self.ctx.deathlink_enabled + asyncio.create_task(self.ctx.update_death_link(self.ctx.deathlink_enabled), name="Update Deathlink") + class OoTContext(CommonContext): command_processor = OoTCommandProcessor @@ -79,6 +86,7 @@ class OoTContext(CommonContext): self.deathlink_enabled = False self.deathlink_pending = False self.deathlink_sent_this_death = False + self.deathlink_client_override = False self.version_warning = False async def server_auth(self, password_requested: bool = False): @@ -124,8 +132,8 @@ def get_payload(ctx: OoTContext): async def parse_payload(payload: dict, ctx: OoTContext, force: bool): - # Turn on deathlink if it is on - if payload['deathlinkActive'] and not ctx.deathlink_enabled: + # Turn on deathlink if it is on, and if the client hasn't overriden it + if payload['deathlinkActive'] and not ctx.deathlink_enabled and not ctx.deathlink_client_override: await ctx.update_death_link(True) ctx.deathlink_enabled = True From e7862437381d01be11e748c5b97f8f803c72cc47 Mon Sep 17 00:00:00 2001 From: TheCondor07 Date: Thu, 26 May 2022 13:28:10 -0400 Subject: [PATCH 134/149] SC2: Option for random mission order (#569) --- Starcraft2Client.py | 155 +++++++++++++++------- worlds/sc2wol/Locations.py | 38 +++--- worlds/sc2wol/MissionTables.py | 96 ++++++++++++++ worlds/sc2wol/Options.py | 18 ++- worlds/sc2wol/Regions.py | 230 +++++++++++++++++++++++---------- worlds/sc2wol/__init__.py | 25 +++- 6 files changed, 422 insertions(+), 140 deletions(-) create mode 100644 worlds/sc2wol/MissionTables.py diff --git a/Starcraft2Client.py b/Starcraft2Client.py index 51a04ea4a7..1a23fe60e0 100644 --- a/Starcraft2Client.py +++ b/Starcraft2Client.py @@ -11,6 +11,8 @@ from sc2.main import run_game from sc2.data import Race from sc2.bot_ai import BotAI from sc2.player import Bot +from worlds.sc2wol.Regions import MissionInfo +from worlds.sc2wol.MissionTables import lookup_id_to_mission from worlds.sc2wol.Items import lookup_id_to_name, item_table from worlds.sc2wol.Locations import SC2WOL_LOC_ID_OFFSET @@ -32,6 +34,13 @@ nest_asyncio.apply() class StarcraftClientProcessor(ClientCommandProcessor): ctx: Context + missions_unlocked = False + + def _cmd_disable_mission_check(self) -> bool: + """Disables the check to see if a mission is available to play. Meant for co-op runs where one player can play + the next mission in a chain the other player is doing.""" + self.missions_unlocked = True + sc2_logger.info("Mission check has been disabled") def _cmd_play(self, mission_id: str = "") -> bool: """Start a Starcraft 2 mission""" @@ -42,7 +51,8 @@ class StarcraftClientProcessor(ClientCommandProcessor): if num_options > 0: mission_number = int(options[0]) - if is_mission_available(mission_number, self.ctx.checked_locations, mission_req_table): + if self.missions_unlocked or \ + is_mission_available(mission_number, self.ctx.checked_locations, self.ctx.mission_req_table): if self.ctx.sc2_run_task: if not self.ctx.sc2_run_task.done(): sc2_logger.warning("Starcraft 2 Client is still running!") @@ -65,13 +75,13 @@ class StarcraftClientProcessor(ClientCommandProcessor): def _cmd_available(self) -> bool: """Get what missions are currently available to play""" - request_available_missions(self.ctx.checked_locations, mission_req_table, self.ctx.ui) + request_available_missions(self.ctx.checked_locations, self.ctx.mission_req_table, self.ctx.ui) return True def _cmd_unfinished(self) -> bool: """Get what missions are currently available to play and have not had all locations checked""" - request_unfinished_missions(self.ctx.checked_locations, mission_req_table, self.ctx.ui) + request_unfinished_missions(self.ctx.checked_locations, self.ctx.mission_req_table, self.ctx.ui, self.ctx) return True @@ -81,6 +91,7 @@ class Context(CommonContext): items_handling = 0b111 difficulty = -1 all_in_choice = 0 + mission_req_table = None items_rec_to_announce = [] rec_announce_pos = 0 items_sent_to_announce = [] @@ -102,6 +113,11 @@ class Context(CommonContext): if cmd in {"Connected"}: self.difficulty = args["slot_data"]["game_difficulty"] self.all_in_choice = args["slot_data"]["all_in_map"] + slot_req_table = args["slot_data"]["mission_req"] + self.mission_req_table = {} + for mission in slot_req_table: + self.mission_req_table[mission] = MissionInfo(**slot_req_table[mission]) + if cmd in {"PrintJSON"}: noted = False if "receiving" in args: @@ -224,8 +240,8 @@ async def starcraft_launch(ctx: Context, mission_id): sc2_logger.info(f"Launching {lookup_id_to_mission[mission_id]}. If game does not launch check log file for errors.") - run_game(sc2.maps.get(maps_table[mission_id - 1]), [ - Bot(Race.Terran, ArchipelagoBot(ctx, mission_id), name="Archipelago", fullscreen=True)], realtime=True) + run_game(sc2.maps.get(maps_table[mission_id - 1]), [Bot(Race.Terran, ArchipelagoBot(ctx, mission_id), + name="Archipelago", fullscreen=True)], realtime=True) class ArchipelagoBot(sc2.bot_ai.BotAI): @@ -302,7 +318,7 @@ class ArchipelagoBot(sc2.bot_ai.BotAI): game_state = int(38281 - unit.health) self.can_read_game = True - if iteration == 80 and not game_state & 1: + if iteration == 160 and not game_state & 1: await self.chat_send("SendMessage Warning: Archipelago unable to connect or has lost connection to " + "Starcraft 2 (This is likely a map issue)") @@ -390,15 +406,6 @@ class ArchipelagoBot(sc2.bot_ai.BotAI): await self.chat_send("LostConnection - Lost connection to game.") -class MissionInfo(typing.NamedTuple): - id: int - extra_locations: int - required_world: list[int] - number: int = 0 # number of worlds need beaten - completion_critical: bool = False # missions needed to beat game - or_requirements: bool = False # true if the requirements should be or-ed instead of and-ed - - mission_req_table = { "Liberation Day": MissionInfo(1, 7, [], completion_critical=True), "The Outlaws": MissionInfo(2, 2, [1], completion_critical=True), @@ -431,17 +438,17 @@ mission_req_table = { "All-In": MissionInfo(29, -1, [27, 28], completion_critical=True, or_requirements=True) } -lookup_id_to_mission: typing.Dict[int, str] = { - data.id: mission_name for mission_name, data in mission_req_table.items() if data.id} - -def calc_objectives_completed(mission, missions_info, locations_done): +def calc_objectives_completed(mission, missions_info, locations_done, unfinished_locations, ctx): objectives_complete = 0 if missions_info[mission].extra_locations > 0: for i in range(missions_info[mission].extra_locations): if (missions_info[mission].id * 100 + SC2WOL_LOC_ID_OFFSET + i) in locations_done: objectives_complete += 1 + else: + unfinished_locations[mission].append(ctx.location_name_getter( + missions_info[mission].id * 100 + SC2WOL_LOC_ID_OFFSET + i)) return objectives_complete @@ -449,31 +456,37 @@ def calc_objectives_completed(mission, missions_info, locations_done): return -1 -def request_unfinished_missions(locations_done, location_table, ui): - message = "Unfinished Missions: " +def request_unfinished_missions(locations_done, location_table, ui, ctx): + if location_table: + message = "Unfinished Missions: " + unlocks = initialize_blank_mission_dict(location_table) + unfinished_locations = initialize_blank_mission_dict(location_table) - unfinished_missions = calc_unfinished_missions(locations_done, location_table) + unfinished_missions = calc_unfinished_missions(locations_done, location_table, unlocks, unfinished_locations, ctx) + message += ", ".join(f"{mark_up_mission_name(mission, location_table, ui,unlocks)}[{location_table[mission].id}] " + + mark_up_objectives( + f"[{unfinished_missions[mission]}/{location_table[mission].extra_locations}]", + ctx, unfinished_locations, mission) + for mission in unfinished_missions) - message += ", ".join(f"{mark_critical(mission,location_table, ui)}[{location_table[mission].id}] " - f"({unfinished_missions[mission]}/{location_table[mission].extra_locations})" - for mission in unfinished_missions) - - if ui: - ui.log_panels['All'].on_message_markup(message) - ui.log_panels['Starcraft2'].on_message_markup(message) + if ui: + ui.log_panels['All'].on_message_markup(message) + ui.log_panels['Starcraft2'].on_message_markup(message) + else: + sc2_logger.info(message) else: - sc2_logger.info(message) + sc2_logger.warning("No mission table found, you are likely not connected to a server.") -def calc_unfinished_missions(locations_done, locations): +def calc_unfinished_missions(locations_done, locations, unlocks, unfinished_locations, ctx): unfinished_missions = [] locations_completed = [] - available_missions = calc_available_missions(locations_done, locations) + available_missions = calc_available_missions(locations_done, locations, unlocks) for name in available_missions: if not locations[name].extra_locations == -1: - objectives_completed = calc_objectives_completed(name, locations, locations_done) + objectives_completed = calc_objectives_completed(name, locations, locations_done, unfinished_locations, ctx) if objectives_completed < locations[name].extra_locations: unfinished_missions.append(name) @@ -492,31 +505,65 @@ def is_mission_available(mission_id_to_check, locations_done, locations): return any(mission_id_to_check == locations[mission].id for mission in unfinished_missions) -def mark_critical(mission, location_table, ui): +def mark_up_mission_name(mission, location_table, ui, unlock_table): """Checks if the mission is required for game completion and adds '*' to the name to mark that.""" + if location_table[mission].completion_critical: if ui: - return "[color=AF99EF]" + mission + "[/color]" + message = "[color=AF99EF]" + mission + "[/color]" else: - return "*" + mission + "*" + message = "*" + mission + "*" else: - return mission + message = mission + + if ui: + unlocks = unlock_table[mission] + + if len(unlocks) > 0: + pre_message = f"[ref={list(location_table).index(mission)}|Unlocks: " + pre_message += ", ".join(f"{unlock}({location_table[unlock].id})" for unlock in unlocks) + pre_message += f"]" + message = pre_message + message + "[/ref]" + + return message + + +def mark_up_objectives(message, ctx, unfinished_locations, mission): + formatted_message = message + + if ctx.ui: + locations = unfinished_locations[mission] + + pre_message = f"[ref={list(ctx.mission_req_table).index(mission)+30}|" + pre_message += "
    ".join(location for location in locations) + pre_message += f"]" + formatted_message = pre_message + message + "[/ref]" + + return formatted_message def request_available_missions(locations_done, location_table, ui): - message = "Available Missions: " + if location_table: + message = "Available Missions: " - missions = calc_available_missions(locations_done, location_table) - message += ", ".join(f"{mark_critical(mission,location_table, ui)}[{location_table[mission].id}]" for mission in missions) + # Initialize mission unlock table + unlocks = initialize_blank_mission_dict(location_table) - if ui: - ui.log_panels['All'].on_message_markup(message) - ui.log_panels['Starcraft2'].on_message_markup(message) + missions = calc_available_missions(locations_done, location_table, unlocks) + message += \ + ", ".join(f"{mark_up_mission_name(mission, location_table, ui, unlocks)}[{location_table[mission].id}]" + for mission in missions) + + if ui: + ui.log_panels['All'].on_message_markup(message) + ui.log_panels['Starcraft2'].on_message_markup(message) + else: + sc2_logger.info(message) else: - sc2_logger.info(message) + sc2_logger.warning("No mission table found, you are likely not connected to a server.") -def calc_available_missions(locations_done, locations): +def calc_available_missions(locations_done, locations, unlocks=None): available_missions = [] missions_complete = 0 @@ -526,6 +573,11 @@ def calc_available_missions(locations_done, locations): missions_complete += 1 for name in locations: + # Go through the required missions for each mission and fill up unlock table used later for hover-over tooltips + if unlocks: + for unlock in locations[name].required_world: + unlocks[list(locations)[unlock-1]].append(name) + if mission_reqs_completed(name, missions_complete, locations_done, locations): available_missions.append(name) @@ -549,14 +601,14 @@ def mission_reqs_completed(location_to_check, missions_complete, locations_done, req_success = True # Check if required mission has been completed - if not (req_mission * 100 + SC2WOL_LOC_ID_OFFSET) in locations_done: + if not (locations[list(locations)[req_mission-1]].id * 100 + SC2WOL_LOC_ID_OFFSET) in locations_done: if not locations[location_to_check].or_requirements: return False else: req_success = False # Recursively check required mission to see if it's requirements are met, in case !collect has been done - if not mission_reqs_completed(lookup_id_to_mission[req_mission], missions_complete, locations_done, + if not mission_reqs_completed(list(locations)[req_mission-1], missions_complete, locations_done, locations): if not locations[location_to_check].or_requirements: return False @@ -581,6 +633,15 @@ def mission_reqs_completed(location_to_check, missions_complete, locations_done, return True +def initialize_blank_mission_dict(location_table): + unlocks = {} + + for mission in list(location_table): + unlocks[mission] = [] + + return unlocks + + if __name__ == '__main__': colorama.init() asyncio.run(main()) diff --git a/worlds/sc2wol/Locations.py b/worlds/sc2wol/Locations.py index 402d21248f..dc2ec74a4b 100644 --- a/worlds/sc2wol/Locations.py +++ b/worlds/sc2wol/Locations.py @@ -100,7 +100,7 @@ def get_locations(world: Optional[MultiWorld], player: Optional[int]) -> Tuple[L lambda state: state._sc2wol_has_common_unit(world, player) and state._sc2wol_has_anti_air(world, player) and state._sc2wol_has_heavy_defense(world, player)), - LocationData("The Moebius Factor", "The Moebius Factor: 3rd Data Core", SC2WOL_LOC_ID_OFFSET + 1000, + LocationData("The Moebius Factor", "The Moebius Factor: Victory", SC2WOL_LOC_ID_OFFSET + 1000, lambda state: state._sc2wol_has_air(world, player)), LocationData("The Moebius Factor", "The Moebius Factor: 1st Data Core ", SC2WOL_LOC_ID_OFFSET + 1001, lambda state: state._sc2wol_has_air(world, player) or True), @@ -131,7 +131,7 @@ def get_locations(world: Optional[MultiWorld], player: Optional[int]) -> Tuple[L lambda state: state._sc2wol_has_common_unit(world, player)), LocationData("Supernova", "Beat Supernova", None, lambda state: state._sc2wol_has_common_unit(world, player)), - LocationData("Maw of the Void", "Maw of the Void: Xel'Naga Vault", SC2WOL_LOC_ID_OFFSET + 1200, + LocationData("Maw of the Void", "Maw of the Void: Victory", SC2WOL_LOC_ID_OFFSET + 1200, lambda state: state.has('Battlecruiser', player) or state.has('Science Vessel', player) and state._sc2wol_has_air(world, player)), LocationData("Maw of the Void", "Maw of the Void: Landing Zone Cleared", SC2WOL_LOC_ID_OFFSET + 1201), @@ -148,14 +148,14 @@ def get_locations(world: Optional[MultiWorld], player: Optional[int]) -> Tuple[L LocationData("Maw of the Void", "Beat Maw of the Void", None, lambda state: state.has('Battlecruiser', player) or state.has('Science Vessel', player) and state._sc2wol_has_air(world, player)), - LocationData("Devil's Playground", "Devil's Playground: 8000 Minerals", SC2WOL_LOC_ID_OFFSET + 1300, + LocationData("Devil's Playground", "Devil's Playground: Victory", SC2WOL_LOC_ID_OFFSET + 1300, lambda state: state._sc2wol_has_common_unit(world, player) or state.has("Reaper", player)), LocationData("Devil's Playground", "Devil's Playground: Tosh's Miners", SC2WOL_LOC_ID_OFFSET + 1301), LocationData("Devil's Playground", "Devil's Playground: Brutalisk", SC2WOL_LOC_ID_OFFSET + 1302, lambda state: state._sc2wol_has_common_unit(world, player) or state.has("Reaper", player)), LocationData("Devil's Playground", "Beat Devil's Playground", None, lambda state: state._sc2wol_has_common_unit(world, player) or state.has("Reaper", player)), - LocationData("Welcome to the Jungle", "Welcome to the Jungle: 7 Canisters", SC2WOL_LOC_ID_OFFSET + 1400, + LocationData("Welcome to the Jungle", "Welcome to the Jungle: Victory", SC2WOL_LOC_ID_OFFSET + 1400, lambda state: state._sc2wol_has_common_unit(world, player) and state._sc2wol_has_mobile_anti_air(world, player)), LocationData("Welcome to the Jungle", "Welcome to the Jungle: Close Relic", SC2WOL_LOC_ID_OFFSET + 1401), @@ -168,25 +168,25 @@ def get_locations(world: Optional[MultiWorld], player: Optional[int]) -> Tuple[L LocationData("Welcome to the Jungle", "Beat Welcome to the Jungle", None, lambda state: state._sc2wol_has_common_unit(world, player) and state._sc2wol_has_mobile_anti_air(world, player)), - LocationData("Breakout", "Breakout: Main Prison", SC2WOL_LOC_ID_OFFSET + 1500), + LocationData("Breakout", "Breakout: Victory", SC2WOL_LOC_ID_OFFSET + 1500), LocationData("Breakout", "Breakout: Diamondback Prison", SC2WOL_LOC_ID_OFFSET + 1501), LocationData("Breakout", "Breakout: Siegetank Prison", SC2WOL_LOC_ID_OFFSET + 1502), LocationData("Breakout", "Beat Breakout", None), - LocationData("Ghost of a Chance", "Ghost of a Chance: Psi-Indoctrinator", SC2WOL_LOC_ID_OFFSET + 1600), + LocationData("Ghost of a Chance", "Ghost of a Chance: Victory", SC2WOL_LOC_ID_OFFSET + 1600), LocationData("Ghost of a Chance", "Ghost of a Chance: Terrazine Tank", SC2WOL_LOC_ID_OFFSET + 1601), LocationData("Ghost of a Chance", "Ghost of a Chance: Jorium Stockpile", SC2WOL_LOC_ID_OFFSET + 1602), LocationData("Ghost of a Chance", "Ghost of a Chance: First Island Spectres", SC2WOL_LOC_ID_OFFSET + 1603), LocationData("Ghost of a Chance", "Ghost of a Chance: Second Island Spectres", SC2WOL_LOC_ID_OFFSET + 1604), LocationData("Ghost of a Chance", "Ghost of a Chance: Third Island Spectres", SC2WOL_LOC_ID_OFFSET + 1605), LocationData("Ghost of a Chance", "Beat Ghost of a Chance", None), - LocationData("The Great Train Robbery", "The Great Train Robbery: 8 Trains", SC2WOL_LOC_ID_OFFSET + 1700, + LocationData("The Great Train Robbery", "The Great Train Robbery: Victory", SC2WOL_LOC_ID_OFFSET + 1700, lambda state: state._sc2wol_has_train_killers(world, player)), LocationData("The Great Train Robbery", "The Great Train Robbery: North Defiler", SC2WOL_LOC_ID_OFFSET + 1701), LocationData("The Great Train Robbery", "The Great Train Robbery: Mid Defiler", SC2WOL_LOC_ID_OFFSET + 1702), LocationData("The Great Train Robbery", "The Great Train Robbery: South Defiler", SC2WOL_LOC_ID_OFFSET + 1703), LocationData("The Great Train Robbery", "Beat The Great Train Robbery", None, lambda state: state._sc2wol_has_train_killers(world, player)), - LocationData("Cutthroat", "Cutthroat: Orlan's Planetary", SC2WOL_LOC_ID_OFFSET + 1800, + LocationData("Cutthroat", "Cutthroat: Victory", SC2WOL_LOC_ID_OFFSET + 1800, lambda state: state._sc2wol_has_common_unit(world, player)), LocationData("Cutthroat", "Cutthroat: Mira Han", SC2WOL_LOC_ID_OFFSET + 1801, lambda state: state._sc2wol_has_common_unit(world, player)), @@ -197,7 +197,7 @@ def get_locations(world: Optional[MultiWorld], player: Optional[int]) -> Tuple[L lambda state: state._sc2wol_has_common_unit(world, player)), LocationData("Cutthroat", "Beat Cutthroat", None, lambda state: state._sc2wol_has_common_unit(world, player)), - LocationData("Engine of Destruction", "Engine of Destruction: Dominion Bases", SC2WOL_LOC_ID_OFFSET + 1900, + LocationData("Engine of Destruction", "Engine of Destruction: Victory", SC2WOL_LOC_ID_OFFSET + 1900, lambda state: state._sc2wol_has_mobile_anti_air(world, player)), LocationData("Engine of Destruction", "Engine of Destruction: Odin", SC2WOL_LOC_ID_OFFSET + 1901), LocationData("Engine of Destruction", "Engine of Destruction: Loki", SC2WOL_LOC_ID_OFFSET + 1902, @@ -213,7 +213,7 @@ def get_locations(world: Optional[MultiWorld], player: Optional[int]) -> Tuple[L LocationData("Engine of Destruction", "Beat Engine of Destruction", None, lambda state: state._sc2wol_has_mobile_anti_air(world, player) and state._sc2wol_has_common_unit(world, player) or state.has('Wraith', player)), - LocationData("Media Blitz", "Media Blitz: Full Upload", SC2WOL_LOC_ID_OFFSET + 2000, + LocationData("Media Blitz", "Media Blitz: Victory", SC2WOL_LOC_ID_OFFSET + 2000, lambda state: state._sc2wol_has_competent_comp(world, player)), LocationData("Media Blitz", "Media Blitz: Tower 1", SC2WOL_LOC_ID_OFFSET + 2001, lambda state: state._sc2wol_has_competent_comp(world, player)), @@ -224,19 +224,19 @@ def get_locations(world: Optional[MultiWorld], player: Optional[int]) -> Tuple[L LocationData("Media Blitz", "Media Blitz: Science Facility", SC2WOL_LOC_ID_OFFSET + 2004), LocationData("Media Blitz", "Beat Media Blitz", None, lambda state: state._sc2wol_has_competent_comp(world, player)), - LocationData("Piercing the Shroud", "Piercing the Shroud: Facility Escape", SC2WOL_LOC_ID_OFFSET + 2100), + LocationData("Piercing the Shroud", "Piercing the Shroud: Victory", SC2WOL_LOC_ID_OFFSET + 2100), LocationData("Piercing the Shroud", "Piercing the Shroud: Holding Cell Relic", SC2WOL_LOC_ID_OFFSET + 2101), LocationData("Piercing the Shroud", "Piercing the Shroud: Brutalisk Relic", SC2WOL_LOC_ID_OFFSET + 2102), LocationData("Piercing the Shroud", "Piercing the Shroud: First Escape Relic", SC2WOL_LOC_ID_OFFSET + 2103), LocationData("Piercing the Shroud", "Piercing the Shroud: Second Escape Relic", SC2WOL_LOC_ID_OFFSET + 2104), LocationData("Piercing the Shroud", "Piercing the Shroud: Brutalisk ", SC2WOL_LOC_ID_OFFSET + 2105), LocationData("Piercing the Shroud", "Beat Piercing the Shroud", None), - LocationData("Whispers of Doom", "Whispers of Doom: Void Seeker Escape", SC2WOL_LOC_ID_OFFSET + 2200), + LocationData("Whispers of Doom", "Whispers of Doom: Victory", SC2WOL_LOC_ID_OFFSET + 2200), LocationData("Whispers of Doom", "Whispers of Doom: First Hatchery", SC2WOL_LOC_ID_OFFSET + 2201), LocationData("Whispers of Doom", "Whispers of Doom: Second Hatchery", SC2WOL_LOC_ID_OFFSET + 2202), LocationData("Whispers of Doom", "Whispers of Doom: Third Hatchery", SC2WOL_LOC_ID_OFFSET + 2203), LocationData("Whispers of Doom", "Beat Whispers of Doom", None), - LocationData("A Sinister Turn", "A Sinister Turn: Preservers Freed", SC2WOL_LOC_ID_OFFSET + 2300, + LocationData("A Sinister Turn", "A Sinister Turn: Victory", SC2WOL_LOC_ID_OFFSET + 2300, lambda state: state._sc2wol_has_protoss_medium_units(world, player)), LocationData("A Sinister Turn", "A Sinister Turn: Robotics Facility", SC2WOL_LOC_ID_OFFSET + 2301), LocationData("A Sinister Turn", "A Sinister Turn: Dark Shrine", SC2WOL_LOC_ID_OFFSET + 2302), @@ -244,31 +244,31 @@ def get_locations(world: Optional[MultiWorld], player: Optional[int]) -> Tuple[L lambda state: state._sc2wol_has_protoss_common_units(world, player)), LocationData("A Sinister Turn", "Beat A Sinister Turn", None, lambda state: state._sc2wol_has_protoss_medium_units(world, player)), - LocationData("Echoes of the Future", "Echoes of the Future: Overmind", SC2WOL_LOC_ID_OFFSET + 2400, + LocationData("Echoes of the Future", "Echoes of the Future: Victory", SC2WOL_LOC_ID_OFFSET + 2400, lambda state: state._sc2wol_has_protoss_medium_units(world, player)), LocationData("Echoes of the Future", "Echoes of the Future: Close Obelisk", SC2WOL_LOC_ID_OFFSET + 2401), LocationData("Echoes of the Future", "Echoes of the Future: West Obelisk", SC2WOL_LOC_ID_OFFSET + 2402, lambda state: state._sc2wol_has_protoss_common_units(world, player)), LocationData("Echoes of the Future", "Beat Echoes of the Future", None, lambda state: state._sc2wol_has_protoss_medium_units(world, player)), - LocationData("In Utter Darkness", "In Utter Darkness: Kills", SC2WOL_LOC_ID_OFFSET + 2500, + LocationData("In Utter Darkness", "In Utter Darkness: Defeat", SC2WOL_LOC_ID_OFFSET + 2500, lambda state: state._sc2wol_has_protoss_medium_units(world, player)), LocationData("In Utter Darkness", "In Utter Darkness: Protoss Archive", SC2WOL_LOC_ID_OFFSET + 2501, lambda state: state._sc2wol_has_protoss_medium_units(world, player)), - LocationData("In Utter Darkness", "In Utter Darkness: Defeat", SC2WOL_LOC_ID_OFFSET + 2502), + LocationData("In Utter Darkness", "In Utter Darkness: Kills", SC2WOL_LOC_ID_OFFSET + 2502), LocationData("In Utter Darkness", "Beat In Utter Darkness", None, lambda state: state._sc2wol_has_protoss_medium_units(world, player)), - LocationData("Gates of Hell", "Gates of Hell: Nydus Worms", SC2WOL_LOC_ID_OFFSET + 2600, + LocationData("Gates of Hell", "Gates of Hell: Victory", SC2WOL_LOC_ID_OFFSET + 2600, lambda state: state._sc2wol_has_competent_comp(world, player)), LocationData("Gates of Hell", "Gates of Hell: Large Army", SC2WOL_LOC_ID_OFFSET + 2601, lambda state: state._sc2wol_has_competent_comp(world, player)), LocationData("Gates of Hell", "Beat Gates of Hell", None), - LocationData("Belly of the Beast", "Belly of the Beast: Extract", SC2WOL_LOC_ID_OFFSET + 2700), + LocationData("Belly of the Beast", "Belly of the Beast: Victory", SC2WOL_LOC_ID_OFFSET + 2700), LocationData("Belly of the Beast", "Belly of the Beast: First Charge", SC2WOL_LOC_ID_OFFSET + 2701), LocationData("Belly of the Beast", "Belly of the Beast: Second Charge", SC2WOL_LOC_ID_OFFSET + 2702), LocationData("Belly of the Beast", "Belly of the Beast: Third Charge", SC2WOL_LOC_ID_OFFSET + 2703), LocationData("Belly of the Beast", "Beat Belly of the Beast", None), - LocationData("Shatter the Sky", "Shatter the Sky: Platform Destroyed", SC2WOL_LOC_ID_OFFSET + 2800, + LocationData("Shatter the Sky", "Shatter the Sky: Victory", SC2WOL_LOC_ID_OFFSET + 2800, lambda state: state._sc2wol_has_competent_comp(world, player)), LocationData("Shatter the Sky", "Shatter the Sky: Close Coolant Tower", SC2WOL_LOC_ID_OFFSET + 2801, lambda state: state._sc2wol_has_competent_comp(world, player)), diff --git a/worlds/sc2wol/MissionTables.py b/worlds/sc2wol/MissionTables.py new file mode 100644 index 0000000000..d2906fd887 --- /dev/null +++ b/worlds/sc2wol/MissionTables.py @@ -0,0 +1,96 @@ +from typing import NamedTuple, Dict, List + +no_build_regions_list = ["Liberation Day", "Breakout", "Ghost of a Chance", "Piercing the Shroud", "Whispers of Doom", + "Belly of the Beast"] +easy_regions_list = ["The Outlaws", "Zero Hour", "Evacuation", "Outbreak", "Smash and Grab", "Devil's Playground"] +medium_regions_list = ["Safe Haven", "Haven's Fall", "The Dig", "The Moebius Factor", "Supernova", + "Welcome to the Jungle", "The Great Train Robbery", "Cutthroat", "Media Blitz", + "A Sinister Turn", "Echoes of the Future"] +hard_regions_list = ["Maw of the Void", "Engine of Destruction", "In Utter Darkness", "Gates of Hell", + "Shatter the Sky"] + + +class MissionInfo(NamedTuple): + id: int + extra_locations: int + required_world: List[int] + number: int = 0 # number of worlds need beaten + completion_critical: bool = False # missions needed to beat game + or_requirements: bool = False # true if the requirements should be or-ed instead of and-ed + + +class FillMission(NamedTuple): + type: str + connect_to: List[int] # -1 connects to Menu + number: int = 0 # number of worlds need beaten + completion_critical: bool = False # missions needed to beat game + or_requirements: bool = False # true if the requirements should be or-ed instead of and-ed + + +vanilla_shuffle_order = [ + FillMission("no_build", [-1], completion_critical=True), + FillMission("easy", [0], completion_critical=True), + FillMission("easy", [1], completion_critical=True), + FillMission("easy", [2]), + FillMission("medium", [3]), + FillMission("hard", [4], number=7), + FillMission("hard", [4], number=7), + FillMission("easy", [2], completion_critical=True), + FillMission("medium", [7], number=8, completion_critical=True), + FillMission("hard", [8], number=11, completion_critical=True), + FillMission("hard", [9], number=14, completion_critical=True), + FillMission("hard", [10], completion_critical=True), + FillMission("medium", [2], number=4), + FillMission("medium", [12]), + FillMission("hard", [13], number=8), + FillMission("hard", [13], number=8), + FillMission("medium", [2], number=6), + FillMission("hard", [16]), + FillMission("hard", [17]), + FillMission("hard", [18]), + FillMission("hard", [19]), + FillMission("medium", [8]), + FillMission("hard", [21]), + FillMission("hard", [22]), + FillMission("hard", [23]), + FillMission("hard", [11], completion_critical=True), + FillMission("hard", [25], completion_critical=True), + FillMission("hard", [25], completion_critical=True), + FillMission("all_in", [26, 27], completion_critical=True, or_requirements=True) +] + + +vanilla_mission_req_table = { + "Liberation Day": MissionInfo(1, 7, [], completion_critical=True), + "The Outlaws": MissionInfo(2, 2, [1], completion_critical=True), + "Zero Hour": MissionInfo(3, 4, [2], completion_critical=True), + "Evacuation": MissionInfo(4, 4, [3]), + "Outbreak": MissionInfo(5, 3, [4]), + "Safe Haven": MissionInfo(6, 1, [5], number=7), + "Haven's Fall": MissionInfo(7, 1, [5], number=7), + "Smash and Grab": MissionInfo(8, 5, [3], completion_critical=True), + "The Dig": MissionInfo(9, 4, [8], number=8, completion_critical=True), + "The Moebius Factor": MissionInfo(10, 9, [9], number=11, completion_critical=True), + "Supernova": MissionInfo(11, 5, [10], number=14, completion_critical=True), + "Maw of the Void": MissionInfo(12, 6, [11], completion_critical=True), + "Devil's Playground": MissionInfo(13, 3, [3], number=4), + "Welcome to the Jungle": MissionInfo(14, 4, [13]), + "Breakout": MissionInfo(15, 3, [14], number=8), + "Ghost of a Chance": MissionInfo(16, 6, [14], number=8), + "The Great Train Robbery": MissionInfo(17, 4, [3], number=6), + "Cutthroat": MissionInfo(18, 5, [17]), + "Engine of Destruction": MissionInfo(19, 6, [18]), + "Media Blitz": MissionInfo(20, 5, [19]), + "Piercing the Shroud": MissionInfo(21, 6, [20]), + "Whispers of Doom": MissionInfo(22, 4, [9]), + "A Sinister Turn": MissionInfo(23, 4, [22]), + "Echoes of the Future": MissionInfo(24, 3, [23]), + "In Utter Darkness": MissionInfo(25, 3, [24]), + "Gates of Hell": MissionInfo(26, 2, [12], completion_critical=True), + "Belly of the Beast": MissionInfo(27, 4, [26], completion_critical=True), + "Shatter the Sky": MissionInfo(28, 5, [26], completion_critical=True), + "All-In": MissionInfo(29, -1, [27, 28], completion_critical=True, or_requirements=True) +} + +lookup_id_to_mission: Dict[int, str] = { + data.id: mission_name for mission_name, data in vanilla_mission_req_table.items() if data.id} diff --git a/worlds/sc2wol/Options.py b/worlds/sc2wol/Options.py index 8772aa60e5..fe05af2838 100644 --- a/worlds/sc2wol/Options.py +++ b/worlds/sc2wol/Options.py @@ -1,6 +1,6 @@ from typing import Dict from BaseClasses import MultiWorld -from Options import Choice, Option +from Options import Choice, Option, DefaultOnToggle class GameDifficulty(Choice): @@ -35,12 +35,28 @@ class AllInMap(Choice): option_air = 1 +class MissionOrder(Choice): + """Determines the order the missions are played in. + Vanilla: Keeps the standard mission order and branching from the WoL Campaign. + Vanilla Shuffled: Keeps same branching paths from the WoL Campaign but randomizes the order of missions within""" + display_name = "Mission Order" + option_vanilla = 0 + option_vanilla_shuffled = 1 + +class ShuffleProtoss(DefaultOnToggle): + """Determines if the 3 protoss missions are included in the shuffle if Vanilla Shuffled is enabled. If this is + not the 3 protoss missions will stay in their vanilla order in the mission order making them optional to complete + the game.""" + display_name = "Shuffle Protoss Missions" + # noinspection PyTypeChecker sc2wol_options: Dict[str, Option] = { "game_difficulty": GameDifficulty, "upgrade_bonus": UpgradeBonus, "bunker_upgrade": BunkerUpgrade, "all_in_map": AllInMap, + "mission_order": MissionOrder, + "shuffle_protoss": ShuffleProtoss } diff --git a/worlds/sc2wol/Regions.py b/worlds/sc2wol/Regions.py index e0d8415b08..bca841f2ac 100644 --- a/worlds/sc2wol/Regions.py +++ b/worlds/sc2wol/Regions.py @@ -1,6 +1,10 @@ -from typing import List, Set, Dict, Tuple, Optional, Callable +from typing import List, Set, Dict, Tuple, Optional, Callable, NamedTuple from BaseClasses import MultiWorld, Region, Entrance, Location, RegionType from .Locations import LocationData +from .Options import get_option_value +from worlds.sc2wol.MissionTables import MissionInfo, vanilla_shuffle_order, vanilla_mission_req_table, \ + no_build_regions_list, easy_regions_list, medium_regions_list, hard_regions_list +import random def create_regions(world: MultiWorld, player: int, locations: Tuple[LocationData, ...], location_cache: List[Location]): @@ -46,73 +50,163 @@ def create_regions(world: MultiWorld, player: int, locations: Tuple[LocationData names: Dict[str, int] = {} - connect(world, player, names, 'Menu', 'Liberation Day'), - connect(world, player, names, 'Liberation Day', 'The Outlaws', - lambda state: state.has("Beat Liberation Day", player)), - connect(world, player, names, 'The Outlaws', 'Zero Hour', - lambda state: state.has("Beat The Outlaws", player)), - connect(world, player, names, 'Zero Hour', 'Evacuation', - lambda state: state.has("Beat Zero Hour", player)), - connect(world, player, names, 'Evacuation', 'Outbreak', - lambda state: state.has("Beat Evacuation", player)), - connect(world, player, names, "Outbreak", "Safe Haven", - lambda state: state._sc2wol_cleared_missions(world, player, 7) and - state.has("Beat Outbreak", player)), - connect(world, player, names, "Outbreak", "Haven's Fall", - lambda state: state._sc2wol_cleared_missions(world, player, 7) and - state.has("Beat Outbreak", player)), - connect(world, player, names, 'Zero Hour', 'Smash and Grab', - lambda state: state.has("Beat Zero Hour", player)), - connect(world, player, names, 'Smash and Grab', 'The Dig', - lambda state: state._sc2wol_cleared_missions(world, player, 8) and - state.has("Beat Smash and Grab", player)), - connect(world, player, names, 'The Dig', 'The Moebius Factor', - lambda state: state._sc2wol_cleared_missions(world, player, 11) and - state.has("Beat The Dig", player)), - connect(world, player, names, 'The Moebius Factor', 'Supernova', - lambda state: state._sc2wol_cleared_missions(world, player, 14) and - state.has("Beat The Moebius Factor", player)), - connect(world, player, names, 'Supernova', 'Maw of the Void', - lambda state: state.has("Beat Supernova", player)), - connect(world, player, names, 'Zero Hour', "Devil's Playground", - lambda state: state._sc2wol_cleared_missions(world, player, 4) and - state.has("Beat Zero Hour", player)), - connect(world, player, names, "Devil's Playground", 'Welcome to the Jungle', - lambda state: state.has("Beat Devil's Playground", player)), - connect(world, player, names, "Welcome to the Jungle", 'Breakout', - lambda state: state._sc2wol_cleared_missions(world, player, 8) and - state.has("Beat Welcome to the Jungle", player)), - connect(world, player, names, "Welcome to the Jungle", 'Ghost of a Chance', - lambda state: state._sc2wol_cleared_missions(world, player, 8) and - state.has("Beat Welcome to the Jungle", player)), - connect(world, player, names, "Zero Hour", 'The Great Train Robbery', - lambda state: state._sc2wol_cleared_missions(world, player, 6) and - state.has("Beat Zero Hour", player)), - connect(world, player, names, 'The Great Train Robbery', 'Cutthroat', - lambda state: state.has("Beat The Great Train Robbery", player)), - connect(world, player, names, 'Cutthroat', 'Engine of Destruction', - lambda state: state.has("Beat Cutthroat", player)), - connect(world, player, names, 'Engine of Destruction', 'Media Blitz', - lambda state: state.has("Beat Engine of Destruction", player)), - connect(world, player, names, 'Media Blitz', 'Piercing the Shroud', - lambda state: state.has("Beat Media Blitz", player)), - connect(world, player, names, 'The Dig', 'Whispers of Doom', - lambda state: state.has("Beat The Dig", player)), - connect(world, player, names, 'Whispers of Doom', 'A Sinister Turn', - lambda state: state.has("Beat Whispers of Doom", player)), - connect(world, player, names, 'A Sinister Turn', 'Echoes of the Future', - lambda state: state.has("Beat A Sinister Turn", player)), - connect(world, player, names, 'Echoes of the Future', 'In Utter Darkness', - lambda state: state.has("Beat Echoes of the Future", player)), - connect(world, player, names, 'Maw of the Void', 'Gates of Hell', - lambda state: state.has("Beat Maw of the Void", player)), - connect(world, player, names, 'Gates of Hell', 'Belly of the Beast', - lambda state: state.has("Beat Gates of Hell", player)), - connect(world, player, names, 'Gates of Hell', 'Shatter the Sky', - lambda state: state.has("Beat Gates of Hell", player)), - connect(world, player, names, 'Gates of Hell', 'All-In', - lambda state: state.has('Beat Gates of Hell', player) and ( - state.has('Beat Shatter the Sky', player) or state.has('Beat Belly of the Beast', player))) + if get_option_value(world, player, "mission_order") == 0: + connect(world, player, names, 'Menu', 'Liberation Day'), + connect(world, player, names, 'Liberation Day', 'The Outlaws', + lambda state: state.has("Beat Liberation Day", player)), + connect(world, player, names, 'The Outlaws', 'Zero Hour', + lambda state: state.has("Beat The Outlaws", player)), + connect(world, player, names, 'Zero Hour', 'Evacuation', + lambda state: state.has("Beat Zero Hour", player)), + connect(world, player, names, 'Evacuation', 'Outbreak', + lambda state: state.has("Beat Evacuation", player)), + connect(world, player, names, "Outbreak", "Safe Haven", + lambda state: state._sc2wol_cleared_missions(world, player, 7) and + state.has("Beat Outbreak", player)), + connect(world, player, names, "Outbreak", "Haven's Fall", + lambda state: state._sc2wol_cleared_missions(world, player, 7) and + state.has("Beat Outbreak", player)), + connect(world, player, names, 'Zero Hour', 'Smash and Grab', + lambda state: state.has("Beat Zero Hour", player)), + connect(world, player, names, 'Smash and Grab', 'The Dig', + lambda state: state._sc2wol_cleared_missions(world, player, 8) and + state.has("Beat Smash and Grab", player)), + connect(world, player, names, 'The Dig', 'The Moebius Factor', + lambda state: state._sc2wol_cleared_missions(world, player, 11) and + state.has("Beat The Dig", player)), + connect(world, player, names, 'The Moebius Factor', 'Supernova', + lambda state: state._sc2wol_cleared_missions(world, player, 14) and + state.has("Beat The Moebius Factor", player)), + connect(world, player, names, 'Supernova', 'Maw of the Void', + lambda state: state.has("Beat Supernova", player)), + connect(world, player, names, 'Zero Hour', "Devil's Playground", + lambda state: state._sc2wol_cleared_missions(world, player, 4) and + state.has("Beat Zero Hour", player)), + connect(world, player, names, "Devil's Playground", 'Welcome to the Jungle', + lambda state: state.has("Beat Devil's Playground", player)), + connect(world, player, names, "Welcome to the Jungle", 'Breakout', + lambda state: state._sc2wol_cleared_missions(world, player, 8) and + state.has("Beat Welcome to the Jungle", player)), + connect(world, player, names, "Welcome to the Jungle", 'Ghost of a Chance', + lambda state: state._sc2wol_cleared_missions(world, player, 8) and + state.has("Beat Welcome to the Jungle", player)), + connect(world, player, names, "Zero Hour", 'The Great Train Robbery', + lambda state: state._sc2wol_cleared_missions(world, player, 6) and + state.has("Beat Zero Hour", player)), + connect(world, player, names, 'The Great Train Robbery', 'Cutthroat', + lambda state: state.has("Beat The Great Train Robbery", player)), + connect(world, player, names, 'Cutthroat', 'Engine of Destruction', + lambda state: state.has("Beat Cutthroat", player)), + connect(world, player, names, 'Engine of Destruction', 'Media Blitz', + lambda state: state.has("Beat Engine of Destruction", player)), + connect(world, player, names, 'Media Blitz', 'Piercing the Shroud', + lambda state: state.has("Beat Media Blitz", player)), + connect(world, player, names, 'The Dig', 'Whispers of Doom', + lambda state: state.has("Beat The Dig", player)), + connect(world, player, names, 'Whispers of Doom', 'A Sinister Turn', + lambda state: state.has("Beat Whispers of Doom", player)), + connect(world, player, names, 'A Sinister Turn', 'Echoes of the Future', + lambda state: state.has("Beat A Sinister Turn", player)), + connect(world, player, names, 'Echoes of the Future', 'In Utter Darkness', + lambda state: state.has("Beat Echoes of the Future", player)), + connect(world, player, names, 'Maw of the Void', 'Gates of Hell', + lambda state: state.has("Beat Maw of the Void", player)), + connect(world, player, names, 'Gates of Hell', 'Belly of the Beast', + lambda state: state.has("Beat Gates of Hell", player)), + connect(world, player, names, 'Gates of Hell', 'Shatter the Sky', + lambda state: state.has("Beat Gates of Hell", player)), + connect(world, player, names, 'Gates of Hell', 'All-In', + lambda state: state.has('Beat Gates of Hell', player) and ( + state.has('Beat Shatter the Sky', player) or state.has('Beat Belly of the Beast', player))) + + return vanilla_mission_req_table + + elif get_option_value(world, player, "mission_order") == 1: + missions = [] + no_build_pool = no_build_regions_list[:] + easy_pool = easy_regions_list[:] + medium_pool = medium_regions_list[:] + hard_pool = hard_regions_list[:] + + # Initial fill out of mission list and marking all-in mission + for mission in vanilla_shuffle_order: + if mission.type == "all_in": + missions.append("All-In") + else: + missions.append(mission.type) + + # Place Protoss Missions if we are not using ShuffleProtoss + if get_option_value(world, player, "shuffle_protoss") == 0: + missions[22] = "A Sinister Turn" + medium_pool.remove("A Sinister Turn") + missions[23] = "Echoes of the Future" + medium_pool.remove("Echoes of the Future") + missions[24] = "In Utter Darkness" + hard_pool.remove("In Utter Darkness") + + no_build_slots = [] + easy_slots = [] + medium_slots = [] + hard_slots = [] + + # Search through missions to find slots needed to fill + for i in range(len(missions)): + if missions[i] == "no_build": + no_build_slots.append(i) + elif missions[i] == "easy": + easy_slots.append(i) + elif missions[i] == "medium": + medium_slots.append(i) + elif missions[i] == "hard": + hard_slots.append(i) + + # Add no_build missions to the pool and fill in no_build slots + missions_to_add = no_build_pool + for slot in no_build_slots: + filler = random.randint(0, len(missions_to_add)-1) + + missions[slot] = missions_to_add.pop(filler) + + # Add easy missions into pool and fill in easy slots + missions_to_add = missions_to_add + easy_pool + for slot in easy_slots: + filler = random.randint(0, len(missions_to_add) - 1) + + missions[slot] = missions_to_add.pop(filler) + + # Add medium missions into pool and fill in medium slots + missions_to_add = missions_to_add + medium_pool + for slot in medium_slots: + filler = random.randint(0, len(missions_to_add) - 1) + + missions[slot] = missions_to_add.pop(filler) + + # Add hard missions into pool and fill in hard slots + missions_to_add = missions_to_add + hard_pool + for slot in hard_slots: + filler = random.randint(0, len(missions_to_add) - 1) + + missions[slot] = missions_to_add.pop(filler) + + # Loop through missions to create requirements table and connect regions + # TODO: Handle 'and' connections + mission_req_table = {} + for i in range(len(missions)): + connections = [] + for connection in vanilla_shuffle_order[i].connect_to: + if connection == -1: + connect(world, player, names, "Menu", missions[i]) + else: + connect(world, player, names, missions[connection], missions[i], + (lambda name: (lambda state: state.has(f"Beat {name}", player)))(missions[connection])) + connections.append(connection + 1) + + mission_req_table.update({missions[i]: MissionInfo( + vanilla_mission_req_table[missions[i]].id, vanilla_mission_req_table[missions[i]].extra_locations, + connections, completion_critical=vanilla_shuffle_order[i].completion_critical, + or_requirements=vanilla_shuffle_order[i].or_requirements)}) + + return mission_req_table def throwIfAnyLocationIsNotAssignedToARegion(regions: List[Region], regionNames: Set[str]): diff --git a/worlds/sc2wol/__init__.py b/worlds/sc2wol/__init__.py index a06a37eedd..31b759d8d7 100644 --- a/worlds/sc2wol/__init__.py +++ b/worlds/sc2wol/__init__.py @@ -1,6 +1,6 @@ import typing -from typing import List, Set, Tuple +from typing import List, Set, Tuple, NamedTuple from BaseClasses import Item, MultiWorld, Location, Tutorial from ..AutoWorld import World, WebWorld from .Items import StarcraftWoLItem, item_table, filler_items, item_name_groups, get_full_item_list, \ @@ -24,6 +24,7 @@ class Starcraft2WoLWebWorld(WebWorld): tutorials = [setup] + class SC2WoLWorld(World): """ StarCraft II: Wings of Liberty is a science fiction real-time strategy video game developed and published by Blizzard Entertainment. @@ -40,6 +41,7 @@ class SC2WoLWorld(World): item_name_groups = item_name_groups locked_locations: typing.List[str] location_cache: typing.List[Location] + mission_req_table = {} def __init__(self, world: MultiWorld, player: int): super(SC2WoLWorld, self).__init__(world, player) @@ -55,8 +57,8 @@ class SC2WoLWorld(World): return StarcraftWoLItem(name, data.progression, data.code, self.player) def create_regions(self): - create_regions(self.world, self.player, get_locations(self.world, self.player), - self.location_cache) + self.mission_req_table = create_regions(self.world, self.player, get_locations(self.world, self.player), + self.location_cache) def generate_basic(self): excluded_items = get_excluded_items(self, self.world, self.player) @@ -83,6 +85,11 @@ class SC2WoLWorld(World): option = getattr(self.world, option_name)[self.player] if type(option.value) in {str, int}: slot_data[option_name] = int(option.value) + slot_req_table = {} + for mission in self.mission_req_table: + slot_req_table[mission] = self.mission_req_table[mission]._asdict() + + slot_data["mission_req"] = slot_req_table return slot_data @@ -122,7 +129,15 @@ def assign_starter_items(world: MultiWorld, player: int, excluded_items: Set[str if not local_basic_unit: raise Exception("At least one basic unit must be local") - assign_starter_item(world, player, excluded_items, locked_locations, 'Liberation Day: First Statue', + # The first world should also be the starting world + first_location = list(world.worlds[player].mission_req_table)[0] + + if first_location == "In Utter Darkness": + first_location = first_location + ": Defeat" + else: + first_location = first_location + ": Victory" + + assign_starter_item(world, player, excluded_items, locked_locations, first_location, local_basic_unit) @@ -168,4 +183,4 @@ def create_item_with_correct_settings(world: MultiWorld, player: int, name: str) if not item.advancement: return item - return item \ No newline at end of file + return item From fb99dca83e4933a3009f93892449cb9889a19b3f Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Fri, 27 May 2022 02:58:48 +0200 Subject: [PATCH 135/149] WebHost: update waitress and bokeh (#575) --- WebHostLib/requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/WebHostLib/requirements.txt b/WebHostLib/requirements.txt index e3cea7c77f..ea1e27f6e1 100644 --- a/WebHostLib/requirements.txt +++ b/WebHostLib/requirements.txt @@ -1,7 +1,7 @@ flask>=2.1.2 pony>=0.7.16 -waitress>=2.1.0 +waitress>=2.1.1 flask-caching>=1.10.1 Flask-Compress>=1.12 Flask-Limiter>=2.4.5.1 -bokeh>=2.4.2 \ No newline at end of file +bokeh>=2.4.3 \ No newline at end of file From 960988ddcdee7639d3c3b0a8d6b933ec77c106e9 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Fri, 27 May 2022 03:13:49 +0200 Subject: [PATCH 136/149] WebHost: undo autoconnect link as not all browsers behave like Vivaldi. (#577) * WebHost: undo autoconnect link as not all browsers behave like Vivaldi. * Increase tooltip z-index Co-authored-by: Chris Wilson --- WebHostLib/static/styles/tooltip.css | 4 ++-- WebHostLib/templates/hostRoom.html | 7 ++----- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/WebHostLib/static/styles/tooltip.css b/WebHostLib/static/styles/tooltip.css index a5d8c7596b..0c5c0c6969 100644 --- a/WebHostLib/static/styles/tooltip.css +++ b/WebHostLib/static/styles/tooltip.css @@ -47,7 +47,7 @@ give it one of the following classes: tooltip-left, tooltip-right, tooltip-top, /** Directional arrow styles */ .tooltip:before, [data-tooltip]:before { - z-index: 1001; + z-index: 10000; border: 6px solid transparent; background: transparent; content: ""; @@ -55,7 +55,7 @@ give it one of the following classes: tooltip-left, tooltip-right, tooltip-top, /** Content styles */ .tooltip:after, [data-tooltip]:after { - z-index: 1000; + z-index: 10000; padding: 8px; width: 160px; border-radius: 4px; diff --git a/WebHostLib/templates/hostRoom.html b/WebHostLib/templates/hostRoom.html index 13770e85de..b5ec01f256 100644 --- a/WebHostLib/templates/hostRoom.html +++ b/WebHostLib/templates/hostRoom.html @@ -21,11 +21,8 @@ you can simply refresh this page and the server will be started again.
    {% if room.last_port %} You can connect to this room by using -
    - '/connect {{ config['PATCH_TARGET'] }}:{{ room.last_port }}' - + data-tooltip="This means address/ip is {{ config['PATCH_TARGET'] }} and port is {{ room.last_port }}."> + '/connect {{ config['PATCH_TARGET'] }}:{{ room.last_port }}' in the client.
    {% endif %} {{ macros.list_patches_room(room) }} From 65c83393bb5ffbf6b658e881746c649276c87502 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Thu, 26 May 2022 23:28:56 +0200 Subject: [PATCH 137/149] SC2: fix copy pasta in client --- Starcraft2Client.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/Starcraft2Client.py b/Starcraft2Client.py index 1a23fe60e0..777e1c334f 100644 --- a/Starcraft2Client.py +++ b/Starcraft2Client.py @@ -164,8 +164,6 @@ async def main(): await ctx.exit_event.wait() - ctx.server_address = None - ctx.snes_reconnect_address = None await ctx.shutdown() From 28949853f71159c2244f100fe63a647da9506840 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Thu, 26 May 2022 19:49:02 +0200 Subject: [PATCH 138/149] Setup: "ParseVersion" gives Deprecated Warning, fixing the warning. --- inno_setup.iss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inno_setup.iss b/inno_setup.iss index 47809c8768..1dee01af18 100644 --- a/inno_setup.iss +++ b/inno_setup.iss @@ -5,7 +5,7 @@ #define MyAppExeName "ArchipelagoServer.exe" #define MyAppIcon "data/icon.ico" #dim VersionTuple[4] -#define MyAppVersion ParseVersion(source_path + '\ArchipelagoServer.exe', VersionTuple[0], VersionTuple[1], VersionTuple[2], VersionTuple[3]) +#define MyAppVersion GetVersionComponents(source_path + '\ArchipelagoServer.exe', VersionTuple[0], VersionTuple[1], VersionTuple[2], VersionTuple[3]) #define MyAppVersionText Str(VersionTuple[0])+"."+Str(VersionTuple[1])+"."+Str(VersionTuple[2]) From 21a6b0143defe5c4064928863a74e07ca18f2095 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Fri, 27 May 2022 02:09:56 +0200 Subject: [PATCH 139/149] MC: fix Bee Trap name --- worlds/minecraft/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/worlds/minecraft/__init__.py b/worlds/minecraft/__init__.py index 63d87d2300..b1090cac24 100644 --- a/worlds/minecraft/__init__.py +++ b/worlds/minecraft/__init__.py @@ -105,7 +105,7 @@ class MinecraftWorld(World): itempool += ["Dragon Egg Shard"] * self.world.egg_shards_available[self.player] # Add bee traps if desired bee_trap_quantity = ceil(self.world.bee_traps[self.player] * (len(self.location_names)-len(itempool)) * 0.01) - itempool += ["Bee Trap (Minecraft)"] * bee_trap_quantity + itempool += ["Bee Trap"] * bee_trap_quantity # Fill remaining items with randomly generated junk itempool += self.world.random.choices(list(junk_pool.keys()), weights=list(junk_pool.values()), k=len(self.location_names)-len(itempool)) # Convert itempool into real items From b6068f4519b9a3d9d90d8d762d6d5424a15c9240 Mon Sep 17 00:00:00 2001 From: TheCondor07 Date: Fri, 27 May 2022 10:37:47 -0400 Subject: [PATCH 140/149] SC2: Updated webhost details page --- worlds/sc2wol/docs/en_Starcraft 2 Wings of Liberty.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/worlds/sc2wol/docs/en_Starcraft 2 Wings of Liberty.md b/worlds/sc2wol/docs/en_Starcraft 2 Wings of Liberty.md index 6cf3fc7f68..aba882c7d6 100644 --- a/worlds/sc2wol/docs/en_Starcraft 2 Wings of Liberty.md +++ b/worlds/sc2wol/docs/en_Starcraft 2 Wings of Liberty.md @@ -8,9 +8,7 @@ config file. ## What does randomization do to this game? Items which the player would normally acquire throughout the game have been moved around. Logic remains, so the game is -always able to be completed, but because of the item shuffle the player may need to access certain areas before they -would in the vanilla game. All rings and spells are also randomized into those item locations, therefore you can no -longer craft them at the alchemist +always able to be completed. Options exist to also shuffle around the mission order of the campaign. ## What is the goal of Starcraft 2 when randomized? @@ -21,6 +19,12 @@ The goal remains unchanged. Beat the final mission All In. Unit unlocks, upgrade unlocks, armory upgrades, laboratory researches, and mercenary unlocks can be shuffled, and all bonus objectives, side missions, mission completions are now locations that can contain these items. +## What has been changed from vanilla Starcraft 2? + +Some missions have been given more vespene gas available to mine to allow for a wider variety of unit compositions on +those missions. Starports no longer require Factories in order to be built. In 'A Sinister Turn' and 'Echoes +of the Future', you can research protoss air armor and weapon upgrades. + ## Which items can be in another player's world? Any of the items which can be shuffled may also be placed into another player's world. It is possible to choose to limit From 2cb71c5352f121769faf7c1cd4995f02bb067aa1 Mon Sep 17 00:00:00 2001 From: Jarno Westhof Date: Fri, 27 May 2022 19:28:03 +0200 Subject: [PATCH 141/149] [Timespinner] Removed backwarp from refugee camp to library from logic --- worlds/timespinner/Regions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/worlds/timespinner/Regions.py b/worlds/timespinner/Regions.py index c137111558..098657b473 100644 --- a/worlds/timespinner/Regions.py +++ b/worlds/timespinner/Regions.py @@ -120,7 +120,7 @@ def create_regions(world: MultiWorld, player: int, locations: Tuple[LocationData connect(world, player, names, 'Sealed Caves (Xarion)', 'Sealed Caves (upper)', lambda state: state._timespinner_has_doublejump(world, player)) connect(world, player, names, 'Sealed Caves (Xarion)', 'Space time continuum', lambda state: state.has('Twin Pyramid Key', player)) connect(world, player, names, 'Refugee Camp', 'Forest') - connect(world, player, names, 'Refugee Camp', 'Library', lambda state: not is_option_enabled(world, player, "Inverted")) + #connect(world, player, names, 'Refugee Camp', 'Library', lambda state: not is_option_enabled(world, player, "Inverted")) connect(world, player, names, 'Refugee Camp', 'Space time continuum', lambda state: state.has('Twin Pyramid Key', player)) connect(world, player, names, 'Forest', 'Refugee Camp') connect(world, player, names, 'Forest', 'Left Side forest Caves', lambda state: state.has('Talaria Attachment', player) or state._timespinner_has_timestop(world, player)) From 8adc0dd7ebd94c08a1fde04ddd099c03e336b716 Mon Sep 17 00:00:00 2001 From: TheCondor07 Date: Fri, 27 May 2022 14:26:05 -0400 Subject: [PATCH 142/149] SC2: Fixed issue in random mission order with some missions being available too early --- worlds/sc2wol/Regions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/worlds/sc2wol/Regions.py b/worlds/sc2wol/Regions.py index bca841f2ac..a0519cc843 100644 --- a/worlds/sc2wol/Regions.py +++ b/worlds/sc2wol/Regions.py @@ -204,7 +204,7 @@ def create_regions(world: MultiWorld, player: int, locations: Tuple[LocationData mission_req_table.update({missions[i]: MissionInfo( vanilla_mission_req_table[missions[i]].id, vanilla_mission_req_table[missions[i]].extra_locations, connections, completion_critical=vanilla_shuffle_order[i].completion_critical, - or_requirements=vanilla_shuffle_order[i].or_requirements)}) + number=vanilla_shuffle_order[i].number, or_requirements=vanilla_shuffle_order[i].or_requirements)}) return mission_req_table From 5d3b4c8efd413c3b808d6d5b979ea3736da0a078 Mon Sep 17 00:00:00 2001 From: Felix R <50271878+FelicitusNeko@users.noreply.github.com> Date: Fri, 27 May 2022 19:52:14 -0300 Subject: [PATCH 143/149] Meritous: Minor logic change (#584) --- worlds/meritous/Items.py | 3 +++ worlds/meritous/Regions.py | 9 ++++++--- worlds/meritous/__init__.py | 7 ++++++- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/worlds/meritous/Items.py b/worlds/meritous/Items.py index a2d9c86c96..4f02ee9d5b 100644 --- a/worlds/meritous/Items.py +++ b/worlds/meritous/Items.py @@ -163,6 +163,8 @@ class MeritousItem(Item): self.type = name elif name == "Extra Life": self.type = "Other" + elif self.advancement: + self.type = "Important Artifact" else: self.type = "Artifact" self.never_exclude = True @@ -210,5 +212,6 @@ item_groups = { "Artifacts": ["Map", "Shield Boost", "Crystal Efficiency", "Circuit Booster", "Metabolism", "Dodge Enhancer", "Ethereal Monocle", "Crystal Gatherer", "Portable Compass"], + "Important Artifacts": ["Shield Boost", "Circuit Booster", "Metabolism", "Dodge Enhancer"], "Crystals": ["Crystals x500", "Crystals x1000", "Crystals x2000"] } diff --git a/worlds/meritous/Regions.py b/worlds/meritous/Regions.py index 502a40972d..2fdafb6926 100644 --- a/worlds/meritous/Regions.py +++ b/worlds/meritous/Regions.py @@ -68,7 +68,8 @@ def create_regions(world: MultiWorld, player: int): entrance_map = { "To Meridian": { "to": "Meridian", - "rule": lambda state: state.has_group("PSI Keys", player, 1) + "rule": lambda state: state.has_group("PSI Keys", player, 1) and + state.has_group("Important Artifacts", player, 1) }, "To Second Quarter": { "to": "Second Quarter", @@ -76,7 +77,8 @@ def create_regions(world: MultiWorld, player: int): }, "To Ataraxia": { "to": "Ataraxia", - "rule": lambda state: state.has_group("PSI Keys", player, 2) + "rule": lambda state: state.has_group("PSI Keys", player, 2) and + state.has_group("Important Artifacts", player, 2) }, "To Third Quarter": { "to": "Third Quarter", @@ -84,7 +86,8 @@ def create_regions(world: MultiWorld, player: int): }, "To Merodach": { "to": "Merodach", - "rule": lambda state: state.has_group("PSI Keys", player, 3) + "rule": lambda state: state.has_group("PSI Keys", player, 3) and + state.has_group("Important Artifacts", player, 3) }, "To Last Quarter": { "to": "Last Quarter", diff --git a/worlds/meritous/__init__.py b/worlds/meritous/__init__.py index b263219062..2f59f7825c 100644 --- a/worlds/meritous/__init__.py +++ b/worlds/meritous/__init__.py @@ -24,6 +24,8 @@ class MeritousWeb(WebWorld): "setup/en", ["KewlioMZX"] )] + theme = "ice" + bug_report_page = "https://github.com/FelicitusNeko/meritous-ap/issues" class MeritousWorld(World): @@ -60,7 +62,10 @@ class MeritousWorld(World): @staticmethod def _is_progression(name): - return "PSI Key" in name or name in ["Cursed Seal", "Agate Knife"] + return "PSI Key" in name or name in [ + "Cursed Seal", "Agate Knife", "Dodge Enhancer", + "Shield Boost", "Metabolism", "Circuit Booster" + ] def create_item(self, name: str) -> Item: return MeritousItem(name, self._is_progression( From 1a0bfecb5f5bcdcd9a7d39540ddff9388c779598 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sat, 28 May 2022 20:08:06 +0200 Subject: [PATCH 144/149] LttP: convert vendors hint into separate scams option --- worlds/alttp/Options.py | 21 ++++++++++++++++++--- worlds/alttp/Rom.py | 9 ++++++--- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/worlds/alttp/Options.py b/worlds/alttp/Options.py index ca2772fa5a..6d741b7612 100644 --- a/worlds/alttp/Options.py +++ b/worlds/alttp/Options.py @@ -159,11 +159,9 @@ class RestrictBossItem(Toggle): class Hints(Choice): - """Vendors: King Zora and Bottle Merchant say what they're selling. - On/Full: Put item and entrance placement hints on telepathic tiles and some NPCs, Full removes joke hints.""" + """On/Full: Put item and entrance placement hints on telepathic tiles and some NPCs, Full removes joke hints.""" display_name = "Hints" option_off = 0 - option_vendors = 1 option_on = 2 option_full = 3 default = 2 @@ -171,6 +169,22 @@ class Hints(Choice): alias_true = 2 +class Scams(Choice): + """If on, these Merchants will no longer tell you what they're selling.""" + display_name = "Scams" + option_off = 0 + option_king_zora = 1 + option_bottle_merchant = 2 + option_all = 3 + alias_false = 0 + + def gives_king_zora_hint(self): + return self.value in {0, 2} + + def gives_bottle_merchant_hint(self): + return self.value in {0, 1} + + class EnemyShuffle(Toggle): """Randomize every enemy spawn. If mode is Standard, Hyrule Castle is left out (may result in visually wrong enemy sprites in that area.)""" @@ -318,6 +332,7 @@ alttp_options: typing.Dict[str, type(Option)] = { "swordless": Swordless, "retro": Retro, "hints": Hints, + "scams": Scams, "restrict_dungeon_item_on_boss": RestrictBossItem, "pot_shuffle": PotShuffle, "enemy_shuffle": EnemyShuffle, diff --git a/worlds/alttp/Rom.py b/worlds/alttp/Rom.py index f6b3768d62..c4e1cd6485 100644 --- a/worlds/alttp/Rom.py +++ b/worlds/alttp/Rom.py @@ -2120,16 +2120,19 @@ def write_strings(rom, world, player): hint += f" for {world.player_name[dest.player]}" return hint - # For hints, first we write hints about entrances, some from the inconvenient list others from all reasonable entrances. - if world.hints[player]: + if world.scams[player].gives_king_zora_hint: # Zora hint zora_location = world.get_location("King Zora", player) tt['zora_tells_cost'] = f"You got 500 rupees to buy {hint_text(zora_location.item)}" \ f"\n ≥ Duh\n Oh carp\n{{CHOICE}}" + if world.scams[player].gives_bottle_merchant_hint: # Bottle Vendor hint vendor_location = world.get_location("Bottle Merchant", player) tt['bottle_vendor_choice'] = f"I gots {hint_text(vendor_location.item)}\nYous gots 100 rupees?" \ f"\n ≥ I want\n no way!\n{{CHOICE}}" + + # First we write hints about entrances, some from the inconvenient list others from all reasonable entrances. + if world.hints[player]: if world.hints[player].value >= 2: if world.hints[player] == "full": tt['sign_north_of_links_house'] = '> Randomizer The telepathic tiles have hints!' @@ -2280,7 +2283,7 @@ def write_strings(rom, world, player): items_to_hint |= item_name_groups["Big Keys"] if world.hints[player] == "full": - hint_count = len(hint_locations) # fill all remaining hint locations with Item hints. + hint_count = len(hint_locations) # fill all remaining hint locations with Item hints. else: hint_count = 5 if world.shuffle[player] not in ['vanilla', 'dungeonssimple', 'dungeonsfull', 'dungeonscrossed'] else 8 From 6d3538a35ba8e6dff614cacb8a64970465658127 Mon Sep 17 00:00:00 2001 From: black-sliver <59490463+black-sliver@users.noreply.github.com> Date: Sat, 28 May 2022 23:20:46 +0200 Subject: [PATCH 145/149] AppImage: fix build (#589) * CI: build: use ARCH= for AppImage * WebHost: pin flask-caching until https://github.com/pallets-eco/flask-caching/pull/352 is merged or fixed otherwise --- WebHostLib/requirements.txt | 2 +- setup.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/WebHostLib/requirements.txt b/WebHostLib/requirements.txt index ea1e27f6e1..258fa42374 100644 --- a/WebHostLib/requirements.txt +++ b/WebHostLib/requirements.txt @@ -1,7 +1,7 @@ flask>=2.1.2 pony>=0.7.16 waitress>=2.1.1 -flask-caching>=1.10.1 +flask-caching==1.10.1 Flask-Compress>=1.12 Flask-Limiter>=2.4.5.1 bokeh>=2.4.3 \ No newline at end of file diff --git a/setup.py b/setup.py index 3124f4de0d..fb466c8f27 100644 --- a/setup.py +++ b/setup.py @@ -321,6 +321,7 @@ $APPDIR/$exe "$@" self.app_id = self.app_name.lower() def run(self): + import platform self.dist_file.parent.mkdir(parents=True, exist_ok=True) if self.app_dir.is_dir(): shutil.rmtree(self.app_dir) @@ -333,7 +334,7 @@ $APPDIR/$exe "$@" self.write_desktop() self.write_launcher(self.app_exec) print(f'{self.app_dir} -> {self.dist_file}') - subprocess.call(f'./appimagetool -n "{self.app_dir}" "{self.dist_file}"', shell=True) + subprocess.call(f'ARCH={platform.machine()} ./appimagetool -n "{self.app_dir}" "{self.dist_file}"', shell=True) cx_Freeze.setup( From 3dd3f045e6db16f5ba24efb70d34af61740f9205 Mon Sep 17 00:00:00 2001 From: Berserker66 Date: Sun, 29 May 2022 07:43:53 +0000 Subject: [PATCH 146/149] WebHost: use non-blocking file lock on unix, just like windows --- WebHostLib/autolauncher.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WebHostLib/autolauncher.py b/WebHostLib/autolauncher.py index 97db4ca6f5..dc88c20253 100644 --- a/WebHostLib/autolauncher.py +++ b/WebHostLib/autolauncher.py @@ -53,7 +53,7 @@ else: # unix def __enter__(self): try: self.fp = open(self.lockfile, "wb") - fcntl.flock(self.fp.fileno(), fcntl.LOCK_EX) + fcntl.flock(self.fp.fileno(), fcntl.LOCK_EX | fcntl.LOCK_NB) except OSError as e: raise AlreadyRunningException() from e From 20be691f366109bc89b3b519aeb6fa84b43d1649 Mon Sep 17 00:00:00 2001 From: TheCondor07 Date: Mon, 30 May 2022 01:11:01 -0400 Subject: [PATCH 147/149] SC2: GUI Mission Launcher (#586) * SC2: Functioning Starcraft 2 Mission Launcher UI * AutoWorld: add .__file__ attribute to AutoWorlds This tries to help with a recurring easy to make mistake, where ./worlds/myworld does not exist in frozen form and is instead ./lib/worlds/myworld * SC2: get .kv file path correctly when frozen too Co-authored-by: TheCondor07 Co-authored-by: Fabian Dill --- Starcraft2Client.py | 175 +++++++++++++++++++++++---------- kvui.py | 3 +- worlds/AutoWorld.py | 2 + worlds/sc2wol/MissionTables.py | 119 +++++++++++----------- worlds/sc2wol/Regions.py | 5 +- worlds/sc2wol/Starcraft2.kv | 16 +++ 6 files changed, 206 insertions(+), 114 deletions(-) create mode 100644 worlds/sc2wol/Starcraft2.kv diff --git a/Starcraft2Client.py b/Starcraft2Client.py index 777e1c334f..c1962f961e 100644 --- a/Starcraft2Client.py +++ b/Starcraft2Client.py @@ -3,18 +3,21 @@ from __future__ import annotations import multiprocessing import logging import asyncio -import nest_asyncio +import os.path +import nest_asyncio import sc2 from sc2.main import run_game from sc2.data import Race from sc2.bot_ai import BotAI from sc2.player import Bot + from worlds.sc2wol.Regions import MissionInfo from worlds.sc2wol.MissionTables import lookup_id_to_mission from worlds.sc2wol.Items import lookup_id_to_name, item_table from worlds.sc2wol.Locations import SC2WOL_LOC_ID_OFFSET +from worlds.sc2wol import SC2WoLWorld from Utils import init_logging @@ -34,12 +37,11 @@ nest_asyncio.apply() class StarcraftClientProcessor(ClientCommandProcessor): ctx: Context - missions_unlocked = False def _cmd_disable_mission_check(self) -> bool: """Disables the check to see if a mission is available to play. Meant for co-op runs where one player can play the next mission in a chain the other player is doing.""" - self.missions_unlocked = True + self.ctx.missions_unlocked = True sc2_logger.info("Mission check has been disabled") def _cmd_play(self, mission_id: str = "") -> bool: @@ -51,20 +53,7 @@ class StarcraftClientProcessor(ClientCommandProcessor): if num_options > 0: mission_number = int(options[0]) - if self.missions_unlocked or \ - is_mission_available(mission_number, self.ctx.checked_locations, self.ctx.mission_req_table): - if self.ctx.sc2_run_task: - if not self.ctx.sc2_run_task.done(): - sc2_logger.warning("Starcraft 2 Client is still running!") - self.ctx.sc2_run_task.cancel() # doesn't actually close the game, just stops the python task - if self.ctx.slot is None: - sc2_logger.warning("Launching Mission without Archipelago authentication, " - "checks will not be registered to server.") - self.ctx.sc2_run_task = asyncio.create_task(starcraft_launch(self.ctx, mission_number), - name="Starcraft 2 Launch") - else: - sc2_logger.info( - "This mission is not currently unlocked. Use /unfinished or /available to see what is available.") + self.ctx.play_mission(mission_number) else: sc2_logger.info( @@ -99,6 +88,7 @@ class Context(CommonContext): announcements = [] announcement_pos = 0 sc2_run_task: typing.Optional[asyncio.Task] = None + missions_unlocked = False async def server_auth(self, password_requested: bool = False): if password_requested and not self.password: @@ -130,6 +120,23 @@ class Context(CommonContext): def run_gui(self): from kvui import GameManager + from kivy.base import Clock + from kivy.uix.tabbedpanel import TabbedPanelItem + from kivy.uix.gridlayout import GridLayout + from kivy.lang import Builder + from kivy.uix.label import Label + from kivy.uix.button import Button + + import Utils + + class MissionButton(Button): + pass + + class MissionLayout(GridLayout): + pass + + class MissionCategory(GridLayout): + pass class SC2Manager(GameManager): logging_pairs = [ @@ -138,14 +145,97 @@ class Context(CommonContext): ] base_title = "Archipelago Starcraft 2 Client" + mission_panel = None + last_checked_locations = {} + mission_id_to_button = {} + + def __init__(self, ctx): + super().__init__(ctx) + + def build(self): + container = super().build() + + panel = TabbedPanelItem(text="Starcraft 2 Launcher") + self.mission_panel = panel.content = MissionLayout() + + self.tabs.add_widget(panel) + + Clock.schedule_interval(self.build_mission_table, 0.5) + + return container + + def build_mission_table(self, dt): + self.mission_panel.clear_widgets() + + if self.ctx.mission_req_table: + self.mission_id_to_button = {} + categories = {} + available_missions = [] + unfinished_missions = calc_unfinished_missions(self.ctx.checked_locations, self.ctx.mission_req_table, + self.ctx, available_missions=available_missions) + + self.last_checked_locations = self.ctx.checked_locations + + # separate missions into categories + for mission in self.ctx.mission_req_table: + if not self.ctx.mission_req_table[mission].category in categories: + categories[self.ctx.mission_req_table[mission].category] = [] + + categories[self.ctx.mission_req_table[mission].category].append(mission) + + for category in categories: + category_panel = MissionCategory() + category_panel.add_widget(Label(text=category, size_hint_y=None, height=50, outline_width=1)) + + for mission in categories[category]: + text = mission + + if mission in unfinished_missions: + text = f"[color=6495ED]{text}[/color]" + elif mission in available_missions: + text = f"[color=FFFFFF]{text}[/color]" + else: + text = f"[color=a9a9a9]{text}[/color]" + + mission_button = MissionButton(text=text, size_hint_y=None, height=50) + mission_button.bind(on_press=self.mission_callback) + self.mission_id_to_button[self.ctx.mission_req_table[mission].id] = mission_button + category_panel.add_widget(mission_button) + + category_panel.add_widget(Label(text="")) + self.mission_panel.add_widget(category_panel) + + def mission_callback(self, button): + self.ctx.play_mission(list(self.mission_id_to_button.keys()) + [list(self.mission_id_to_button.values()).index(button)]) + self.ui = SC2Manager(self) self.ui_task = asyncio.create_task(self.ui.async_run(), name="UI") + Builder.load_file(Utils.local_path(os.path.dirname(SC2WoLWorld.__file__), "Starcraft2.kv")) + async def shutdown(self): await super(Context, self).shutdown() if self.sc2_run_task: self.sc2_run_task.cancel() + def play_mission(self, mission_id): + if self.missions_unlocked or \ + is_mission_available(mission_id, self.checked_locations, self.mission_req_table): + if self.sc2_run_task: + if not self.sc2_run_task.done(): + sc2_logger.warning("Starcraft 2 Client is still running!") + self.sc2_run_task.cancel() # doesn't actually close the game, just stops the python task + if self.slot is None: + sc2_logger.warning("Launching Mission without Archipelago authentication, " + "checks will not be registered to server.") + self.sc2_run_task = asyncio.create_task(starcraft_launch(self, mission_id), + name="Starcraft 2 Launch") + else: + sc2_logger.info( + f"{lookup_id_to_mission[mission_id]} is not currently unlocked. " + f"Use /unfinished or /available to see what is available.") + async def main(): multiprocessing.freeze_support() @@ -404,39 +494,6 @@ class ArchipelagoBot(sc2.bot_ai.BotAI): await self.chat_send("LostConnection - Lost connection to game.") -mission_req_table = { - "Liberation Day": MissionInfo(1, 7, [], completion_critical=True), - "The Outlaws": MissionInfo(2, 2, [1], completion_critical=True), - "Zero Hour": MissionInfo(3, 4, [2], completion_critical=True), - "Evacuation": MissionInfo(4, 4, [3]), - "Outbreak": MissionInfo(5, 3, [4]), - "Safe Haven": MissionInfo(6, 1, [5], number=7), - "Haven's Fall": MissionInfo(7, 1, [5], number=7), - "Smash and Grab": MissionInfo(8, 5, [3], completion_critical=True), - "The Dig": MissionInfo(9, 4, [8], number=8, completion_critical=True), - "The Moebius Factor": MissionInfo(10, 9, [9], number=11, completion_critical=True), - "Supernova": MissionInfo(11, 5, [10], number=14, completion_critical=True), - "Maw of the Void": MissionInfo(12, 6, [11], completion_critical=True), - "Devil's Playground": MissionInfo(13, 3, [3], number=4), - "Welcome to the Jungle": MissionInfo(14, 4, [13]), - "Breakout": MissionInfo(15, 3, [14], number=8), - "Ghost of a Chance": MissionInfo(16, 6, [14], number=8), - "The Great Train Robbery": MissionInfo(17, 4, [3], number=6), - "Cutthroat": MissionInfo(18, 5, [17]), - "Engine of Destruction": MissionInfo(19, 6, [18]), - "Media Blitz": MissionInfo(20, 5, [19]), - "Piercing the Shroud": MissionInfo(21, 6, [20]), - "Whispers of Doom": MissionInfo(22, 4, [9]), - "A Sinister Turn": MissionInfo(23, 4, [22]), - "Echoes of the Future": MissionInfo(24, 3, [23]), - "In Utter Darkness": MissionInfo(25, 3, [24]), - "Gates of Hell": MissionInfo(26, 2, [12], completion_critical=True), - "Belly of the Beast": MissionInfo(27, 4, [26], completion_critical=True), - "Shatter the Sky": MissionInfo(28, 5, [26], completion_critical=True), - "All-In": MissionInfo(29, -1, [27, 28], completion_critical=True, or_requirements=True) -} - - def calc_objectives_completed(mission, missions_info, locations_done, unfinished_locations, ctx): objectives_complete = 0 @@ -460,7 +517,8 @@ def request_unfinished_missions(locations_done, location_table, ui, ctx): unlocks = initialize_blank_mission_dict(location_table) unfinished_locations = initialize_blank_mission_dict(location_table) - unfinished_missions = calc_unfinished_missions(locations_done, location_table, unlocks, unfinished_locations, ctx) + unfinished_missions = calc_unfinished_missions(locations_done, location_table, ctx, unlocks=unlocks, + unfinished_locations=unfinished_locations) message += ", ".join(f"{mark_up_mission_name(mission, location_table, ui,unlocks)}[{location_table[mission].id}] " + mark_up_objectives( @@ -477,10 +535,21 @@ def request_unfinished_missions(locations_done, location_table, ui, ctx): sc2_logger.warning("No mission table found, you are likely not connected to a server.") -def calc_unfinished_missions(locations_done, locations, unlocks, unfinished_locations, ctx): +def calc_unfinished_missions(locations_done, locations, ctx, unlocks=None, unfinished_locations=None, + available_missions=[]): unfinished_missions = [] locations_completed = [] - available_missions = calc_available_missions(locations_done, locations, unlocks) + + if not unlocks: + unlocks = initialize_blank_mission_dict(locations) + + if not unfinished_locations: + unfinished_locations = initialize_blank_mission_dict(locations) + + if len(available_missions) > 0: + available_missions = [] + + available_missions.extend(calc_available_missions(locations_done, locations, unlocks)) for name in available_missions: if not locations[name].extra_locations == -1: diff --git a/kvui.py b/kvui.py index 3ea14191a2..be334def5d 100644 --- a/kvui.py +++ b/kvui.py @@ -363,7 +363,8 @@ class GameManager(App): return self.container def update_texts(self, dt): - self.tabs.content.children[0].fix_heights() # TODO: remove this when Kivy fixes this upstream + if hasattr(self.tabs.content.children[0], 'fix_heights'): + self.tabs.content.children[0].fix_heights() # TODO: remove this when Kivy fixes this upstream if self.ctx.server: self.title = self.base_title + " " + Utils.__version__ + \ f" | Connected to: {self.ctx.server_address} " \ diff --git a/worlds/AutoWorld.py b/worlds/AutoWorld.py index c71642c4c9..0bce31b424 100644 --- a/worlds/AutoWorld.py +++ b/worlds/AutoWorld.py @@ -1,6 +1,7 @@ from __future__ import annotations import logging +import sys from typing import Dict, FrozenSet, Set, Tuple, List, Optional, TextIO, Any, Callable, Union, NamedTuple from BaseClasses import MultiWorld, Item, CollectionState, Location, Tutorial @@ -41,6 +42,7 @@ class AutoWorldRegister(type): new_class = super().__new__(mcs, name, bases, dct) if "game" in dct: AutoWorldRegister.world_types[dct["game"]] = new_class + new_class.__file__ = sys.modules[new_class.__module__].__file__ return new_class diff --git a/worlds/sc2wol/MissionTables.py b/worlds/sc2wol/MissionTables.py index d2906fd887..92a7189d4a 100644 --- a/worlds/sc2wol/MissionTables.py +++ b/worlds/sc2wol/MissionTables.py @@ -14,6 +14,7 @@ class MissionInfo(NamedTuple): id: int extra_locations: int required_world: List[int] + category: str number: int = 0 # number of worlds need beaten completion_critical: bool = False # missions needed to beat game or_requirements: bool = False # true if the requirements should be or-ed instead of and-ed @@ -22,74 +23,76 @@ class MissionInfo(NamedTuple): class FillMission(NamedTuple): type: str connect_to: List[int] # -1 connects to Menu + category: str number: int = 0 # number of worlds need beaten completion_critical: bool = False # missions needed to beat game or_requirements: bool = False # true if the requirements should be or-ed instead of and-ed + vanilla_shuffle_order = [ - FillMission("no_build", [-1], completion_critical=True), - FillMission("easy", [0], completion_critical=True), - FillMission("easy", [1], completion_critical=True), - FillMission("easy", [2]), - FillMission("medium", [3]), - FillMission("hard", [4], number=7), - FillMission("hard", [4], number=7), - FillMission("easy", [2], completion_critical=True), - FillMission("medium", [7], number=8, completion_critical=True), - FillMission("hard", [8], number=11, completion_critical=True), - FillMission("hard", [9], number=14, completion_critical=True), - FillMission("hard", [10], completion_critical=True), - FillMission("medium", [2], number=4), - FillMission("medium", [12]), - FillMission("hard", [13], number=8), - FillMission("hard", [13], number=8), - FillMission("medium", [2], number=6), - FillMission("hard", [16]), - FillMission("hard", [17]), - FillMission("hard", [18]), - FillMission("hard", [19]), - FillMission("medium", [8]), - FillMission("hard", [21]), - FillMission("hard", [22]), - FillMission("hard", [23]), - FillMission("hard", [11], completion_critical=True), - FillMission("hard", [25], completion_critical=True), - FillMission("hard", [25], completion_critical=True), - FillMission("all_in", [26, 27], completion_critical=True, or_requirements=True) + FillMission("no_build", [-1], "Mar Sara", completion_critical=True), + FillMission("easy", [0], "Mar Sara", completion_critical=True), + FillMission("easy", [1], "Mar Sara", completion_critical=True), + FillMission("easy", [2], "Colonist"), + FillMission("medium", [3], "Colonist"), + FillMission("hard", [4], "Colonist", number=7), + FillMission("hard", [4], "Colonist", number=7), + FillMission("easy", [2], "Artifact", completion_critical=True), + FillMission("medium", [7], "Artifact", number=8, completion_critical=True), + FillMission("hard", [8], "Artifact", number=11, completion_critical=True), + FillMission("hard", [9], "Artifact", number=14, completion_critical=True), + FillMission("hard", [10], "Artifact", completion_critical=True), + FillMission("medium", [2], "Covert", number=4), + FillMission("medium", [12], "Covert"), + FillMission("hard", [13], "Covert", number=8), + FillMission("hard", [13], "Covert", number=8), + FillMission("medium", [2], "Rebellion", number=6), + FillMission("hard", [16], "Rebellion"), + FillMission("hard", [17], "Rebellion"), + FillMission("hard", [18], "Rebellion"), + FillMission("hard", [19], "Rebellion"), + FillMission("medium", [8], "Prophecy"), + FillMission("hard", [21], "Prophecy"), + FillMission("hard", [22], "Prophecy"), + FillMission("hard", [23], "Prophecy"), + FillMission("hard", [11], "Char", completion_critical=True), + FillMission("hard", [25], "Char", completion_critical=True), + FillMission("hard", [25], "Char", completion_critical=True), + FillMission("all_in", [26, 27], "Char", completion_critical=True, or_requirements=True) ] vanilla_mission_req_table = { - "Liberation Day": MissionInfo(1, 7, [], completion_critical=True), - "The Outlaws": MissionInfo(2, 2, [1], completion_critical=True), - "Zero Hour": MissionInfo(3, 4, [2], completion_critical=True), - "Evacuation": MissionInfo(4, 4, [3]), - "Outbreak": MissionInfo(5, 3, [4]), - "Safe Haven": MissionInfo(6, 1, [5], number=7), - "Haven's Fall": MissionInfo(7, 1, [5], number=7), - "Smash and Grab": MissionInfo(8, 5, [3], completion_critical=True), - "The Dig": MissionInfo(9, 4, [8], number=8, completion_critical=True), - "The Moebius Factor": MissionInfo(10, 9, [9], number=11, completion_critical=True), - "Supernova": MissionInfo(11, 5, [10], number=14, completion_critical=True), - "Maw of the Void": MissionInfo(12, 6, [11], completion_critical=True), - "Devil's Playground": MissionInfo(13, 3, [3], number=4), - "Welcome to the Jungle": MissionInfo(14, 4, [13]), - "Breakout": MissionInfo(15, 3, [14], number=8), - "Ghost of a Chance": MissionInfo(16, 6, [14], number=8), - "The Great Train Robbery": MissionInfo(17, 4, [3], number=6), - "Cutthroat": MissionInfo(18, 5, [17]), - "Engine of Destruction": MissionInfo(19, 6, [18]), - "Media Blitz": MissionInfo(20, 5, [19]), - "Piercing the Shroud": MissionInfo(21, 6, [20]), - "Whispers of Doom": MissionInfo(22, 4, [9]), - "A Sinister Turn": MissionInfo(23, 4, [22]), - "Echoes of the Future": MissionInfo(24, 3, [23]), - "In Utter Darkness": MissionInfo(25, 3, [24]), - "Gates of Hell": MissionInfo(26, 2, [12], completion_critical=True), - "Belly of the Beast": MissionInfo(27, 4, [26], completion_critical=True), - "Shatter the Sky": MissionInfo(28, 5, [26], completion_critical=True), - "All-In": MissionInfo(29, -1, [27, 28], completion_critical=True, or_requirements=True) + "Liberation Day": MissionInfo(1, 7, [], "Mar Sara", completion_critical=True), + "The Outlaws": MissionInfo(2, 2, [1], "Mar Sara", completion_critical=True), + "Zero Hour": MissionInfo(3, 4, [2], "Mar Sara", completion_critical=True), + "Evacuation": MissionInfo(4, 4, [3], "Colonist"), + "Outbreak": MissionInfo(5, 3, [4], "Colonist"), + "Safe Haven": MissionInfo(6, 1, [5], "Colonist", number=7), + "Haven's Fall": MissionInfo(7, 1, [5], "Colonist", number=7), + "Smash and Grab": MissionInfo(8, 5, [3], "Artifact", completion_critical=True), + "The Dig": MissionInfo(9, 4, [8], "Artifact", number=8, completion_critical=True), + "The Moebius Factor": MissionInfo(10, 9, [9], "Artifact", number=11, completion_critical=True), + "Supernova": MissionInfo(11, 5, [10], "Artifact", number=14, completion_critical=True), + "Maw of the Void": MissionInfo(12, 6, [11], "Artifact", completion_critical=True), + "Devil's Playground": MissionInfo(13, 3, [3], "Covert", number=4), + "Welcome to the Jungle": MissionInfo(14, 4, [13], "Covert"), + "Breakout": MissionInfo(15, 3, [14], "Covert", number=8), + "Ghost of a Chance": MissionInfo(16, 6, [14], "Covert", number=8), + "The Great Train Robbery": MissionInfo(17, 4, [3], "Rebellion", number=6), + "Cutthroat": MissionInfo(18, 5, [17], "Rebellion"), + "Engine of Destruction": MissionInfo(19, 6, [18], "Rebellion"), + "Media Blitz": MissionInfo(20, 5, [19], "Rebellion"), + "Piercing the Shroud": MissionInfo(21, 6, [20], "Rebellion"), + "Whispers of Doom": MissionInfo(22, 4, [9], "Prophecy"), + "A Sinister Turn": MissionInfo(23, 4, [22], "Prophecy"), + "Echoes of the Future": MissionInfo(24, 3, [23], "Prophecy"), + "In Utter Darkness": MissionInfo(25, 3, [24], "Prophecy"), + "Gates of Hell": MissionInfo(26, 2, [12], "Char", completion_critical=True), + "Belly of the Beast": MissionInfo(27, 4, [26], "Char", completion_critical=True), + "Shatter the Sky": MissionInfo(28, 5, [26], "Char", completion_critical=True), + "All-In": MissionInfo(29, -1, [27, 28], "Char", completion_critical=True, or_requirements=True) } lookup_id_to_mission: Dict[int, str] = { diff --git a/worlds/sc2wol/Regions.py b/worlds/sc2wol/Regions.py index a0519cc843..003037dc89 100644 --- a/worlds/sc2wol/Regions.py +++ b/worlds/sc2wol/Regions.py @@ -203,8 +203,9 @@ def create_regions(world: MultiWorld, player: int, locations: Tuple[LocationData mission_req_table.update({missions[i]: MissionInfo( vanilla_mission_req_table[missions[i]].id, vanilla_mission_req_table[missions[i]].extra_locations, - connections, completion_critical=vanilla_shuffle_order[i].completion_critical, - number=vanilla_shuffle_order[i].number, or_requirements=vanilla_shuffle_order[i].or_requirements)}) + connections, vanilla_shuffle_order[i].category, number=vanilla_shuffle_order[i].number, + completion_critical=vanilla_shuffle_order[i].completion_critical, + or_requirements=vanilla_shuffle_order[i].or_requirements)}) return mission_req_table diff --git a/worlds/sc2wol/Starcraft2.kv b/worlds/sc2wol/Starcraft2.kv new file mode 100644 index 0000000000..9c52d64c47 --- /dev/null +++ b/worlds/sc2wol/Starcraft2.kv @@ -0,0 +1,16 @@ +: + rows: 1 + +: + cols: 1 + padding: [10,5,10,5] + spacing: [0,5] + +: + text_size: self.size + markup: True + halign: 'center' + valign: 'middle' + padding_x: 5 + markup: True + outline_width: 1 From 768f9497fddf828b2d30419020c918eeff8bc5b2 Mon Sep 17 00:00:00 2001 From: lordlou <87331798+lordlou@users.noreply.github.com> Date: Mon, 30 May 2022 01:12:01 -0400 Subject: [PATCH 148/149] Sm remote item fix (#592) --- SNIClient.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/SNIClient.py b/SNIClient.py index b7c9ba9036..ff56595afc 100644 --- a/SNIClient.py +++ b/SNIClient.py @@ -1185,7 +1185,10 @@ async def game_watcher(ctx: Context): if itemOutPtr < len(ctx.items_received): item = ctx.items_received[itemOutPtr] itemId = item.item - items_start_id - locationId = (item.location - locations_start_id) if item.location >= 0 and bool(ctx.items_handling & 0b010) else 0x00 + if bool(ctx.items_handling & 0b010): + locationId = (item.location - locations_start_id) if (item.location >= 0 and item.player == ctx.slot) else 0xFF + else: + locationId = 0x00 #backward compat playerID = item.player if item.player <= SM_ROM_PLAYER_LIMIT else 0 snes_buffered_write(ctx, SM_RECV_PROGRESS_ADDR + itemOutPtr * 4, bytes( From d31c24bbf78c1c1dd19a54e3fe5bb04c50596d3a Mon Sep 17 00:00:00 2001 From: black-sliver <59490463+black-sliver@users.noreply.github.com> Date: Mon, 30 May 2022 09:01:55 +0200 Subject: [PATCH 149/149] Doc: deprecate datapackage_version --- docs/network protocol.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/network protocol.md b/docs/network protocol.md index 3dca2b8f63..f728e4f68e 100644 --- a/docs/network protocol.md +++ b/docs/network protocol.md @@ -65,8 +65,8 @@ Sent to clients when they connect to an Archipelago server. | location_check_points | int | The amount of hint points you receive per item/location check completed. || | players | list\[[NetworkPlayer](#NetworkPlayer)\] | Sent only if the client is properly authenticated (see [Archipelago Connection Handshake](#Archipelago-Connection-Handshake)). Information on the players currently connected to the server. | | games | list\[str\] | sorted list of game names for the players, so first player's game will be games\[0\]. Matches game names in datapackage. | -| datapackage_version | int | Data version of the [data package](#Data-Package-Contents) the server will send. Used to update the client's (optional) local cache. | -| datapackage_versions | dict\[str, int\] | Data versions of the individual games' data packages the server will send. | +| datapackage_version | int | Sum of individual games' datapackage version. Deprecated. Use `datapackage_versions` instead. | +| datapackage_versions | dict\[str, int\] | Data versions of the individual games' data packages the server will send. Used to decide which games' caches are outdated. See [Data Package Contents](#Data-Package-Contents). | | seed_name | str | uniquely identifying name of this generation | | time | float | Unix time stamp of "now". Send for time synchronization if wanted for things like the DeathLink Bounce. |